원하는 상태 (Desired State)
쿠버네티스에는 절차를 시키지 않고 결과를 선언합니다. 웹 서버를 세 개 두라고 적어 두면, 컨트롤러가 지금 상태를 계속 들여다보며 선언과 다를 때마다 차이를 좁힙니다. 노드가 죽어 파드가 사라져도 누가 복구 명령을 내리지 않습니다. 셋이어야 하는데 둘이라는 사실만으로 새 파드가 만들어집니다.
01원하는 상태 (Desired State)
개념 한눈에 보기웹 서버를 세 개 두라고 선언합니다. 어떻게 만들라가 아니라 몇 개여야 하는지만 적어 API 서버에 맡기고, 그 선언은 etcd 에 남습니다.
컨트롤러가 선언과 지금을 견줍니다. 원하는 건 셋, 도는 건 없음 — 셋이 모자랍니다.
새 파드를 어느 노드에 놓을지는 스케줄러가 정합니다. 남은 자원을 보고 두 노드에 나눕니다.
각 노드의 kubelet 이 받은 대로 컨테이너를 띄웁니다. 노드 1에 둘, 노드 2에 하나 — 선언대로 셋이 됐습니다.
노드 2가 응답을 멈춥니다. 그 위에서 돌던 web-3 도 함께 사라져 이제 둘만 남았습니다.
아무도 복구 명령을 내리지 않습니다. 컨트롤러가 다시 세어 보고 둘뿐이라는 것을 알아챌 뿐입니다.
모자란 하나를 새로 만들어 살아 있는 노드에 놓습니다. 선언은 처음부터 끝까지 셋이었습니다.
직접 해보기
파드를 눌러 지우고, 노드를 눌러 죽여 보세요 · 아무 버튼도 누르지 않는데 셈이 도로 맞습니다
선언은 셋 · 지금도 셋이라 루프는 아무것도 하지 않습니다
02 쉽게 이해하기
For Everyone원하는 상태를 선언해 두면 컨트롤러가 현재 상태와 견주어 그 차이를 계속 좁힙니다. 절차를 지시하는 것이 아니라 결과를 적어 두는 방식입니다.
선언한 상태는 API 서버에 저장되고, 컨트롤러는 그 선언과 실제 상태를 반복해서 비교합니다.
모자라면 만들고 남으면 지우는 이 되풀이가 컨트롤 루프입니다.
새로 만들 파드를 어느 노드에 놓을지는 스케줄러가 정하고, 노드의 kubelet 이 실제 컨테이너를 띄웁니다.
복구가 이벤트 처리가 아니라 상태 비교로 일어나기 때문에, 알림을 놓쳐도 다음 순회에서 결국 맞춰집니다.
다만 즉시는 아닙니다 — 노드가 응답을 멈추면 잠시 기다렸다가(기본 5분 남짓) 그 위의 파드를 정리하고, 그때 부족분이 새로 만들어집니다.
- –장애 시 자동 복구가 일어나는 경로 파악
- –배포·롤백을 상태 선언으로 다루기
- –kubectl apply 가 명령이 아니라 선언인 이유 이해
03 자주 묻는 질문
FAQ원하는 상태 (Desired State)란 무엇인가요?+
쿠버네티스에는 절차를 시키지 않고 결과를 선언합니다. 웹 서버를 세 개 두라고 적어 두면, 컨트롤러가 지금 상태를 계속 들여다보며 선언과 다를 때마다 차이를 좁힙니다. 노드가 죽어 파드가 사라져도 누가 복구 명령을 내리지 않습니다. 셋이어야 하는데 둘이라는 사실만으로 새 파드가 만들어집니다.
원하는 상태 (Desired State)은(는) 어디에 사용하나요?+
장애 시 자동 복구가 일어나는 경로 파악, 배포·롤백을 상태 선언으로 다루기, kubectl apply 가 명령이 아니라 선언인 이유 이해
원하는 상태 (Desired State)를 쉽게 비유하면?+
원하는 상태를 선언해 두면 컨트롤러가 현재 상태와 견주어 그 차이를 계속 좁힙니다. 절차를 지시하는 것이 아니라 결과를 적어 두는 방식입니다.
