DaemonSet 롤백 수행하기

DaemonSet 롤백 수행하기 (Perform a Rollback on a DaemonSet)

이 페이지는 DaemonSet을 롤백하는 방법을 보여줘요. 배포(Deployment) 업데이트가 문제를 일으켰을 때, 안정적인 이전 리비전으로 되돌리는 방법을 천천히 따라가요.

출처: 문서

본문

시작하기 전에

Kubernetes 클러스터가 있어야 하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성되어 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 최소 두 개 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube를 이용해 만들거나, 아래 Kubernetes 플레이그라운드 중 하나를 사용할 수 있어요.

버전을 확인하려면 kubectl version을 입력해요. DaemonSet에서 롤링 업데이트(rolling update)를 수행하는 방법은 이미 알고 있어야 해요.

DaemonSet 롤백 수행하기

1단계: 롤백할 DaemonSet 리비전 찾기

마지막 리비전으로만 롤백하려면 이 단계를 건너뛸 수 있어요.

DaemonSet의 모든 리비전을 나열해요:

kubectl rollout history daemonset <daemonset-name>

이렇게 하면 DaemonSet 리비전 목록이 반환돼요:

daemonsets "<daemonset-name>"
REVISION        CHANGE-CAUSE
1               ...
2               ...
...

변경 원인(change cause)은 생성 시점에 DaemonSet 어노테이션 kubernetes.io/change-cause에서 각 리비전으로 복사돼요. kubectl에서 --record=true를 지정하면 실행한 명령을 change cause 어노테이션에 기록할 수 있어요.

특정 리비전의 세부 내용을 보려면:

kubectl rollout history daemonset <daemonset-name> --revision=1

다음과 같이 해당 리비전의 세부 내용이 반환돼요:

daemonsets "<daemonset-name>" with revision #1
Pod Template:
Labels:       foo=bar
Containers:
app:
 Image:        ...
 Port:         ...
 Environment:  ...
 Mounts:       ...
Volumes:      ...

2단계: 특정 리비전으로 롤백하기

# 1단계에서 얻은 리비전 번호를 --to-revision에 지정

kubectl rollout undo daemonset <daemonset-name> --to-revision=<revision>

성공하면 명령이 다음과 같이 반환해요:

daemonset "<daemonset-name>" rolled back

3단계: DaemonSet 롤백 진행 상황 관찰하기

kubectl rollout undo daemonset은 서버에 DaemonSet 롤백을 시작하라고 지시해요. 실제 롤백은 클러스터 컨트롤 플레인 안에서 비동기적으로 수행돼요.

롤백 진행 상황을 관찰하려면:

kubectl rollout status ds/<daemonset-name>

롤백이 완료되면 출력은 다음과 비슷해요:

daemonset "<daemonset-name>" successfully rolled out

DaemonSet 리비전 이해하기

앞서 kubectl rollout history 단계에서 DaemonSet 리비전 목록을 얻었어요. 각 리비전은 ControllerRevision이라는 리소스에 저장돼요.

각 리비전에 저장된 내용을 보려면 DaemonSet 리비전의 원본 리소스를 찾아요:

kubectl get controllerrevision -l <daemonset-selector-key>=<daemonset-selector-value>

이러면 ControllerRevision 목록이 반환돼요:

NAME                               CONTROLLER                     REVISION   AGE
<daemonset-name>-<revision-hash>   DaemonSet/<daemonset-name>     1          1h
<daemonset-name>-<revision-hash>   DaemonSet/<daemonset-name>     2          1h

각 ControllerRevision은 DaemonSet 리비전의 어노테이션과 템플릿을 저장해요. kubectl rollout undo는 특정 ControllerRevision을 가져와서 DaemonSet 템플릿을 ControllerRevision에 저장된 템플릿으로 교체해요. kubectl rollout undokubectl edit이나 kubectl apply 같은 다른 명령으로 DaemonSet 템플릿을 이전 리비전으로 업데이트하는 것과 동일해요.

문제 해결

더 알아보기 (Learn more)