このセクションでは、Pod をアップデートする際に設定する詳細なパラメーターについて紹介します。
● minReadySeconds
Pod が Ready 状態になってから Deployment リソース上で Pod の起動が完了したと判断するまでの最低秒数を指定できます。Deployment リソース上で Pod の起動が完了したと判断されると、次の Pod の入れ替えが可能と判断されます。 このパラメーターで 5 とした場合は、Ready 状態になってから 5秒後に入れ替えが可能と判断されます。
● revisionHistoryLimit
ロールバック可能な履歴数を指定できます。特にパラメーターを指定しないと通常はロールバック可能な履歴は1つとなります。このパラメーターで 2とした場合は、ロールバック可能な履歴は2つとなり 2つ前までロールバック可能となります。
● progressDeadlineSeconds
Rcreate、RollingUpdate 処理のタイムアウト時間を指定でます。タイムアウト時間が経過した場合は、自動でロールバックされます。このパラメーターで 3600 とした場合は、3600秒間 処理が止まっていると自動的にロールバックされます。
実際にサンプルのマニフェストファイルを新規作成し、上記パラメーターをコードに記述します。
[root@kube-master sample-deployment]# vi sample-deployment-params.yaml
パラメーターは、Deployment の spec 以下に設定します。ここでは、minReadySeconds: 5、 revisionHistoryLimit: 2、 progressDeadlineSeconds: 3600 としています。
apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment-params spec: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 1 minReadySeconds: 5 revisionHistoryLimit: 2 progressDeadlineSeconds: 3600 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 クラスタ上にリソースを作成します。
[root@kube-master sample-deployment]# kubectl apply -f sample-deployment-params.yaml deployment.apps/sample-deployment-params created [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet リソースを確認します。ここでは、作成した ReplicaSet( sample-deployment-params-6c5948bf66 )リソースが確認できます。
[root@kube-master sample-deployment]# kubectl get replicaset NAME DESIRED CURRENT READY AGE sample-deployment-params-6c5948bf66 3 3 3 2m35s [root@kube-master sample-deployment]#
サンプルのマニフェストファイルを編集し、以下コードを変更します。
[root@kube-master sample-deployment]# vi sample-deployment-params.yaml
コンテナーイメージ( containers の image )を nginx:1.12 から nginx:1.13に変更します。
apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment-params spec: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 1 minReadySeconds: 5 revisionHistoryLimit: 2 progressDeadlineSeconds: 3600 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 サーバーから 変更したマニフェストを – – record オプションを付けて実行します。
[root@kube-master sample-deployment]# kubectl apply -f sample-deployment-params.yaml --record deployment.apps/sample-deployment-params configured [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet のリソースを – – watch オプションを付けて確認します。ローリングアップデートされていることが確認できます。
[root@kube-master sample-deployment]# kubectl get replicasets --watch NAME DESIRED CURRENT READY AGE sample-deployment-params-6c5948bf66 3 3 3 3m sample-deployment-params-7b4f67c7bc 1 1 1 6s sample-deployment-params-7b4f67c7bc 1 1 1 7s sample-deployment-params-6c5948bf66 2 3 3 3m1s sample-deployment-params-7b4f67c7bc 2 1 1 7s sample-deployment-params-6c5948bf66 2 3 3 3m1s sample-deployment-params-7b4f67c7bc 2 1 1 7s sample-deployment-params-7b4f67c7bc 2 2 1 7s sample-deployment-params-6c5948bf66 2 2 2 3m1s sample-deployment-params-7b4f67c7bc 2 2 2 9s sample-deployment-params-7b4f67c7bc 2 2 2 14s sample-deployment-params-6c5948bf66 1 2 2 3m8s sample-deployment-params-7b4f67c7bc 3 2 2 14s sample-deployment-params-6c5948bf66 1 2 2 3m8s sample-deployment-params-7b4f67c7bc 3 2 2 14s sample-deployment-params-6c5948bf66 1 1 1 3m8s sample-deployment-params-7b4f67c7bc 3 3 2 14s sample-deployment-params-7b4f67c7bc 3 3 3 15s sample-deployment-params-7b4f67c7bc 3 3 3 20s sample-deployment-params-6c5948bf66 0 1 1 3m14s sample-deployment-params-6c5948bf66 0 1 1 3m14s sample-deployment-params-6c5948bf66 0 0 0 3m14s ^C[root@kube-master sample-deployment]#
Master サーバーから ReplicaSet リソースを確認します。ここでは、古い ReplicaSet( sample-deployment-params-6c5948bf66 )と新しい ReplicaSet( sample-deployment-params-7b4f67c7bc )が確認できます。
[root@kube-master sample-deployment]# kubectl get replicaset NAME DESIRED CURRENT READY AGE sample-deployment-params-6c5948bf66 0 0 0 3m21s sample-deployment-params-7b4f67c7bc 3 3 3 27s [root@kube-master sample-deployment]#
再度、サンプルのマニフェストファイルを編集し、以下コードを変更します。
[root@kube-master sample-deployment]# vi sample-deployment-params.yaml
コンテナーのポート番号( containers の ports )を containerPort: 80 から containerPort: 8080 に変更します。
apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment-params spec: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 1 minReadySeconds: 5 revisionHistoryLimit: 2 progressDeadlineSeconds: 3600 replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.13 ports: - containerPort: 8080
再度、Master サーバーから 変更したマニフェストを – – record オプションを付けて実行します。
[root@kube-master sample-deployment]# kubectl apply -f sample-deployment-params.yaml --record deployment.apps/sample-deployment-params configured [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet のリソースを – – watch オプションを付けて確認します。ローリングアップデートされていることが確認できます。
[root@kube-master sample-deployment]# kubectl get replicasets --watch NAME DESIRED CURRENT READY AGE sample-deployment-params-6c5948bf66 0 0 0 4m17s sample-deployment-params-769d569787 2 2 2 7s sample-deployment-params-7b4f67c7bc 2 2 2 83s sample-deployment-params-769d569787 2 2 2 12s sample-deployment-params-7b4f67c7bc 1 2 2 88s sample-deployment-params-769d569787 3 2 2 12s sample-deployment-params-7b4f67c7bc 1 2 2 88s sample-deployment-params-769d569787 3 2 2 12s sample-deployment-params-7b4f67c7bc 1 1 1 89s sample-deployment-params-769d569787 3 3 2 13s sample-deployment-params-769d569787 3 3 3 13s sample-deployment-params-769d569787 3 3 3 18s sample-deployment-params-7b4f67c7bc 0 1 1 94s sample-deployment-params-7b4f67c7bc 0 1 1 94s sample-deployment-params-7b4f67c7bc 0 0 0 94s ^C[root@kube-master sample-deployment]#
Master サーバーから ReplicaSet リソースを確認します。ここでは、古い ReplicaSet( sample-deployment-params-6c5948bf66、sample-deployment-params-7b4f67c7bc )と新しい ReplicaSet( sample-deployment-params-769d569787 )が確認できます。履歴が2つあることが確認できます。
[root@kube-master sample-deployment]# kubectl get replicaset NAME DESIRED CURRENT READY AGE sample-deployment-params-6c5948bf66 0 0 0 42m sample-deployment-params-769d569787 3 3 3 37m sample-deployment-params-7b4f67c7bc 0 0 0 39m [root@kube-master sample-deployment]#