こんにちは、サイオステクノロジー技術部 武井です。Kubernetesのメインの特徴の一つにRollingUpdate(無停止更新)がありますが、その方法にも色々あるみたいなので、調べて試してみました。
RollingUpdate
Podの数を指定した個数ずつ増減させてアップデートしていく方法です。spec.strategy.typeにRollingUpdateと指定して、さらにspec.strategy.rollingUpdateにmaxUnavailableとmasSurgeを指定します。以下のような感じです。
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-example spec: strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 0 replicas: 3 selector: matchLabels: app: deployment-example template: metadata: labels: app: deployment-example spec: containers: - name: webapp image: ntakeiacr.azurecr.io/web:1.0 ports: - containerPort: 80 imagePullSecrets: - name: docker-reg-credential
maxUnavailableとmaxSurgeはRollingUpdateするときのPodを増減させる数を制御します。maxSurgeはreplicasで指定した数よりも増やしていい最大Pod数、maxUnavailableはreplicasで指定した数よりも減らしていい最大Pod数です。これではイマイチよくわからないと思うので図解で説明致します。
RollingUpdateした場合、つまりマニフェストファイルのtemplate以下を変更してデプロイした場合、Pod数は3〜4台の間で推移します。maxSurgeが1なので、replicasで指定した3台のPod数よりも最大1台増加してRollingUpdateしてもよいということになります。つまり以下のようにPod数が遷移します。
Pod数が最大4台になっているのがわかると思います。これは、Nodeのリソースに比較的余裕のあるときに指定するパラメータになります。
RollingUpdateした場合、つまりマニフェストファイルのtemplate以下を変更してデプロイした場合、Pod数は2〜3台の間で推移します。maxUnuvailableが1なので、replicasで指定した3台のPod数よりも最大1台減少してRollingUpdateしてもよいということになります。つまり以下のようにPod数が遷移します。
Pod数が最大3台になっているのがわかると思います。これは、Nodeのリソースに比較的余裕のないときに指定するパラメータになります。