Kubernetes Podアプリケーションのスクロール更新(8)


一、環境準備
前のセクションの環境に続いて、次の操作を行います.不明な場合は、前のブログを参照してください.
スクロール更新は、コピーの一部のみを更新し、成功したら、より多くのコピーを更新し、最終的にすべてのコピーの更新を完了します.スクロール更新の最大の利点は、ダウンタイムがゼロであり、更新プロセス全体が常にコピーされて実行され、ビジネスの継続性が保証されます.
二、更新
前節のプロファイルmytest-deploy.yamlを参照してください.
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mytest
spec:
  replicas: 3
  template:
    metadata:
      labels:
        run: mytest
    spec:
      containers:
      - name: mytest
        image: wangzan18/mytest:v1
        ports:
        - containerPort: 80

設定されたミラーバージョンがv 1であることを確認し、作成されたReplicaSetを確認します.
[root@master ~]# kubectl get rs -o wide
NAME               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                SELECTOR
mytest-88d46bf99   3         3         3       68m   mytest       wangzan18/mytest:v1   pod-template-hash=88d46bf99,run=mytest

現在実行中のPodはReplicaSet mytest-88d46bf99によって制御されており、プロファイルのv 1をv 2に置き換えて再適用します.
[root@master ~]# kubectl apply -f mytest-deploy.yaml 
deployment.extensions/mytest configured
[root@master ~]# kubectl get pods
NAME                     READY   STATUS        RESTARTS   AGE
mytest-56c55b4c6-6gjxc   1/1     Running       0          24s
mytest-56c55b4c6-f5trx   1/1     Running       0          18s
mytest-56c55b4c6-sh5wd   1/1     Running       0          24s
mytest-88d46bf99-48f6n   1/1     Terminating   0          70m
mytest-88d46bf99-mv6cf   1/1     Terminating   0          70m
mytest-88d46bf99-p9w79   1/1     Terminating   0          70m
[root@master ~]# kubectl get deploy -o wide
NAME     READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                SELECTOR
mytest   3/3     3            3           72m   mytest       wangzan18/mytest:v2   run=mytest
[root@master ~]# kubectl get rs -o wide
NAME               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                SELECTOR
mytest-56c55b4c6   3         3         3       59s   mytest       wangzan18/mytest:v2   pod-template-hash=56c55b4c6,run=mytest
mytest-88d46bf99   0         0         0       71m   mytest       wangzan18/mytest:v1   pod-template-hash=88d46bf99,run=mytest

Deploymentのミラーがwangzan18/mytest:v2に更新され、新しいReplicaSet mytest-56c55b4c6が作成され、3つの新しいPodが管理されていることがわかります.
[root@master ~]# kubectl describe deployment mytest
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  4m9s  deployment-controller  Scaled up replica set mytest-56c55b4c6 to 1
  Normal  ScalingReplicaSet  4m9s  deployment-controller  Scaled down replica set mytest-88d46bf99 to 2
  Normal  ScalingReplicaSet  4m9s  deployment-controller  Scaled up replica set mytest-56c55b4c6 to 2
  Normal  ScalingReplicaSet  4m3s  deployment-controller  Scaled down replica set mytest-88d46bf99 to 1
  Normal  ScalingReplicaSet  4m3s  deployment-controller  Scaled up replica set mytest-56c55b4c6 to 3
  Normal  ScalingReplicaSet  4m3s  deployment-controller  Scaled down replica set mytest-88d46bf99 to 0

更新するたびにPodが1つだけ置き換えられます.
三、ロールバックkubectl applyアプリケーションを更新するたびにKubernetesは現在の構成を記録し、1つのrevision(レイアウト)として保存し、特定のrevisionにロールバックできます.
デフォルトの構成では、Kubernetesは最近のいくつかのrevisionのみを保持し、DeploymentプロファイルでrevisionHistoryLimitプロパティを使用してrevisionの数を増やすことができます.
コマンドkubectl rollout undoにより、前のバージョンにロールバックできます.
[root@master ~]# kubectl rollout undo deploy mytest
deployment.extensions/mytest rolled back
[root@master ~]# kubectl get rs -o wide
NAME               DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                SELECTOR
mytest-56c55b4c6   0         0         0       12m   mytest       wangzan18/mytest:v2   pod-template-hash=56c55b4c6,run=mytest
mytest-88d46bf99   3         3         3       82m   mytest       wangzan18/mytest:v1   pod-template-hash=88d46bf99,run=mytest

3つのPodがwangzan18/mytest:v1にミラー化されたReplicaSetによって引き継がれることが分かる.