「Kubernetes完全ガイド」 を元に、WorkloadsリソースDeployment及びRollingUpdateの動作確認を行った結果をまとめます。
実行環境 / 参考情報
Kubernetes / kubectl version : 1.5.2
CentOS 7.4
※構築手順1、構築手順2
※Kubernetes Workloadsリソースについて
Deploymentとは
複数のReplicaSetを管理し、ローリング(無停止)アップデートやロールバックを実現するリソース。
DeploymentがReplicaSetを管理し、ReplicaSetがPodを管理する階層構造となる。
ローリングアップデートの仕組みは、新規にReplicaSetを作成し、新規のReplicaSetのレプリカ数を徐々に増やし、既存のReplicaSetのレプリカ数を徐々に減らす事で実現。Kubernetesで最も推奨されるコンテナの起動方法。
Deploymentの作成
Updateは、RollingUpdate(Pod無停止)を選択。Update中に許容される不足Pod(maxUnavailable)は0、超過Pod(maxSurge)は1で作成
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: sample-deployment
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
dnsPolicy: "ClusterFirst"
Deploymentの作成。
命名規則から、DeploymentがReplicaSetを作成し、ReplicaSetがPodを作成している事が分かる
[root@master ~]# kubectl apply -f sample-deployment.yaml
deployment "sample-deployment" created
[root@master ~]# kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
sample-deployment 3 3 3 3 58s
[root@master ~]# kubectl get replicasets
NAME DESIRED CURRENT READY AGE
sample-deployment-3071066810 3 3 3 1m
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
sample-deployment-3071066810-2rm79 1/1 Running 0 1m
sample-deployment-3071066810-7tbgl 1/1 Running 0 1m
sample-deployment-3071066810-p5jsx 1/1 Running 0 1m
RollingUpdateの動作確認
Deploymentで利用しているコンテナイメージをnginx:1.12からnginx:1.13にUpdateし、
ローリングアップデートの動きを確認(新規ReplicaSet内のPod数を徐々に増やし、既存ReplicaSetから切り替える事で無停止で実現)
[root@master ~]# kubectl set image deployment sample-deployment nginx-container=nginx:1.13
[root@master ~]# kubectl get replicasets --watch
NAME DESIRED CURRENT READY AGE
sample-deployment-3071066810 3 3 3 12m #既存
sample-deployment-3152331451 1 0 0 0s #新規
sample-deployment-3152331451 1 0 0 0s
sample-deployment-3152331451 1 1 0 0s
sample-deployment-3152331451 1 1 1 2s
sample-deployment-3071066810 2 3 3 14m
sample-deployment-3071066810 2 3 3 14m
sample-deployment-3152331451 2 1 1 2s
sample-deployment-3071066810 2 2 2 14m
sample-deployment-3152331451 2 1 1 2s
sample-deployment-3152331451 2 2 1 2s
sample-deployment-3152331451 2 2 2 4s
sample-deployment-3071066810 1 2 2 14m
sample-deployment-3152331451 3 2 2 4s
sample-deployment-3071066810 1 2 2 14m
sample-deployment-3152331451 3 2 2 4s
sample-deployment-3152331451 3 3 2 4s
sample-deployment-3071066810 1 1 1 14m
sample-deployment-3152331451 3 3 3 5s
sample-deployment-3071066810 0 1 1 14m
sample-deployment-3071066810 0 1 1 14m
sample-deployment-3071066810 0 0 0 14m
# Updateの状況を確認
[root@master ~]# kubectl rollout status deployment sample-deployment
deployment "sample-deployment" successfully rolled out