코딩과로그

[기록용] 쿠버네틱스 상태 변경 관련 명령어 (rollout) 본문

쿠버네틱스

[기록용] 쿠버네틱스 상태 변경 관련 명령어 (rollout)

피리음 2023. 4. 11. 12:18

만약 잘못된 이미지로 변경했을 때에 어떻게 해야될까?

# 없는 이미지로 변경 시도 (sororiri/simple-node-app:4 이라는 이미지는 존재하지 않음)
# kubectl set image deployment/{dep_id} {container_id}={image_id}
$ kubectl set image deployment/first-dep simple-node-app=sororiri/simple-node-app:4
deployment.apps/first-dep image updated

# 포드의 상태(ImagePullBackOff)를 보니 Pull 에 실패한 것을 확인할 수 있다.
$ kubectl get pods                                                                 
NAME                         READY   STATUS             RESTARTS   AGE
first-dep-6d5f979bc5-cxsjm   0/1     ImagePullBackOff   0          24s
first-dep-cdd8bf9f7-h94qm    1/1     Running            0          36m

# 변경 상태를 확인해보니 지금 실패해서 계속 pending되고 있다.
$ kubectl rollout status deployment/first-dep
Waiting for deployment "first-dep" rollout to finish: 1 old replicas are pending termination...
^C

# 변경을 취소했다.
$ kubectl rollout undo deployment/first-dep 
deployment.apps/first-dep rolled back

# 변경 상태를 보니 다시 undo가 정상적으로 되었음을 확인할 수 있다.
$ kubectl rollout status deployment/first-dep
deployment "first-dep" successfully rolled out

 

특정 revison 으로 이동하고 싶으면 어떻게 해야될까?

# dep의 히스토리를 본다.
$ kubectl rollout history deployment/first-dep
deployment.apps/first-dep 
REVISION  CHANGE-CAUSE
2         <none>
3         <none>

# revision 2를 확인해보았다.
  # 내가 이동하고 싶은 이미지가 "sororiri/simple-node-app:4" 였다고 가정해보면 아래에 내가 원하는 이미지가 있는 것을 확인할 수 있다.
$ kubectl rollout history deployment/first-dep --revision=2
deployment.apps/first-dep with revision #2
Pod Template:
  Labels:	app=first-dep
	...
    Image:	sororiri/simple-node-app:4
    ...

# 원하는 revision으로 이동하는 명령어
# kubectl rollout undo deployment/{dep_id} --to-revision={revison_id}
$ kubectl rollout undo deployment/first-dep --to-revision=2

 

이것저것 삭제 명령어

# 현재 service
$ kubectl get services                                     
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
first-dep    LoadBalancer   10.103.89.233   <pending>     8080:30367/TCP   53m
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          65m

# first-dep 서비스 삭제
$ kubectl delete service first-dep
service "first-dep" deleted

# first-dep 배포 객체 삭제
$ kubectl delete deployment first-dep
deployment.apps "first-dep" deleted

# 서비스가 삭제되었음을 확인
❯ kubectl get services               
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   66m

# 서비스가 배포 객체가 삭제되었음을 확인
❯ kubectl get deployments
No resources found in default namespace.