2025년 2월 16일 드디어 CKAD 자격을 획득했습니다!
사실 첫 번째 시험에서 64점을 받아 합격점인 66점을 넘지 못해 재시험을 보았는데요.
두 번째 시험에서는 82점으로 합격했습니다!

CKA도 도전해볼까 싶었지만 응시 비용이 50만원 수준으로 너무 비싸 일단 보류를 해두려고 합니다!
대신, 시험 준비 과정에서 얻은 유용한 팁을 정리해두려고 합니다.
시험전 준비사항
시험 시작 전에 웹캠이나 노트북 카메라를 이용해 책상, 책상 아래, 천장을 보여주도록 요청받습니다.
여기서 시험 중 문제가 될 수 있는 모든 물건을 치워야 합니다.
- 전자제품, 책, 노트, 필기도구는 모두 허용되지 않습니다.
- 음식 섭취도 금지
- 유일하게 허용되는 것은 물
- 커피가 가능하냐고 물어봤지만 안된다고 하더군요.
저는 Mac 노트북 하나만 남기고 나머지는 전부 치운 후 시험을 봤습니다.
시험 전략
CKAD 시험 시간은 2시간이며, 총 19문제가 출제됩니다.
목표 점수인 66점 이상을 확보하는 것이 중요하기 때문에, 감이 오지 않는 문제는 Flag를 설정해두고 넘어가는 것이 좋습니다.
시험은 PSI 툴 환경에서 진행됩니다.
평소에 사용하는 단축키와는 다를 수 있기 때문에 반드시 killer.sh 문제를 풀면서 PSI 환경에 익숙해져야 합니다.
💡 Mac 복사 & 붙여넣기 단축키
- 복사: Control + Shift + C
- 붙여넣기: Control + Shift + V
- 단, k8s 문서의 YAML 복사는 단축키가 안 먹히므로, 우클릭 Copy & Paste를 활용해야 합니다.
Alias 사용하기 (고급자용)
시험 환경에서는 kubectl이 k로 이미 alias 설정되어 있습니다. 추가로 아래 alias도 활용하면 더 편리합니다.
alias k=kubectl # 기본적으로 적용됨
export do="--dry-run=client -o yaml" # 저는 사용하지 않았지만 기록 차원에서 남깁니다.
k run tmp --image=nginx $do
Shortcut (단축어)
k8s 주요 리소스에는 단축 키워드가 존재합니다. 외워두면 풀이 속도를 높일 수 있습니다.
po | pods |
rs | replicaset |
deploy | deployment |
svc | service |
ns | namespace |
netpol | networkpolicy |
pv | persistentvolume |
pvc | persistentvolumeclaim |
sa | serviceaccount |
문제 유형
secret을 생성하고, pod에 env로 가져오기
pod env로 secret의 일부를 key로 가져오기
pod env로 secret 전체를 가져오기
security context에서 권한 승격불가능하고, uid 10000으로 사용
securtiyContext는 pod, deploy 사용처에 따라 다르기에 헷갈릴수 있기 때문에 조심합시다!
resource.request와 resource.limit를 이용한 pod 리소스 제한
현재 namespace에서 할당 가능한 메모리의 절반까지만 pod에 할당하라는 문제가 있었는데요.
문제에서 limitRange를 알려주어 limitRange 설정을 보고 절반만큼 주었습니다.
readiness, liveness 추가
단골 유형으로 readinessProbe, livenessProbe를 구현하면 되는데요.
Pod의 상태를 httpGet 또는 Command로 확인이 가능해야 합니다!
yaml 수정 후 k get pods로 실제 pod가 제대로 동작하는지 꼭 확인합시다
service account 를 deploy에 추가하기
기존 service account가 있고 문제 없게 구성되었지만, deploy에서 동작하지 않는 이슈가 있다고 합니다.
이를 해결하기 service account를 조회해보면 다수의 service account가 있는데요.
deploy에 적용된 service account는 default 였습니다.
다른 service account로 바꿔서 deploy가 제대로 동작하는지 확인하는 방식으로 풀었네요 ㅎㅎ
docker 명령어 문제
docker 명령어 관련 문제도 항상 나오는듯 싶습니다.
Docerfile이 주어지고 build 후 save 하면 특정 경로에 tar 압축파일을 저장하라고 하는 문제였네요
Canary 배포
현재 5개의 pod와 이를 보고 있는 service가 세팅되어 있습니다.
최대 10개의 pod를 할당 가능하다고 했을때, 새로운 canary pod를 구성하고 전체 트래픽의 20%를 받을수 있도록 하라고 합니다.
저는 replica=2이고 기존 service가 참조하고 있는 pod label 맞게 canary deploy를 구성했습니다.
그리고 기존 5개의 deploy를 8개로 scale up 했죠.
이렇게 함으로써 전체 트래픽의 80%는 기존 deploy를 보고 나머지 20%는 새로운 canary deploy를 보게 됩니다.
구버전 deploy yaml 수정하여 현재 환경으로 구성
deploy가 있는데 낮은 버전의 쿠버네티스 클러스터에서 동작하고 있었다고 합니다.
이를 현재 최신 버전의 쿠버네티스에서 동작하게 해야 합니다.
deploy에서 yaml을 추출하고 보니 최신 deploy에 맞지 않는 부분이 보였습니다. (apps/v1beta 라던가...)
이를 수정해서 현재 환경에 적용해서 deploy가 정상 동작하는지 확인해서 넘어갔네요
pod 수정 후 롤백하기
pod가 주어지고 pod가 사용하는 이미지를 변경한 다음, 이전 버전으로 되돌리라고 합니다.
먼저, edit 명령어로 pod image를 변경 했습니다.
그리고 rollout history로 변경 사항 확인 후 rollout undo로 과거 이미지르 되돌렸네요
networkpolicy가 주어지고 문제 조건에 맞게 환경 구성하기
db, frontend라는 netpol이 이미 주어져있고 netpol이 db, frontend라는 pod에 각각 적용이 되어 있습니다.
별도의 pod가 있는데, db와 frontend가 이 pod 하고만 통신이 가능하도록 환경을 구성하라고 합니다. (문제에서 netpol은 절대 변경하지 말라고 합니다)
우선 db netpol 구성을 보니 db-access=true label이 있는 pod는 ingress, egress가 가능하게 구성되어 있었습니다. (frontend netpol도 frontend-access=true)
그리하여 별도 pod의 label로 db-access=true, frontend-access=true를 주어 해결하였습니다.
ingress, service, deploy가 구성되어 있지만 정상적으로 동작하지 않기에 고치기
문제 제약으로 deploy는 수정하지 말라고 합니다.
service에서는 targetPort로 8080을 보고 있었는데, 실제 pod의 containerPort는 80이였습니다.
그리고 ingress에서는 참조하는 service 이름이 아닌 deploy 이름을 보고 있더군요.
수정한 다음 curl로 결과가 잘 나오는지 확인했습니다.
cronjob 만들고 test job 돌리기
cronjob 문제는 단골 메뉴입니다!
cronjob을 만들때 create을 이용하는 것도 방법이지만 공식 문서의 yaml을 복사한 다음 필요한 부분만 수정했네요.
2분 마다 동작을 원해서 scheule은 '*/2 * * * *'으로 세팅했습니다.
cronjob 생성에서 끝나는게 아니라 별도 test job을 만들어서 돌리라는 요구도 있었는데요.
잠깐 당황했지만 문서를 찾아보니 설정된 cronjob에서 job을 만들 수 있더 군요.
kubectl create job test-job --from=cronjob/a-cronjob
마치며
CKAD 시험을 준비하면서 쿠버네티스 실전 경험을 쌓을 수 있는 좋은 기회가 되었습니다.
CKAD를 준비하는 분들께 이 글일 조금이라도 도움이 되었으면 좋겠습니다! 😊

'IT > Kubernates' 카테고리의 다른 글
CKAD (Certified Kubernetes Application Developer) 신청 및 준비 과정 (0) | 2025.01.05 |
---|