*유데미에서 진행하는 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를 보면 잘 출력되는 것을 확인할 수 있습니다.
'[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 |