CKAD — 쿠버네티스 애플리케이션 개발자 · 진짜 클러스터에서 확인하기 · 실습
배포가 실제로 무중단인지 재 본다
이 실습은 진짜로 파드가 뜨고 죽는 클러스터에서 합니다
VM 안에 진짜 k3s 가 떠 있습니다. 롤링 업데이트가 정말로 한 대씩 교체되고,
실패한 롤아웃은 정말로 멈추며, kubectl drain 은 PodDisruptionBudget 에
정말로 막힙니다.
CKAD 과정의 다른 롤아웃 실습이 도는 가짜 클러스터에서는 파드가 실행되지
않으므로 "무중단이었는가" 를 잴 방법이 없습니다.
처음 뜨는 데 2분쯤 걸립니다.
목표
배포 중에 요청을 계속 보내면서 실패가 0 인지 숫자로 확인하고, 실패한
롤아웃이 어떻게 멈추는지, 되돌리기가 무엇을 되돌리는지를 봅니다.
왜 중요한가
"무중단 배포" 는 전략 이름을 고르는 일이 아니라 **여러 설정이 맞물려야
성립하는 결과**입니다. 하나만 빠져도 조용히 깨집니다.
readinessProbe가 없으면 새 파드가 뜨자마자 트래픽을 받습니다. 아직 준비가 안 됐는데도.maxUnavailable이 크면 한꺼번에 내려가 용량이 부족해집니다.- 종료 유예(
terminationGracePeriodSeconds) 가 짧으면 처리 중이던 요청이 잘립니다.
그리고 깨졌는지 아닌지는 재 봐야 압니다. 배포가 끝난 뒤에 확인하면
언제나 정상으로 보입니다.
단계
모든 것은 crol 네임스페이스에 만듭니다.
1. web Deployment(레플리카 3, nginx, readinessProbe 포함)를 만들되 maxSurge 와 maxUnavailable 을 명시하세요. /root/crol/rolling.txt 에 담습니다.
2. 업데이트를 걸어 두고 그동안 요청을 계속 보내 실패 수를 세세요. /root/crol/nodowntime.txt 에 total=·failed= 두 줄로 담습니다. 실패는 0 이어야 합니다.
3. 없는 이미지로 업데이트해 롤아웃이 멈추는 것을 확인하고, 그동안 옛 파드가 살아 있다는 것도 함께 /root/crol/stuck.txt 에 담으세요.
4. rollout undo 로 되돌리고 결과를 /root/crol/undo.txt 에 담으세요. revisionHistoryLimit 도 명시합니다.
5. rollout pause 와 resume 으로 일부만 교체된 상태를 만들어 보고 /root/crol/pause.txt 에 담으세요.
6. web-pdb PodDisruptionBudget 을 만들고, 지금 몇 개까지 중단할 수 있는지와 PDB 가 막지 못하는 것을 /root/crol/pdb.txt 에 담으세요.
7. legacy Deployment 를 Recreate 전략으로 만들고, 왜 그런 전략이 필요한지를 /root/crol/recreate.txt 에 담으세요.
8. /root/crol/report.md 에 downtime_requests_failed=, recreate_causes_downtime=, pdb_min_available= 세 줄과 설명을 쓰세요.
참고
- 2번의 측정은 파드 하나를 띄워 그 안에서 반복 요청하는 것이 간단합니다.
while로 돌리며 실패를 세세요. - 롤아웃 상태는
kubectl -n crol rollout status deploy/web으로 보고, 멈춘 이유는.status.conditions에 있습니다. rollout undo는--to-revision으로 특정 판을 고를 수 있고, 남아 있는 판은rollout history로 봅니다.- PDB 의 현재 여유는
.status.disruptionsAllowed입니다. 파드 수가 부족하면 0 이 되어 drain 이 막힙니다. - 흔한 실수 1:
readinessProbe없이 무중단을 기대하는 것. 새 파드가 뜨자마자 엔드포인트에 들어가 아직 준비가 안 된 상태로 트래픽을 받습니다. - 흔한 실수 2: PDB 가 노드 장애도 막아 준다고 생각하는 것. 자발적 중단(drain, eviction)만 막습니다. 노드가 갑자기 죽는 것은 못 막습니다.
단계 8개
- 두 숫자가 교체 속도를 정한다
- 무중단인지 숫자로 잰다
- 실패한 롤아웃은 멈춘다
- 되돌리기는 무엇을 되돌리나
- 일부만 바꿔 두고 본다
- 한꺼번에 내려가지 못하게 한다
- 일부러 중단하는 전략
- 무엇을 배웠나