Oh My Algorithm
Concept Guide선언형 · 컨트롤 루프

원하는 상태 (Desired State)

쿠버네티스에는 절차를 시키지 않고 결과를 선언합니다. 웹 서버를 세 개 두라고 적어 두면, 컨트롤러가 지금 상태를 계속 들여다보며 선언과 다를 때마다 차이를 좁힙니다. 노드가 죽어 파드가 사라져도 누가 복구 명령을 내리지 않습니다. 셋이어야 하는데 둘이라는 사실만으로 새 파드가 만들어집니다.

01원하는 상태 (Desired State)

웹 서버를 세 개 두라고 선언합니다. 어떻게 만들라가 아니라 몇 개여야 하는지만 적어 API 서버에 맡기고, 그 선언은 etcd 에 남습니다.

컨트롤러가 선언과 지금을 견줍니다. 원하는 건 셋, 도는 건 없음 — 셋이 모자랍니다.

새 파드를 어느 노드에 놓을지는 스케줄러가 정합니다. 남은 자원을 보고 두 노드에 나눕니다.

각 노드의 kubelet 이 받은 대로 컨테이너를 띄웁니다. 노드 1에 둘, 노드 2에 하나 — 선언대로 셋이 됐습니다.

노드 2가 응답을 멈춥니다. 그 위에서 돌던 web-3 도 함께 사라져 이제 둘만 남았습니다.

아무도 복구 명령을 내리지 않습니다. 컨트롤러가 다시 세어 보고 둘뿐이라는 것을 알아챌 뿐입니다.

모자란 하나를 새로 만들어 살아 있는 노드에 놓습니다. 선언은 처음부터 끝까지 셋이었습니다.

etcd · replicas 3Controller3 − 0 = 3Node 1 · kubeletNode 2
1 / 7

정리

선언한 상태와 지금 상태의 차이를 쉬지 않고 좁히는 것, 쿠버네티스가 하는 일의 대부분이 이 되풀이입니다.

직접 해보기

파드를 눌러 지우고, 노드를 눌러 죽여 보세요 · 아무 버튼도 누르지 않는데 셈이 도로 맞습니다

컨트롤 플레인
노드 1
노드 2
API 서버선언을 보관
etcd선언이 실제로 적히는 곳
컨트롤러선언과 현재를 비교
스케줄러어느 노드에 놓을지
web-1
web-2
web-3
선언3지금 3

선언은 셋 · 지금도 셋이라 루프는 아무것도 하지 않습니다

02 쉽게 이해하기

For Everyone
🔑핵심 동작

원하는 상태를 선언해 두면 컨트롤러가 현재 상태와 견주어 그 차이를 계속 좁힙니다. 절차를 지시하는 것이 아니라 결과를 적어 두는 방식입니다.

💡쉽게 말하면

선언한 상태는 API 서버에 저장되고, 컨트롤러는 그 선언과 실제 상태를 반복해서 비교합니다.

모자라면 만들고 남으면 지우는 이 되풀이가 컨트롤 루프입니다.

새로 만들 파드를 어느 노드에 놓을지는 스케줄러가 정하고, 노드의 kubelet 이 실제 컨테이너를 띄웁니다.

복구가 이벤트 처리가 아니라 상태 비교로 일어나기 때문에, 알림을 놓쳐도 다음 순회에서 결국 맞춰집니다.

다만 즉시는 아닙니다 — 노드가 응답을 멈추면 잠시 기다렸다가(기본 5분 남짓) 그 위의 파드를 정리하고, 그때 부족분이 새로 만들어집니다.

📍어디에 쓰나
  • 장애 시 자동 복구가 일어나는 경로 파악
  • 배포·롤백을 상태 선언으로 다루기
  • kubectl apply 가 명령이 아니라 선언인 이유 이해

03 자주 묻는 질문

FAQ
원하는 상태 (Desired State)란 무엇인가요?+

쿠버네티스에는 절차를 시키지 않고 결과를 선언합니다. 웹 서버를 세 개 두라고 적어 두면, 컨트롤러가 지금 상태를 계속 들여다보며 선언과 다를 때마다 차이를 좁힙니다. 노드가 죽어 파드가 사라져도 누가 복구 명령을 내리지 않습니다. 셋이어야 하는데 둘이라는 사실만으로 새 파드가 만들어집니다.

원하는 상태 (Desired State)은(는) 어디에 사용하나요?+

장애 시 자동 복구가 일어나는 경로 파악, 배포·롤백을 상태 선언으로 다루기, kubectl apply 가 명령이 아니라 선언인 이유 이해

원하는 상태 (Desired State)를 쉽게 비유하면?+

원하는 상태를 선언해 두면 컨트롤러가 현재 상태와 견주어 그 차이를 계속 좁힙니다. 절차를 지시하는 것이 아니라 결과를 적어 두는 방식입니다.