(CKA) 롤링 업데이트 및 롤백

롤링 업데이트 및 롤백

작업 클러스터: 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>

(참조)

– 유튜브 따배