CKAD — 쿠버네티스 애플리케이션 개발자 · 진짜 클러스터에서 확인하기 · 실습
애플리케이션이 실제로 사는 모습을 본다
이 실습은 애플리케이션이 실제로 도는 클러스터에서 합니다
VM 안에 진짜 k3s 가 떠 있습니다. kubelet 이 프로브를 실제로 돌리고, Job 이
실제로 완료되며, ConfigMap 이 실제로 마운트됩니다.
CKAD 과정의 다른 실습이 도는 가짜 클러스터에서는 **이 중 어느 것도 일어나지
않습니다.** 프로브를 걸어도 돌지 않고, Job 을 만들어도 완료되지 않습니다.
처음 뜨는 데 2분쯤 걸립니다.
목표
프로브 세 가지, Job 과 CronJob, QoS, 설정 주입을 동작으로 확인합니다.
왜 중요한가
CKAD 에서 자주 틀리는 것들은 문법이 아니라 동작의 차이입니다.
startupProbe가 왜 필요한지는 기동이 느린 애플리케이션에 짧은 liveness 를 걸어 봐야 알 수 있습니다. 다 뜨기 전에 죽고 다시 뜨기를 영원히 반복합니다.completions와parallelism은 각각 "몇 번 성공해야 하나" 와 "몇 개를 동시에 돌리나" 입니다. 헷갈리면 Job 이 영영 안 끝나거나 필요 이상으로 돕니다.- ConfigMap 을 볼륨으로 넣으면 값이 바뀔 때 파일이 갱신되지만, 환경변수로 넣으면 파드를 다시 만들어야 합니다.
단계
모든 것은 ckad 네임스페이스에 만듭니다.
1. slow-start — 기동이 20초쯤 걸리는 컨테이너에 짧은 livenessProbe 와 startupProbe 를 함께 걸어, 재시작 없이 준비되는 것을 /root/ckad/startup.txt 에 담으세요.
2. api Deployment(레플리카 3)와 Service 를 만들되 한 파드만 readiness 가 실패하게 하고, 엔드포인트에서 빠지는 것을 /root/ckad/endpoints.txt 에 담으세요.
3. batch Job(completions: 3, parallelism 지정)이 실제로 완료되는 것을 /root/ckad/job.txt 에 담으세요.
4. doomed Job 이 backoffLimit 을 다 쓰고 Failed 가 되는 것을 /root/ckad/backoff.txt 에 담으세요.
5. tick CronJob 을 만들어 실제로 한 번 이상 돌게 하고 /root/ckad/cronjob.txt 에 담으세요. concurrencyPolicy 도 정합니다.
6. qos-guaranteed·qos-burstable·qos-besteffort 세 파드로 QoS 등급 셋을 만들어 /root/ckad/qos.txt 에 담으세요.
7. cfg-pod 로 ConfigMap 을 볼륨과 환경변수 둘 다 주입하고, 파드 안에서 어떻게 보이는지를 /root/ckad/config.txt 에 담으세요.
8. /root/ckad/report.md 에 startup_restarts=, job_completions=, evicted_first= 세 줄과 설명을 쓰세요.
참고
startupProbe가 성공할 때까지livenessProbe와readinessProbe는 시작하지 않습니다. 그래서 기동이 느린 애플리케이션에 쓰는 것입니다.- Job 의 상태는
kubectl -n ckad get job batch -o jsonpath='{.status}'로 봅니다. - QoS 는
kubectl get pod <이름> -o jsonpath='{.status.qosClass}'에 있고, 직접 지정하는 것이 아니라 requests/limits 로 결정됩니다. - CronJob 의
schedule은*/1 * * * *처럼 씁니다. 1분마다면 실습 중에 한 번은 돕니다. - 흔한 실수 1:
startupProbe만 걸고livenessProbe를 안 거는 것. startupProbe 는 liveness 를 미뤄 주는 장치라 혼자서는 의미가 없습니다. - 흔한 실수 2: QoS
Guaranteed를 만들려고requests만 주는 것. requests 와 limits 가 모든 자원에서 정확히 같아야 합니다.
단계 8개
- 기동이 느릴 때
- 준비되지 않은 파드는 빠진다
- completions 와 parallelism
- 잡은 언제 포기하는가
- 실행이 겹칠 때
- 자원이 모자랄 때 누가 먼저 쫓겨나나
- 볼륨과 환경변수는 다르다
- 무엇을 배웠나