우리가 업데이트를 했는데 없는 이미지로 인하여 ImagePullBackOff 상태가 된 적이 있을 것이다. 이를 해결하기 위해 rollback해주는데, 쿠버네티스에서는 roll out 명령어를 쓴다. 이를 서술하고자 한다.

rollout 명령어 알아보기
- kubectl rollout status: 롤아웃 작업의 상태를 확인한다.
- kubectl rollout history: 롤아웃 작업의 이력을 확인한다.
- kubectl rollout undo: 롤아웃 작업을 취소하고 이전 버전으로 롤백한다.
- kubectl rollout restart: 롤아웃 작업을 재시작한다.
- kubectl rollout pause/resume: 롤링 업데이트를 일시 중지하거나 다시 시작한다.
실습하기
1) rollout 파일 만들기
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-rollout
spec:
replicas: 3
selector:
matchLabels:
app: deploy-rollout
template:
metadata:
labels:
app: deploy-rollout
spec:
containers:
- name: nginx
image: nginx:1.20.1
위와 같이 nginx가 1.20.1인 버전의 파일을 만든다.
2) 적용하기
kubectl apply -f deploy-rollout.yaml --record
--record 옵션을 붙여서 apply 한 deployment의 경우 revision이 찍힌다. 이를 위하여 —record 옵션을 붙여준다.

kubectl get po -o wide

해당 pod가 잘 생성됨을 알 수 있다.
3) 버전확인하기
curl -I <pod Ip>

pod ip를 입력하여 내가 지정한 버전으로 생성된 것이 맞는지 확인한다.
4) 1.21.0 버전으로 업데이트하기

위의 단계에서 했던 것처럼 1.21.0버전으로 업데이트한다.
5) 1.21.12버전으로 업데이트하기

4번과 같이 5번도 1.21.12버전으로 업데이트한다. 그리고 나서 pod상태를 보면 오류가 난 것을 볼 수 있다. 이는 image에 대한 오류인데 해당 버전의 이미지가 없으므로 나는 것이다. 그래서 이를 이전 버전인 1.21.0버전으로 rollback해준다.
6) 이전 버전으로 되돌리기
—record 옵션으로 인하여 rollout한 것이 history남았으므로 이를 보고 어디로 rollback할 것인지 확인한다.
kubectl rollout history deployment <deploy name>
해당 명령어를 쳤을 때 아래와 같이 나온다.

우리의 상태는 지금 3번 상태이므로 2번으로 rollback해준다.
kubectl rollout undo deployment <deploy name>
rollback하고 싶은 revision을 지정해주지 않으면 한 단계 이전 revision으로 바뀐다.

roll back이 되었다고 나온다.
그리고 아래와 같이 확인해본다. 다시 잘 돌아가는 것을 확인해볼 수 있다.

또한 버전도 1.21.0버전으로 바뀜을 확인할 수 있다.
kubectl rollout history deployment <deploy name>
1,3,4번 revision만 있는 것을 확인할 수 있다.

이 때에 1 revision인 1.20.1버전으로 되돌아가고 싶다면
kubectl rollout undo deployment deploy-rollout --to-revision=1
--to-revision옵션을 작성하고 되돌아가고 싶은 revision의 번호를 작성해주면 된다.


제대로 돌아가는 것과 버전이 일치함을 확인할 수 있다.
👇🏻 참고 사이트
우리가 업데이트를 했는데 없는 이미지로 인하여 ImagePullBackOff 상태가 된 적이 있을 것이다. 이를 해결하기 위해 rollback해주는데, 쿠버네티스에서는 roll out 명령어를 쓴다. 이를 서술하고자 한다.

rollout 명령어 알아보기
- kubectl rollout status: 롤아웃 작업의 상태를 확인한다.
- kubectl rollout history: 롤아웃 작업의 이력을 확인한다.
- kubectl rollout undo: 롤아웃 작업을 취소하고 이전 버전으로 롤백한다.
- kubectl rollout restart: 롤아웃 작업을 재시작한다.
- kubectl rollout pause/resume: 롤링 업데이트를 일시 중지하거나 다시 시작한다.
실습하기
1) rollout 파일 만들기
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-rollout
spec:
replicas: 3
selector:
matchLabels:
app: deploy-rollout
template:
metadata:
labels:
app: deploy-rollout
spec:
containers:
- name: nginx
image: nginx:1.20.1
위와 같이 nginx가 1.20.1인 버전의 파일을 만든다.
2) 적용하기
kubectl apply -f deploy-rollout.yaml --record
--record 옵션을 붙여서 apply 한 deployment의 경우 revision이 찍힌다. 이를 위하여 —record 옵션을 붙여준다.

kubectl get po -o wide

해당 pod가 잘 생성됨을 알 수 있다.
3) 버전확인하기
curl -I <pod Ip>

pod ip를 입력하여 내가 지정한 버전으로 생성된 것이 맞는지 확인한다.
4) 1.21.0 버전으로 업데이트하기

위의 단계에서 했던 것처럼 1.21.0버전으로 업데이트한다.
5) 1.21.12버전으로 업데이트하기

4번과 같이 5번도 1.21.12버전으로 업데이트한다. 그리고 나서 pod상태를 보면 오류가 난 것을 볼 수 있다. 이는 image에 대한 오류인데 해당 버전의 이미지가 없으므로 나는 것이다. 그래서 이를 이전 버전인 1.21.0버전으로 rollback해준다.
6) 이전 버전으로 되돌리기
—record 옵션으로 인하여 rollout한 것이 history남았으므로 이를 보고 어디로 rollback할 것인지 확인한다.
kubectl rollout history deployment <deploy name>
해당 명령어를 쳤을 때 아래와 같이 나온다.

우리의 상태는 지금 3번 상태이므로 2번으로 rollback해준다.
kubectl rollout undo deployment <deploy name>
rollback하고 싶은 revision을 지정해주지 않으면 한 단계 이전 revision으로 바뀐다.

roll back이 되었다고 나온다.
그리고 아래와 같이 확인해본다. 다시 잘 돌아가는 것을 확인해볼 수 있다.

또한 버전도 1.21.0버전으로 바뀜을 확인할 수 있다.
kubectl rollout history deployment <deploy name>
1,3,4번 revision만 있는 것을 확인할 수 있다.

이 때에 1 revision인 1.20.1버전으로 되돌아가고 싶다면
kubectl rollout undo deployment deploy-rollout --to-revision=1
--to-revision옵션을 작성하고 되돌아가고 싶은 revision의 번호를 작성해주면 된다.


제대로 돌아가는 것과 버전이 일치함을 확인할 수 있다.