LoginSignup
0

More than 5 years have passed since last update.

Kubernetes Workloadsリソース: Deployment - RollingUpdateについて

Posted at

「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で最も推奨されるコンテナの起動方法。

image.png
出典:「Kubernetes完全ガイド」

Deploymentの作成

Updateは、RollingUpdate(Pod無停止)を選択。Update中に許容される不足Pod(maxUnavailable)は0、超過Pod(maxSurge)は1で作成

sample-deployment.yaml
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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0