【Kubernetes】副本的擴容與縮容


環境

  1. kubernetes 1.20.2
  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 地址是不固定的,給我們的訪問增加了很大的難度。

附錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM