--- title: 데몬셋(DaemonSet)에서 롤백 수행 content_type: task weight: 20 --- 이 페이지는 데몬셋에서 롤백을 수행하는 방법을 보여준다. ## {{% heading "prerequisites" %}} * 데몬셋 롤아웃 기록과 데몬셋 롤백 기능은 쿠버네티스 버전 1.7 이상의 `kubectl` 에서만 지원된다. * [데몬셋에서 롤링 업데이트를 수행](/ko/docs/tasks/manage-daemon/update-daemon-set/)하는 방법을 알고 있어야 한다. ## 데몬셋에서 롤백 수행 ### 1단계: 롤백할 데몬셋 리비전 찾기 마지막 리비전으로 롤백하려는 경우 이 단계를 건너뛸 수 있다. 데몬셋의 모든 리비전을 나열한다. ```shell kubectl rollout history daemonset ``` 이 명령은 데몬셋 리비전 목록을 반환한다. ```shell daemonsets "" REVISION CHANGE-CAUSE 1 ... 2 ... ... ``` * 변경 원인은 데몬셋 어노테이션 `kubernetes.io/change-cause` 에서 생성 시의 리비전으로 복사된다. 변경 원인 어노테이션에서 실행된 명령을 기록하도록 `kubectl` 에 `--record=true` 를 지정할 수 있다. 특정 리비전의 세부 사항을 보려면 다음을 수행한다. ```shell kubectl rollout history daemonset --revision=1 ``` 이 명령은 해당 리비전의 세부 사항을 반환한다. ```shell daemonsets "" with revision #1 Pod Template: Labels: foo=bar Containers: app: Image: ... Port: ... Environment: ... Mounts: ... Volumes: ... ``` ### 2단계: 특정 리비전으로 롤백 ```shell # --to-revision에 1단계에서 얻는 리비전 번호를 지정한다 kubectl rollout undo daemonset --to-revision= ``` 성공하면, 명령은 다음을 반환한다. ```shell daemonset "" rolled back ``` `--to-revision` 플래그를 지정하지 않은 경우, 마지막 리비전이 선택된다. ### 3단계: 데몬셋 롤백 진행 상황 확인 `kubectl rollout undo daemonset` 은 서버에 데몬셋 롤백을 시작하도록 지시한다. 실제 롤백은 서버 측에서 비동기적으로 수행된다. 롤백 진행 상황을 보려면 다음의 명령을 수행한다. ```shell kubectl rollout status ds/ ``` 롤백이 완료되면, 출력 결과는 다음과 비슷하다. ```shell daemonset "" successfully rolled out ``` ## 데몬셋 리비전의 이해 이전 `kubectl rollout history` 단계에서, 데몬셋 리비전 목록을 얻었다. 각 리비전은 `ControllerRevision` 이라는 리소스에 저장된다. `ControllerRevision` 은 쿠버네티스 릴리스 1.7 이상에서만 사용할 수 있는 리소스이다. 각 리비전에 저장된 내용을 보려면, 데몬셋 리비전 원시 리소스를 찾는다. ```shell kubectl get controllerrevision -l = ``` 이 명령은 `ControllerRevisions` 의 목록을 반환한다. ```shell NAME CONTROLLER REVISION AGE - DaemonSet/ 1 1h - DaemonSet/ 2 1h ``` 각 `ControllerRevision` 은 데몬셋 리비전의 어노테이션과 템플릿을 저장한다. ControllerRevision 오브젝트의 이름은 유효한 [DNS 서브도메인 이름](/ko/docs/concepts/overview/working-with-objects/names/#dns-서브도메인-이름)이어야 한다. `kubectl rollout undo` 는 특정 `ControllerRevision` 을 가져와 데몬셋 템플릿을 `ControllerRevision` 에 저장된 템플릿으로 바꾼다. `kubectl rollout undo` 는 `kubectl edit` 또는 `kubectl apply` 와 같은 다른 명령을 통해 데몬셋 템플릿을 이전 리비전으로 업데이트하는 것과 같다. {{< note >}} 데몬셋 리비전은 롤 포워드만 한다. 즉, 롤백이 완료된 후, 롤백될 `ControllerRevision` 의 리비전 번호(`.revision` 필드)가 증가한다. 예를 들어, 시스템에 리비전 1과 2가 있고, 리비전 2에서 리비전 1으로 롤백하면, `ControllerRevision` 은 `.revision: 1` 에서 `.revision: 3` 이 된다. {{< /note >}} ## 문제 해결 * [데몬셋 롤링 업데이트 문제 해결](/ko/docs/tasks/manage-daemon/update-daemon-set/#문제-해결)을 참고한다.