API object에서 Pod condition까지 reconciliation을 추적합니다
Reconciliation(상태 수렴): controller가 원하는 상태와 관찰한 상태의 차이를 계속 줄이는 동작입니다.
Kubernetes는 명령을 node에 직접 전달하는 도구가 아니라 API object에 desired state를 기록하고 여러 controller가 actual state를 수렴시키는 system입니다. spec, status, condition, event는 서로 다른 증거입니다.
Deployment controller가 ReplicaSet을 만들고 scheduler가 미배치 Pod에 node를 선택하며 kubelet이 container runtime과 실제 Pod를 맞춥니다. 한 controller의 success는 다음 경계의 success를 보장하지 않습니다.
kubectl get의 짧은 열만 보고 정상으로 단정하지 않습니다. generation·observedGeneration·condition reason·event와 owner reference로 control loop가 어디까지 진행됐는지 읽습니다.
교육 사례에서 replicas를 3으로 제출했고 API 저장은 성공했지만 Ready Pod는 2개입니다. API의 성공 응답은 요청을 받아들였다는 뜻이지 원하는 workload가 전부 사용 가능하다는 뜻이 아닙니다. pending Pod의 scheduling event와 기존 replica readiness를 읽어 차이가 생긴 층을 찾습니다. controller가 다시 만드는 Pod를 수동 삭제하는 것만으로는 desired state가 바뀌지 않습니다.
- 왜 이런가
- Deployment controller가 ReplicaSet을 만들고 scheduler가 미배치 Pod에 node를 선택하며 kubelet이 container runtime과 실제 Pod를 맞춥니다. 한 controller의 success는 다음 경계의 success를 보장하지 않습니다.
- 언제 문제가 되는가
- observedGeneration 지연·condition 실패 조건이면 진행 근거가 부족합니다.
- 초보자가 자주 하는 오해
- 생성된 ReplicaSet이나 Pod를 직접 수정하면 controller가 다시 덮어쓸 수 있습니다. desired state를 소유한 상위 object와 배포 source를 고칩니다.
- 직접 확인하는 방법
- metadata generation과 status observedGeneration을 비교합니다. ownerReferences로 Deployment→ReplicaSet→Pod 관계를 추적합니다.