hgk0404.tistory
Code After Work
hgk0404.tistory

공지사항

  • 블로그
전체 방문자
오늘
어제
  • 전체 카테고리
    • [컴퓨터비전]
    • [MLOps]
      • [FastAPI]
    • [Computer Science]
      • [컴퓨터네트워크]
      • [알고리즘]
      • [자료구조 in C]
      • [C & C++]
      • [이산수학]
      • [Math]
    • [AI]
      • [Numpy, Pandas]
    • [Cloud]
      • [AWS]
      • [NCP]
      • [Kubernetes]
      • [Terraform]
    • [Dev]
      • [가상환경]
      • [Linux]
      • [Docker]
    • [Python]
    • [Coding Test]
      • [백준]
      • [프로그래머스]
      • [SQL]
    • [WEB]
    • [일상]
    • [엑셀]
    • [금융]

인기 글

최근 글

최근 댓글

250x250
hELLO · Designed By 정상우.
hgk0404.tistory

Code After Work

[Kubenetes] 쿠버네티스 업데이트 & 롤백 2
[Cloud]/[Kubernetes]

[Kubenetes] 쿠버네티스 업데이트 & 롤백 2

2024. 5. 25. 18:22
728x90

 

*유데미에서 진행하는 Kubernetes for the Absolute Beginners - Hands-on 강의를 바탕으로 제작되었습니다.

 

 

저번 포스팅에 이어 쿠버네티스 업데이트와 롤백 명령어에 대해 알아보겠습니다.

 

 

rollout 명령어: kubernetes에서 배포를 관리하는 데 사용되는 명령어 이 명령어를 사용하여 배포를 시작하거나 롤백하고 배포의 상태를 알 수 있습니다.

 

 

그래서 rollout명령어에는 rollout history, rollout status, rollout undo 등의 명령어가 있습니다.

 

 

# kubectl rollout history 리소스 유형 / 리소스 이름
kubectl rollout history deployment/my-deployment


>>>
deployment.apps/myapp-deployment 
REVISION  CHANGE-CAUSE
1         <none>

 

 

맨 처음 kubectl create -f deployment.yaml 명령어를 이용해서 디플로이먼트를 생성한 뒤 위의 명령어를 입력하면 revision 1로 지정되어 있습니다. 

 

 

처음 시작은 rivision 1입니다 그리고 기록을 지정하지 않았기 때문에 change-casue가 <none>으로 되어있죠

 

 

kubectl create -f deployment.yaml --record

>>>
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/myapp-deployment created

 

 

위와 같이 처음 디플로이먼트를 생성할 때 --record 옵션을 넣어 주면 됩니다.

 

 

kubectl rollout history deployment/myapp-deployment

>>>
deployment.apps/myapp-deployment 
REVISION  CHANGE-CAUSE
1         kubectl create --filename=deployment.yaml --record=true

 

 

change-cause에 --record=true로 넣었기 때문에 기록이 된다고 알려줍니다.

 

 

rollback 해보기

 

 

deployment의 image를 nginx:1.18로 변경해보겠습니다.

kubectl edit deployment myapp-deployment --record

>>>
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/myapp-deployment edited

 

 

이후에 set image 명령어를 이용해서 컨테이너의 이미지를 변경해보겠습니다

# kubectl set image 리소스유형 리소스이름 컨테이너이름=새롭게 변경할 이미지 버전 --record옵션
kubectl set image deployment myapp-deployment nginx=nginx:1.18-perl --record

>>>
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/myapp-deployment image updated

deployment는 리소스 유형이고, myapp-deployment는 디플로이먼트 이름, nginx는 컨테이너 이름입니다.

 

컨테이너 이름은 kubectl describe deployment를 확인하면 알 수 있습니다(yaml 파일에서 template.spec.containers에 있는 name 속성입니다)

 

 

rollout history 명령어로 기록을 변경 기록을 확인해봅니다.

kubectl rollout history deployment/myapp-deployment

>>>
deployment.apps/myapp-deployment 
REVISION  CHANGE-CAUSE
1         kubectl create --filename=deployment.yaml --record=true
2         kubectl edit deployment myapp-deployment --record=true
3         kubectl set image deployment myapp-deployment nginx=nginx:1.18-perl --record=true

 

 

edit 명령어와 set image 명령어를 이용해 이미지를 변경한 내용이 기록되어있습니다.

 

 

undo 명령어를 이용해 rollback을 해보겠습니다.

kubectl rollout undo deployment/myapp-deployment

>>>
deployment.apps/myapp-deployment rolled back

 

 

describe를 통해 현재 deployment의 상태를 확인하면 nginx:1.18-pearl에서 nginx:1.18 버전으로 돌아온걸 확인할 수 있습니다.

kubectl describe deployment myapp-deployment

>>>
Pod Template:
  Labels:  app=myapp
  Containers:
   nginx:
    Image:         nginx:1.18
    <후략>

 

 

이제 다시 history를 확인하면

kubectl rollout history deployment/myapp-deployment

>>>
deployment.apps/myapp-deployment
REVISION  CHANGE-CAUSE
1         kubectl create --filename=deployment.yaml --record=true
3         kubectl set image deployment myapp-deployment nginx=nginx:1.18-perl --record=true
4         kubectl edit deployment myapp-deployment --record=true

 

 

2번이 4번이 되었습니다. change-cause가 같기 때문에 그렇습니다

 

 

없는 이미지로 변경해보기

 

 

kubectl edit deployment myapp-deployment

 

 

edit 명령어를 이용해서 spec.template.image를 nginx:1.18에서 nginx:1.18-does-not-exist로 변경해보았습니다.

 

 

kubectl rollout status deployment/myapp-deployment

>>>
Waiting for deployment "myapp-deployment" rollout to finish: 3 out of 6 new replicas have been updated...

 

 

waiting이 끝나지 않습니다. 왜냐하면 nginx:1.18-does-not-exist는 존재하지 않는 이미지이기 때문입니다.

 

 

다시 kubectl rollout undo deployment/myapp-deployment를 입력해서 kuebctl rollout status deployment/myapp-deployment를 보면 잘 출력되는 것을 확인할 수 있습니다.

 

 

728x90
저작자표시 (새창열림)

'[Cloud] > [Kubernetes]' 카테고리의 다른 글

[Kubernetes] 쿠버네티스 서비스 - 2. 클러스터ip(ClusterIP)  (0) 2024.05.28
[Kubernetes] 쿠버네티스 서비스 - 1. 노드포트(NodePort)  (0) 2024.05.27
[Kubernetes] 쿠버네티스 업데이트 & 롤백  (0) 2024.05.24
[Kubernetes] deployment 기본  (0) 2024.05.24
[Kubernetes] ReplicaSet 설정 명령어  (0) 2024.05.23
'[Cloud]/[Kubernetes]' 카테고리의 다른 글
  • [Kubernetes] 쿠버네티스 서비스 - 2. 클러스터ip(ClusterIP)
  • [Kubernetes] 쿠버네티스 서비스 - 1. 노드포트(NodePort)
  • [Kubernetes] 쿠버네티스 업데이트 & 롤백
  • [Kubernetes] deployment 기본
hgk0404.tistory
hgk0404.tistory
공부기록

티스토리툴바