16장 YAML을 주문서가 아니라 reconciliation 계약으로 읽는다
Kubernetes object에는 desired state가 있다. Deployment controller는 replica 수와 Pod template을 보고 실제 상태를 맞춘다. Pod가 죽으면 새 Pod를 만들고, image가 바뀌면 새 ReplicaSet으로 점진적으로 교체한다. kubectl apply가 Pod를 직접 계속 관리하는 것이 아니다.
핵심 object 관계를 먼저 외운다.
Namespace
├─ ConfigMap
├─ ServiceAccount
├─ Deployment → ReplicaSet → Pod
├─ Service → EndpointSlice → Ready Pod
├─ HPA → Deployment replicas 조정
├─ PDB → voluntary eviction 허용량
└─ Ingress → ALB → Service
metadata.labels는 장식이 아니다. Service selector, PDB selector, monitoring grouping을 연결한다. selector가 template label과 다르면 Pod가 Running이어도 traffic이 가지 않는다. YAML indentation만 확인하지 말고 reference가 실제 이름과 label을 가리키는지 검사한다.
kubectl apply --dry-run=client -f examples/k8s/00-namespace.yaml
kubectl apply --dry-run=client -f examples/k8s/10-app.yaml
kubectl diff -f examples/k8s/
client dry-run은 schema와 일부 형식을 확인할 뿐 cluster의 custom resource, admission policy, IAM 권한을 보증하지 않는다. production 전 server-side dry-run과 별도 environment 검증이 필요하다.