このセクションでは、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]#