K8S中Pod的水平擴展,收縮原理

K8S中Pod的水平擴展,收縮

概念:更新Deployment的Pod模板,會滾動更新,依賴Kubernetes項目中的ReplicaSet。

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-set
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1

通過副本數量的定義  replicas: 3和Pod模板組成,是Deployment的子集。

Deployment控制器實際操縱的是ReplicaSet對象,而不是Pod對象。

Deployment管理的Pod,其ownerReference是ReplicaSet。

Deployment ,ReplicaSet以及Pod的關係

 

水平擴展的命令:kubectl scale

事例:

$ kubectl scale deployment nginx-deployment --replicas=4 --record
deployment.apps/nginx-deployment scaled

--record 記錄每次操作所執行的命令,方便後面查看。

檢查Deployment的狀態信息

$ kubectl get deployments
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         0         0            0           1s

實時查看狀態變化

kubectl rollout status;

查看ReplicaSet

kubectl get rs

滾動更新策略RollingUpdateStrategy

直接使用kubectl edit指令,打開API對象,修改Pod模板,保存退出會立即出發“滾動更新

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
...
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1

也可以用百分比的方式表示,比如maxUnavailable=50%

版本回滾

$ kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment

如果是要回滾到比較早的版本

首先,我需要使用 kubectl rollout history 命令,查看每次 Deployment 變更對應的版本

通過這個 kubectl rollout history 指令,看到每個版本對應的 Deployment 的 API 對象的細節,具體命令如下所示


$ kubectl rollout history deployment/nginx-deployment --revision=2

然後,我們就可以在 kubectl rollout undo 命令行最後,加上要回滾到的指定版本的版本號,就可以回滾到指定版本了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章