롤링 업데이트 및 롤백
작업 클러스터: kubectl config use-context kubernetes-admin@kubernetes
– 다음과 같이 배포를 만듭니다.
– 일:
. 이름: nginx 앱
. 버전 1.11.10-alpine과 함께 컨테이너 nginx 사용
. 배포에는 3개의 복제본이 포함되어야 합니다.
– 다음으로 롤링 업데이트를 수행하여 새 버전 1.11.13-alpine으로 애플리케이션을 배포합니다.
– 마지막으로 이 업데이트를 이전 버전인 1.11.10-alpine으로 롤백합니다.
nginx-app이라는 이름의 nginx 1.11.10-alpine 버전의 복제본 3개를 설정합니다.
kubectl create deployment nginx-app --image=nginx:1.11.10-alpine --replicas=3 --dry-run=client -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx-app
name: nginx-app
spec:
replicas: 3
selector:
matchLabels:
app: nginx-app
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx-app
spec:
containers:
- image: nginx:1.11.10-alpine
name: nginx
resources: {}
status: {}
kubectl create deployment nginx-app --image=nginx:1.11.10-alpine --replicas=3
deployment.apps/nginx-app created
kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app 3/3 3 3 3m29s
kubectl get pod | grep nginx-app
nginx-app-5577ddb949-8s8b4 1/1 Running 0 3m40s
nginx-app-5577ddb949-cckh5 1/1 Running 0 3m40s
nginx-app-5577ddb949-js9pp 1/1 Running 0 3m40s
describe 명령을 사용하여 nginx 버전을 확인합니다.
kubectl describe pod nginx-app-5577ddb949-8s8b4
Name: nginx-app-5577ddb949-8s8b4
Namespace: default
Priority: 0
Service Account: default
Node: node2.example.com/10.100.0.102
Start Time: Wed, 15 Mar 2023 21:52:50 +0900
Labels: app=nginx-app
pod-template-hash=5577ddb949
Annotations: <none>
Status: Running
IP: 10.44.0.2
IPs:
IP: 10.44.0.2
Controlled By: ReplicaSet/nginx-app-5577ddb949
Containers:
nginx:
Container ID: containerd://7891766213e498c1ea6ecbb415277fa17685f697e411befcdce8916022ae3568
Image: nginx:1.11.10-alpine
Image ID: docker.io/library/nginx@sha256:aa0daf2b17c370a1da371a767110a43b390a9db90b90d2d1b07862dc81754d61
Port: <none>
Host Port: <none>
State: Running
Started: Wed, 15 Mar 2023 21:53:02 +0900
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-2g8j6 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-2g8j6:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m58s default-scheduler Successfully assigned default/nginx-app-5577ddb949-8s8b4 to node2.example.com
Normal Pulling 3m56s kubelet Pulling image "nginx:1.11.10-alpine"
Normal Pulled 3m48s kubelet Successfully pulled image "nginx:1.11.10-alpine" in 8.420255509s
Normal Created 3m47s kubelet Created container nginx
Normal Started 3m46s kubelet Started container nginx
버전 1.11.13-alpine에 대한 지속적인 업데이트
문서 링크에서 명령 확인
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
kubectl set image deployment nginx-app nginx=nginx:1.11.13-alpine --record
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/nginx-app image updated
kubectl rollout status deployment nginx-app
Waiting for deployment "nginx-app" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-app" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-app" rollout to finish: 2 out of 3 new replicas have been updated...
Waiting for deployment "nginx-app" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-app" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-app" successfully rolled out
kubectl describe pod nginx-app-559f8549c6-5sfjk
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m47s default-scheduler Successfully assigned default/nginx-app-559f8549c6-5sfjk to node2.example.com
Normal Pulled 3m46s kubelet Container image "nginx:1.11.13-alpine" already present on machine
Normal Created 3m46s kubelet Created container nginx
Normal Started 3m45s kubelet Started container nginx
현재 업데이트 내역 확인 가능
kubectl rollout history deployment nginx-app
deployment.apps/nginx-app
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deployment nginx-app nginx=nginx:1.11.13-alpine --record=true
롤백 진행
kubectl rollout undo deployment nginx-app
deployment.apps/nginx-app rolled back
kubectl rollout status deployment nginx-app
deployment "nginx-app" successfully rolled out
kubectl get pods | grep nginx-app
nginx-app-5577ddb949-gwgk4 1/1 Running 0 49s
nginx-app-5577ddb949-lngtt 1/1 Running 0 51s
nginx-app-5577ddb949-lx52z 1/1 Running 0 43s
kubectl describe pod nginx-app-5577ddb949-lx52z
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 90s default-scheduler Successfully assigned default/nginx-app-5577ddb949-lx52z to node2.example.com
Normal Pulled 88s kubelet Container image "nginx:1.11.10-alpine" already present on machine
Normal Created 88s kubelet Created container nginx
Normal Started 88s kubelet Started container nginx
kubectl rollout history deployment nginx-app
deployment.apps/nginx-app
REVISION CHANGE-CAUSE
2 kubectl set image deployment nginx-app nginx=nginx:1.11.13-alpine --record=true
3 <none>
(참조)
– 유튜브 따배