Kubernetes入門:nginxをバージョンアップする

スポンサーリンク
Kubernetes入門:nginxをバージョンアップする 初期設定
Kubernetes入門:nginxをバージョンアップする
この記事は約13分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、Docker Desctop for Mac で有効にしたKubernates上で起動させたnginxをバージョンアップする方法についてご紹介します。

スポンサーリンク

前回の記事

この記事は下記の記事の続きになりますので、気になる方は下記の記事も参考にしてください。

Deployment

前回の記事で作成したファイル(nginx-deployment.yaml)において、下記の赤字の内容を更新します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1
        ports:
        - containerPort: 80

下記のコマンドを実行して、同じ出力になれば成功です。

% kubectl apply -f nginx-deployment.yaml                    
deployment.apps/nginx-deployment configured

% kubectl rollout status deployment.apps/nginx-deployment
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out

% kubectl get deployments                                   
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           47m

% kubectl get rs                                            
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-68fc675d59   3         3         3       39s
nginx-deployment-7fb96c846b   0         0         0       47m

% kubectl get pods --show-labels                            
NAME                                READY   STATUS      RESTARTS   AGE   LABELS
nginx-deployment-68fc675d59-hlw4x   1/1     Running     0          48s   app=nginx,pod-template-hash=68fc675d59
nginx-deployment-68fc675d59-r58dm   1/1     Running     0          55s   app=nginx,pod-template-hash=68fc675d59
nginx-deployment-68fc675d59-thp8p   1/1     Running     0          47s   app=nginx,pod-template-hash=68fc675d59

% kubectl describe deployments
Name:                   nginx-deployment
Namespace:              default
CreationTimestamp:      Mon, 22 May 2023 20:52:33 +0900
Labels:                 app=nginx
Annotations:            deployment.kubernetes.io/revision: 3
Selector:               app=nginx
Replicas:               3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.16.1
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   nginx-deployment-68fc675d59 (3/3 replicas created)
Events:
  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  49m    deployment-controller  Scaled up replica set nginx-deployment-7fb96c846b to 3
  Normal  ScalingReplicaSet  9m13s  deployment-controller  Scaled up replica set nginx-deployment-7f85497f96 to 1
  Normal  ScalingReplicaSet  2m34s  deployment-controller  Scaled down replica set nginx-deployment-7f85497f96 to 0 from 1
  Normal  ScalingReplicaSet  2m34s  deployment-controller  Scaled up replica set nginx-deployment-68fc675d59 to 1 from 0
  Normal  ScalingReplicaSet  2m27s  deployment-controller  Scaled down replica set nginx-deployment-7fb96c846b to 2 from 3
  Normal  ScalingReplicaSet  2m27s  deployment-controller  Scaled up replica set nginx-deployment-68fc675d59 to 2 from 1
  Normal  ScalingReplicaSet  2m26s  deployment-controller  Scaled down replica set nginx-deployment-7fb96c846b to 1 from 2
  Normal  ScalingReplicaSet  2m26s  deployment-controller  Scaled up replica set nginx-deployment-68fc675d59 to 3 from 2
  Normal  ScalingReplicaSet  2m25s  deployment-controller  Scaled down replica set nginx-deployment-7fb96c846b to 0 from 1

Deploymentは、Podが更新されている間に特定の数のPodのみ停止状態になることを保証します。デフォルトでは、目標とするPod数の少なくとも75%が稼働状態であることを保証します(25% max unavailable)。

また、DeploymentはPodが更新されている間に、目標とするPod数を特定の数まで超えてPodを稼働させることを保証します。デフォルトでは、目標とするPod数に対して最大でも125%を超えてPodを稼働させることを保証します(25% max surge)。

例えば、上記で説明したDeploymentの状態を注意深く見ると、最初に新しいPodが作成され、次に古いPodが削除されるのを確認できます。十分な数の新しいPodが稼働するまでは、Deploymentは古いPodを削除しません。また十分な数の古いPodが削除しない限り新しいPodは作成されません。少なくとも2つのPodが利用可能で、最大でもトータルで4つのPodが利用可能になっていることを保証します。

解説

RollingUpdateとは

  Type    Reason             Age    From                   Message
  ----    ------             ----   ----                   -------
  Normal  ScalingReplicaSet  49m    deployment-controller  Scaled up replica set nginx-deployment-7fb96c846b to 3
  Normal  ScalingReplicaSet  9m13s  deployment-controller  Scaled up replica set nginx-deployment-7f85497f96 to 1
  Normal  ScalingReplicaSet  2m34s  deployment-controller  Scaled down replica set nginx-deployment-7f85497f96 to 0 from 1
  Normal  ScalingReplicaSet  2m34s  deployment-controller  Scaled up replica set nginx-deployment-68fc675d59 to 1 from 0
  Normal  ScalingReplicaSet  2m27s  deployment-controller  Scaled down replica set nginx-deployment-7fb96c846b to 2 from 3
  Normal  ScalingReplicaSet  2m27s  deployment-controller  Scaled up replica set nginx-deployment-68fc675d59 to 2 from 1
  Normal  ScalingReplicaSet  2m26s  deployment-controller  Scaled down replica set nginx-deployment-7fb96c846b to 1 from 2
  Normal  ScalingReplicaSet  2m26s  deployment-controller  Scaled up replica set nginx-deployment-68fc675d59 to 3 from 2
  Normal  ScalingReplicaSet  2m25s  deployment-controller  Scaled down replica set nginx-deployment-7fb96c846b to 0 from 1

最初にDeploymentを作成した時、ReplicaSet(nginx-deployment-7fb96c846b)を作成してすぐにレプリカ数を3にスケールするのを確認できます。Deploymentを更新すると新しいReplicaSet(nginx-deployment-7f85497f96)を作成してレプリカ数を1にスケールアップし、古いReplicaSeetを2にスケールダウンさせます。これは常に最低でも2つのPodが利用可能で、かつ最大4つのPodが作成されている状態にするためです。Deploymentは同じローリングアップ戦略に従って新しいReplicaSetのスケールアップと古いReplicaSetのスケールダウンを続けます。最終的に新しいReplicaSetを3にスケールアップさせ、古いReplicaSetを0にスケールダウンさせます。

おわりに

今日は、Docker Desctop for Mac で有効にしたKubernates上でnginxを更新する方法についてご紹介しました。次回は、このnginxにブラウザからアクセスしてみたいと思います。

よっしー
よっしー

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました