こんにちは。よっしーです(^^)
今日は、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にブラウザからアクセスしてみたいと思います。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント