環境
- kubernetes 1.20.2
- Spring Boot 2.5.0-M1
目標
現在我們有一個副本控制器 rc,可以很方便地實現擴容與縮容操作。
縮容
replicas 沒有寫,默認為 1。
selector 沒有寫,默認和 Pod 的標簽一致。
縮容 rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-demo
spec:
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: pod-demo
image: jiangbo920827/spring-demo:actuator
ports:
- containerPort: 8080
查看縮容 Pod
[root@master kubernetes]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-demo-7dnrc 1/1 Running 0 17s 10.244.1.78 node1 <none> <none>
查看縮容 rc
[root@master kubernetes]# kubectl get rc
NAME DESIRED CURRENT READY AGE
rc-demo 1 1 1 15h
擴容
擴容 rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: rc-demo
spec:
replicas: 3
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: pod-demo
image: jiangbo920827/spring-demo:actuator
ports:
- containerPort: 8080
查看擴容 Pod
[root@master kubernetes]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-demo-7dnrc 1/1 Running 0 3m55s 10.244.1.78 node1 <none> <none>
rc-demo-rcn7s 1/1 Running 0 23s 10.244.1.79 node1 <none> <none>
rc-demo-xww8g 1/1 Running 0 23s 10.244.1.80 node1 <none> <none>
查看擴容 rc
[root@master kubernetes]# kubectl get -f rc.yaml -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
rc-demo 3 3 3 15h pod-demo jiangbo920827/spring-demo:actuator app=myapp
命令擴容和縮容
[root@master kubernetes]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-demo-7dnrc 1/1 Running 0 7m53s 10.244.1.78 node1 <none> <none>
rc-demo-rcn7s 1/1 Running 0 4m21s 10.244.1.79 node1 <none> <none>
rc-demo-xww8g 1/1 Running 0 4m21s 10.244.1.80 node1 <none> <none>
[root@master kubernetes]# kubectl scale --replicas=1 rc rc-demo
replicationcontroller/rc-demo scaled
[root@master kubernetes]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-demo-7dnrc 1/1 Running 0 9m31s 10.244.1.78 node1 <none> <none>
[root@master kubernetes]# kubectl scale --replicas=3 rc rc-demo
replicationcontroller/rc-demo scaled
[root@master kubernetes]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
rc-demo-7dnrc 1/1 Running 0 9m54s 10.244.1.78 node1 <none> <none>
rc-demo-7kl4t 1/1 Running 0 14s 10.244.2.41 node2 <none> <none>
rc-demo-nl5pq 1/1 Running 0 14s 10.244.1.81 node1 <none> <none>
通過命令,可以很方便地進行擴容和縮容操作。
但是在操作的過程中,發現 Pod 的 IP 變化了,而且所在節點服務器也有可能發生變化。
如果是在這幾個 Pod 的前面增加負載均衡器,那么就不得不修改配置的 IP 地址。
實際上,在 Pod 重啟后(和容器的重啟區分),是新的一個 Pod,k8s 在設計上,Pod 應該是短暫的,隨時可以替換的。
所以不應該依賴 Pod 所在的 IP。
總結
介紹了通過副本控制器很容易地進行擴容和縮容操作。同時也發現了一個問題,Pod 的 IP 地址是不固定的,給我們的訪問增加了很大的難度。