이것이 점프 투 공작소

쿠버네티스 리소스 특정 Revision으로 롤백하기 본문

k8s

쿠버네티스 리소스 특정 Revision으로 롤백하기

겅겅겅 2023. 5. 17. 21:49

쿠버네티스에서 리비전을 지정하고 지정한 리비전으로 리소스를 롤백하는 방법을 정리하려합니다.

1. 배포할 리소스에 메세지 작성(yaml 파일)

nginx를 배포하는 yaml파일입니다.

metadata에 annotations의 kubernetes.io/change-cause값에 메세지를 작성 가능합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
  labels:
    app: app
  annotations:
    "kubernetes.io/change-cause": "initial deployment" # 배포사유 작성
spec:
  replicas: 3
  selector:
    matchLabels:
      app: app
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    metadata:
      labels:
        app: app
        env: prod
    spec:
      containers:
      - name: app
        image: nginx:1.14.2
        ports:
        - containerPort: 8080
        resources:
          limits:
            memory: "64Mi"
            cpu: "50m"

 

2. 배포 확인

port-forward 명령어로 포트 포워딩 후 요청하여 배포 결과를 확인합니다.

포트 포워딩 후 다른 터미널을 열어 curl요청을 보내 배포된 nginx이미지를 확인합니다.

 

2-1 포트 포워딩

kubectl port-forward deployment/app 8080:80

2-2 Http요청

curl 명령어로 요청합니다.

 

3. 이미지 변경 후 annotate 작성

3-1 이미지 변경

nginx에서 httpd로 컨테이너 이미지를 변경합니다.

베포 완료 후 요청을 보내 동일 deployment가 nginx에서 httpd이미지로 변경된것을 확인했습니다.

kubectl set image deployment/app app=httpd

3-2 변경된 리소스에 대한 annotate를 작성합니다.

annotate 명령어로 변경된 revision에 대한 코멘트를 작성합니다.

kubectl annotate deployment/app kubernetes.io/change-cause="image changed to httpd"

3-3 annotate 이력 확인

rollout history 명령어로 리소스의 annotate 를 확인합니다.

명령어에서 --revision 으로 특정 버전을 지정하여 annotate를 조회 가능합니다.

kubectl rollout history deployment/app

 

4. Rollback

4-1 이전 revision으로 rollback합니다.

rollout undo 명령어를 이용해 rollback하기를 원하는 revision을 지정하여 rollback 합니다.

--to-revision 옵션을 주지 않으면 바로 이전 revision으로 롤백합니다.

kubectl rollout undo deployment/app --to-revision=1

4-2 변경된 이미지 확인

port-forward 후 curl 요청을 보내 rollback되었는지 확인합니다.