このセクションでは、RollingUpdate による Pod のアップデートについて紹介します。 RollingUpdate は、アップデート中に許容される不足 Pod 数( maxUnavailable )と超過 Pod 数( maxSurge )を指定し、余分のリソースを極力使用しないようにローリングアップデートするようにしたり、多くのリソースを消費しすばやくローリングアップデートするようにしたりすることができます。ローリングアップデートのため、Rcreate とはことなり基本的にはサービスを停止させることなくアップデートができます。
新しいPod を作成後したら古い Pod を削除
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-deployment]# vi sample-deployment-rollingupdate.yaml
spec に strategy 項目を記述し、type に RollingUpdate を指定し、rollingUpdate に maxUnavailable と maxSurge の数を指定します。ここでは、maxUnavailable は 0、maxSurge は 1 としています。
apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment-rollingupdate spec: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 1 replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.12 ports: - containerPort: 80
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。 – – record オプションを付けておくことで、アップデートを行った際の履歴を保持しておくことが可能です。
[root@kube-master sample-deployment]# kubectl apply -f sample-deployment-rollingupdate.yaml --record deployment.apps/sample-deployment-rollingupdate created [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet のリソースを確認します。- – watch オプションを付けることで、リソースの状態に変化あった場合の状態を常時確認することできます。ここでは、3つの Pod リソースを新規で作成した状態を確認できます。
[root@kube-master ~]# kubectl get replicasets --watch NAME DESIRED CURRENT READY AGE sample-deployment-rollingupdate-6c5948bf66 3 0 0 0s sample-deployment-rollingupdate-6c5948bf66 3 0 0 1s sample-deployment-rollingupdate-6c5948bf66 3 3 0 1s sample-deployment-rollingupdate-6c5948bf66 3 3 1 2s sample-deployment-rollingupdate-6c5948bf66 3 3 2 3s sample-deployment-rollingupdate-6c5948bf66 3 3 3 3s
サンプルのマニフェストファイルを編集し、以下コードを変更します。
[root@kube-master sample-deployment]# vi sample-deployment-rollingupdate.yaml
コンテナイメージを nginx:1.12 から nginx:1.13 に変更します。
apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment-rollingupdate spec: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 1 replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.13 ports: - containerPort: 80
Master サーバーから 変更したマニフェストを実行します。
[root@kube-master sample-deployment]# kubectl apply -f sample-deployment-rollingupdate.yaml --record deployment.apps/sample-deployment-rollingupdate configured [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet リソースを確認します。ここでは、古い ReplicaSet( sample-deployment-rollingupdate-6c5948bf66 )と新しい ReplicaSet( sample-deployment-rollingupdate-7b4f67c7bc )が確認できます。
[root@kube-master sample-deployment]# kubectl get replicaset NAME DESIRED CURRENT READY AGE sample-deployment-rollingupdate-6c5948bf66 0 0 0 2m38s sample-deployment-rollingupdate-7b4f67c7bc 3 3 3 36s [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet のリソースを確認します。- – watch オプションを付けることで、リソースの状態に変化あった場合の状態を常時確認することできます。ここでは、新しい ReplicaSet( sample-deployment-rollingupdate-7b4f67c7bc )で 一つ Pod を作成した後に 古い ReplicaSet( sample-deployment-rollingupdate-6c5948bf66 )から一つ Pod を削除しアップデート処理がされていることが確認できます。
[root@kube-master ~]# kubectl get replicasets --watch NAME DESIRED CURRENT READY AGE sample-deployment-rollingupdate-6c5948bf66 3 0 0 0s sample-deployment-rollingupdate-6c5948bf66 3 0 0 1s sample-deployment-rollingupdate-6c5948bf66 3 3 0 1s sample-deployment-rollingupdate-6c5948bf66 3 3 1 2s sample-deployment-rollingupdate-6c5948bf66 3 3 2 3s sample-deployment-rollingupdate-6c5948bf66 3 3 3 3s sample-deployment-rollingupdate-7b4f67c7bc 1 0 0 0s sample-deployment-rollingupdate-7b4f67c7bc 1 0 0 0s sample-deployment-rollingupdate-7b4f67c7bc 1 1 0 0s sample-deployment-rollingupdate-7b4f67c7bc 1 1 1 1s sample-deployment-rollingupdate-6c5948bf66 2 3 3 2m3s sample-deployment-rollingupdate-6c5948bf66 2 3 3 2m3s sample-deployment-rollingupdate-6c5948bf66 2 2 2 2m3s sample-deployment-rollingupdate-7b4f67c7bc 2 1 1 1s sample-deployment-rollingupdate-7b4f67c7bc 2 1 1 1s sample-deployment-rollingupdate-7b4f67c7bc 2 2 1 1s sample-deployment-rollingupdate-7b4f67c7bc 2 2 2 2s sample-deployment-rollingupdate-6c5948bf66 1 2 2 2m4s sample-deployment-rollingupdate-7b4f67c7bc 3 2 2 2s sample-deployment-rollingupdate-6c5948bf66 1 2 2 2m4s sample-deployment-rollingupdate-7b4f67c7bc 3 2 2 2s sample-deployment-rollingupdate-7b4f67c7bc 3 3 2 2s sample-deployment-rollingupdate-6c5948bf66 1 1 1 2m4s sample-deployment-rollingupdate-7b4f67c7bc 3 3 3 4s sample-deployment-rollingupdate-6c5948bf66 0 1 1 2m6s sample-deployment-rollingupdate-6c5948bf66 0 1 1 2m6s sample-deployment-rollingupdate-6c5948bf66 0 0 0 2m6s
古い Pod を削除してから新しいPod を作成
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。 – – record オプションを付けておくことで、アップデートを行った際の履歴を保持しておくことが可能です。
[root@kube-master sample-deployment]# kubectl apply -f sample-deployment-rollingupdate.yaml --record deployment.apps/sample-deployment-rollingupdate created [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet のリソースを確認します。- – watch オプションを付けることで、リソースの状態に変化あった場合の状態を常時確認することできます。ここでは、3つの Pod リソースを新規で作成した状態を確認できます。
[root@kube-master ~]# kubectl get replicasets --watch NAME DESIRED CURRENT READY AGE sample-deployment-rollingupdate-7b4f67c7bc 3 0 0 0s sample-deployment-rollingupdate-7b4f67c7bc 3 0 0 0s sample-deployment-rollingupdate-7b4f67c7bc 3 3 0 0s sample-deployment-rollingupdate-7b4f67c7bc 3 3 1 1s sample-deployment-rollingupdate-7b4f67c7bc 3 3 2 2s sample-deployment-rollingupdate-7b4f67c7bc 3 3 3 2s
サンプルのマニフェストファイルを編集し、以下コードを変更します。
[root@kube-master sample-deployment]# vi sample-deployment-rollingupdate.yaml
コンテナイメージを nginx:1.12 から nginx:1.13 に変更し、strategy の rolling Update にある maxUnavailable を 1、maxSurge を 0 に指定します。
apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment-rollingupdate spec: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 0 replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.12 ports: - containerPort: 80
Master サーバーから 変更したマニフェストを実行します。
[root@kube-master sample-deployment]# kubectl apply -f sample-deployment-rollingupdate.yaml --record deployment.apps/sample-deployment-rollingupdate configured [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet リソースを確認します。ここでは、古い ReplicaSet( sample-deployment-rollingupdate-7b4f67c7bc )と新しい ReplicaSet( sample-deployment-rollingupdate-6c5948bf66 )が確認できます。
[root@kube-master sample-deployment]# kubectl get replicaset NAME DESIRED CURRENT READY AGE sample-deployment-rollingupdate-6c5948bf66 3 3 3 5m19s sample-deployment-rollingupdate-7b4f67c7bc 0 0 0 7m [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet のリソースを確認します。- – watch オプションを付けることで、リソースの状態に変化あった場合の状態を常時確認することできます。ここでは、古い ReplicaSet( sample-deployment-rollingupdate-7b4f67c7bc )から 一つ Pod を削除した後に新しい ReplicaSet( sample-deployment-rollingupdate-6c5948bf66 )で一つ Pod を新規作成しアップデート処理がされていることが確認できます。
[root@kube-master ~]# kubectl get replicasets --watch NAME DESIRED CURRENT READY AGE sample-deployment-rollingupdate-7b4f67c7bc 3 0 0 0s sample-deployment-rollingupdate-7b4f67c7bc 3 0 0 0s sample-deployment-rollingupdate-7b4f67c7bc 3 3 0 0s sample-deployment-rollingupdate-7b4f67c7bc 3 3 1 1s sample-deployment-rollingupdate-7b4f67c7bc 3 3 2 2s sample-deployment-rollingupdate-7b4f67c7bc 3 3 3 2s sample-deployment-rollingupdate-6c5948bf66 0 0 0 0s sample-deployment-rollingupdate-7b4f67c7bc 2 3 3 101s sample-deployment-rollingupdate-6c5948bf66 0 0 0 0s sample-deployment-rollingupdate-6c5948bf66 1 0 0 0s sample-deployment-rollingupdate-7b4f67c7bc 2 3 3 101s sample-deployment-rollingupdate-7b4f67c7bc 2 2 2 101s sample-deployment-rollingupdate-6c5948bf66 1 0 0 0s sample-deployment-rollingupdate-6c5948bf66 1 1 0 0s sample-deployment-rollingupdate-6c5948bf66 1 1 1 2s sample-deployment-rollingupdate-7b4f67c7bc 1 2 2 103s sample-deployment-rollingupdate-6c5948bf66 2 1 1 2s sample-deployment-rollingupdate-7b4f67c7bc 1 2 2 103s sample-deployment-rollingupdate-7b4f67c7bc 1 1 1 103s sample-deployment-rollingupdate-6c5948bf66 2 1 1 2s sample-deployment-rollingupdate-6c5948bf66 2 2 1 2s sample-deployment-rollingupdate-6c5948bf66 2 2 2 3s sample-deployment-rollingupdate-7b4f67c7bc 0 1 1 104s sample-deployment-rollingupdate-6c5948bf66 3 2 2 3s sample-deployment-rollingupdate-7b4f67c7bc 0 1 1 104s sample-deployment-rollingupdate-6c5948bf66 3 2 2 3s sample-deployment-rollingupdate-7b4f67c7bc 0 0 0 104s sample-deployment-rollingupdate-6c5948bf66 3 3 2 3s sample-deployment-rollingupdate-6c5948bf66 3 3 3 4s