본문 바로가기

Kubernetes

CKAD(Certified Kubernetes Application Developer) 합격 후기 및 팁 / 시험 환경 설명

CKAD(Certified Kubernetes Application Developer) 자격증은 쿠버네티스를 운영하는 CNCF(Cloud Native Computing Foundation)와 Linux Foundation에서 주관하는 쿠버네티스 자격 시험이다. 

작년에 Linux Foundation에서 할인 이벤트가 있을 때 신청해두었었는데, 신청만 해두고 잊고 살다가 최근에 시험을 보게 되었다. 작년 기준, 신청 이후 1년 내에만 시험을 보면 되고, 응시료는 300불로 꽤 비싼 편이다. 다만, 불합격하게 될 경우 한 번 재시험을 볼 수 있다.

비슷하지만 조금 더 다루는 범위가 넓은 시험으로는 CKA(certified-kubernetes-administrator) 자격증이 있다. 간략하게 나누어보자면, CKAD는 쿠버네티스를 사용하는 개발자가 알아야할 내용이고, CKA는 CKAD의 범위를 포함하며 쿠버네티스를 운영하는 DevOps 엔지니어가 알아야 할 내용 정도인 것 같다. 

19문제를 2시간 안에 풀어야 하며, 컷트라인은 66%이고, 92%로 최종 합격하였다.

 

그림1: CKAD 자격증

이 포스트는 이번에 CKAD 자격증을 준비하면서 어떻게 준비를 하였는지에 관한 내용 + 시험 전 열심히 찾아보았지만 속시원한 정보를 얻을 수 없었던 실제 시험 환경에 대한 얘기를 정리해보고자 한다.

 

 

시험 준비

시험 범위

시험의 범위는 아래와 같다. 각 내용이 무엇을 다루는지 자세한 내용은 CKAD 소개 링크 를 참고하면 좋을 것 같다. 

 

그림2: CKAD 시험 범위

 

공부

쿠버네티스는 재작년부터 개인적으로도 조금씩 공부를 했었고, 회사에서도 사용할 일이 잦아서 어느 정도 익숙한 상황이었다. 다만 한정된 리소스만 다루는 경우가 많았고, 전반적으로 한 번 내용을 훑고 싶어서 아래의 강의를 신청해서 들었다.

www.udemy.com/course/certified-kubernetes-application-developer/

 

Kubernetes Certified Application Developer (CKAD) Training

Learn concepts and practice for the Kubernetes Certification with hands-on labs right in your browser - DevOps - CKAD

www.udemy.com

내용도 알차고, 할인할 때에 구매하면 가격도 저렴해서 비교적 부담이 없다. 약 20불 정도 지불했던 것으로 기억한다. 전반적으로 관련 지식을 정리하고, 연습문제들을 풀어보는 것이 도움이 많이 되었다. 

특히나, 강의 마지막에 있는 Lightning Lab과 Mock Exam이 도움이 많이 되었다. 개인적으로 느끼기에는 Lightning Lab 이 Mock Exam보다 조금 더 어려웠으며, 실제 시험에서 푼 문제 들 중 조금 난이도가 있는 문제들과 유사하였다. 시험 당일 응시 직전에 Lightning Lab1,2를 다시 풀고 시험을 보았는데 도움이 정말 많이 되었다. 이 밖에도 참고한 소스들은 아래와 같다.

 

github.com/twajr/ckad-prep-notes : CKAD 대비 기본 개념 정리

github.com/dgkanatsios/CKAD-exercises/blob/master/g.state.md : CKAD 대비 연습문제들 정리

명령어 공부

CKAD 시험은 시간 관리가 매우 중요하기 때문에, 모든 리소스를 다 yml 파일을 작성함으로써 생성하면 시간이 모자를 가능성이 크다. 그래서 kubectl 커맨드를 이용하는 것이 중요한데, 이를 위해 kubernetes.io/docs/reference/kubectl/cheatsheet/에 있는 커맨드들을 외우는 것이 중요하다. 특히나 Pod의 경우, 웬만한 옵션들은 다 kubectl run 의 parameter로 해결할 수 있기 때문에 꼭 커맨드에 익숙해져 있는 것이 좋다. 개인적으로 유용했던 커맨드는

kubectl explain $RESOURCE_NAME --recursive | less

이다. yaml파일을 작성하다 보면 어느 property가 어느 곳에 위치해야 하는지가 헷갈리는 경우가 많은데, 가능한 옵션들을 트리 형태로 보여주고 vim문법을 이용해서 손쉽게 검색도 할 수 있기 때문에 property name이나 위치가 헷갈릴 때 유용하게 사용하였다. 

 

인덱스 생성

시험 중에는 크롬에서 시험 탭을 제외하고는 하나의 탭만 kubernetes.io/docs/, kubernetes.io/blog/, github.com/kubernetes/아래의 링크 아래에서 열 수 있다. 개인적으로는 kubernetes.io/docs/ 만 참고해도 시험을 치는데 아무 문제가 없다고 생각한다. 

kubernetes.io/docs/ 의 검색창은 구글 검색 (ex. 쌍따옴표로 감싸서 검색하면 해당 결과를 반드시 포함한 결과 리턴)에서 적용되는 룰들이 그대로 적용되기 때문에, 잘 활용하여 검색을 할 수 있으면 좋을 것 같다. 다만, 매번 필요한 리소스를 검색해서 문제를 풀다 보면, 원하는 리소스를 쉽게 찾지 못할 때에 시간이 낭비되게 된다. 그래서 나는 인터넷에 돌아다니는 팁들처럼, 크롬 북마크에 인덱스를 만들어두고 시험을 쳤다. 

 

그림3: Chrome 북마크로 생성한 kubernetes.io/blogs 링크 인덱스

각각의 주제에 대하여, 바로바로 찾아볼 수 있는 yml 파일에 대한 링크를 정리해두었다. 예를 들어, secret에 대한 yml 파일, secret을 volume mount하는 yml 파일 등은 따로 링크를 만들어 Secret이라는 디렉토리 아래에 정리해두었다. 추가로 연습문제를 풀면서 내가 빠뜨린 내용이 있는지 확인하고 북마크를 채워나갔다. 이렇게 정리를 해두고 시작하니, 시험 도중 검색을 할 일이 거의 없었고, 빠르게 필요한 내용을 찾으면서 문제를 풀 수 있었다.

 

시험

시험 입장

시험 시간에 맞춰 www.examslocal.com/ 에 접속하면 시험에 응시할 수 있다. 미리 시험 날짜를 스케줄링 했으면, 아래와 비슷한 화면을 볼 수 있다. 

그림4: examslocal.com의 MyExams 화면

위 화면은 시험을 본 이후에 캡쳐한 것이라 reservation is not in a pending state라고 나오지만, 시험을 대기하고 있는 상황에서는 시험을 위한 환경이 갖춰졌는지를 확인(3rd party cookie 허용, Chrome Extension 설치, 웹캠/마이크 존재 여부..)하기 위한 Compatability Check 버튼과 시험을 대기하고 있다는 메세지가 표시된다. 스케줄링 된 시간 15분 전부터 입장이 가능하다고 표시되어 있다.

한 가지 당황스러웠던 점은, 2시 45분에 맞춰서 접속을 했는데, Delivery partner doesn't have the exam ready 라는 메세지와 함께 시험에 접속이 되지를 않았다. 무언가 누락이 되었나, 내가 뭔가 잘못한건가, 내 300불은? 와 같은 온갖 생각들에 멘붕이 와서 계속 접속을 하다보니, 원래 시험 시간인 3시에 가까워서야 해당 화면에 초록색 버튼으로 입장 링크가 나타났다. 15분 전부터 무조건 시험에 입장이 가능한 건 아니고, 감독관이 준비가 되어야만 입장이 가능한 시스템인 것 같았다. 

 

사전 체크

시험에 입장하고 나면, 아래와 같은 화면이 표시된다.

그림5: 시험 입장 후 화면

우측 상단에 웹캠/스크린을 공유할 수 있는 버튼이 있고, 감독관과는 Live Chat을 통해 대화하게 된다. 감독관이 여권을 검사하고, 시험 환경 (책상 위, 책상 아래, 방을 360도로 돌려서 모두 보여달라고 한다)을 카메라로 스캔하고, 이것저것 주의사항을 알려준다. 모니터를 사용하여 화면이 여러개인 경우, 모든 화면을 다 공유해달라고 한다. (이것이 시험시 대재앙으로 이어지게 되었는데..T_T 아래에서 설명한다) 크롬 탭을 해당 화면 하나만 남기고 모두 종료하고, 다른 질문이 없는지 확인하고 나면 시험을 시작할 수 있게 된다. 이 모든 과정은 약 30분 정도 소요되었다. 

 

실제 시험

시험을 시작하면, 아래와 같은 화면이 보이게 된다.

그림6: 시험 화면

우측에 터미널, 좌측에 시험 문제가 표시된다. 위의 핑크색 박스에 사용해야 할 쿠버네티스 context로의 switching을 위한 명령어가 표시된다. 그냥 나와있는 커맨드를 입력만 하면 되기 때문에 이전 문제와 비교하여 context가 바뀌었는지만 확인하면 된다. 앞쪽 문제들은 거의 다 같은 context를 사용하였고, 후반부 문제들은 문제마다 context가 바뀌었던 것으로 기억한다. 노란 박스에 시험 설명이 있고, 문제가 잘 풀리지 않거나 확인을 해야 할 경우를 대비하여 문제를 표시해둘 수 있는 기능도 있다. 파란색으로 표시된 버튼을 누르면 드롭다운 목록이 나타나서 다른 문제로 switching할 수 있고, 표시해둔 문제들은 문제 옆에 깃발 표시가 나타난다.

About Exam 탭 (실제 이름은 저게 아닌데, 잘 기억이 안나서 대충 생각나는 이름으로 적었다 T_T) 탭에서는 중간에 휴식을 취하거나(휴식을 취해도 시간은 계속 가기 때문에, 이건 응시자가 감수해야 할 몫이다), 시험을 종료할 수 있는 버튼이 있고, 자유롭게 사용할 수 있는 NotePad가 있다. 나는 Flag 표시를 해둔 문제들에 대해서 어떤 것을 체크해야하는지와 같은 것을 정리하는 용도로 사용했다. 

시험 중에도 Live Chat을 통해 감독관과 대화할 수 있다.  

 

시험이 시작되자마자 .vimrc와 .bashrc 셋팅을 했다. 내가 사용한 셋팅은 아래와 같다.

# .vimrc

set nu
set paste
set tabstob=2
set shiftwidth=2
set expandtab
set autoindent
set smartindent
# .bashrc

alias k="kubectl "
source < (k completion bash)
complete -F __start_kubectl k

alias k는 반드시 사용하는 것을 추천한다. 연습문제를 풀어보다보면 알겠지만, 은근 kubectl에서 오타가 많이 난다. 그리고 .bashrc의 두번째, 세번째 줄은 k command로 keyword auto completion (create, delete, --image, deployment..)을 할 수 있게 해준다.

 

실제 시험 중 가장 당황스러웠던 것은, 터미널 반응속도가 정말 너------------------------무 느린 것이었다. udemy에서 제공된 KodeCloud의 연습문제를 풀 때도 반응속도가 느려서 조금 답답했지만, 그래도 풀만했고, 실제 시험 환경을 반응속도가 좋다는 후기를 보고 시험에 입장한 터라 적잖이 당황을 했다. 얼마나 느렸나면, 이 속도로 풀다가는 절대로 제 시간에 풀 수 없을 것 같다고 감독관한테 이야기를 했다. 이유가 뭘까 고민하다가 네트워크 대역폭 문제인가라는 생각이 들었다. 나는 노트북을 모니터에 연결하여 모니터 화면에서 시험을 쳤고, 노트북에 있는 카메라를 사용했기 때문에 노트북을 닫을 수가 없어서 두 개의 화면이 공유되고 있었다. 혹시나 해서 모니터 연결을 해제하고 노트북 화면만으로 시험을 치도록 변경했더니, KodeCloud와 비슷한 정도로 한결 나아졌다. 13인치 맥북을 쓰고있는 터라 화면이 작아 문제 풀 때 답답할까봐 일부러 모니터를 사용한 것이었는데, 이게 반응 속도에 이 정도로 영향을 줄것이라는 생각을 하지 못했다. 모니터 연결을 해제했을 때, 감독관에게 화면 공유가 끊겼는지 시험이 중단되어 그림5의 화면으로 돌아가 감독관이 다시 화면 공유를 요청했고, 다시 화면공유를 하고나서 시험이 재개되었다.

 

문제 난이도는 굉장히 쉬운 문제들 소수, 그 밖에 평범한 문제들 다수, 조금 난이도가 있는 문제들 소수 이렇게 구성되었다. 꼭 끝으로 갈수록 문제가 어려워지거나 하는 건 아니라서, 풀다가 막히는 문제가 나오면 표시하고 바로바로 뒤로 넘어가는 것을 추천한다. 시간이 남으면 꼭 한 번 리뷰를 해 보는 것이 좋은데, namespace나 container 이름과 같은 부분에서 실수가 나올 수 있기 때문이다. 실제로 나도 다시 한 번 리뷰를 하면서 3-4개 문제 정도 잘못 푼 것을 발견하여 수정하였다. 개인적으로 집중해서 살펴보면 좋을 것 같은 내용은

 

1. 맞는 context에 리소스가 생성되었는지

2. 맞는 namespace에 리소스가 생성되었는지

3. 이름이 맞게 생성되었는지 (pod name, container name...)

4. 생성한 리소스들이 전부 Running상태로 정상 동작 하는지

5. 네트워크 관련된 내용인 경우, curl로 실제로 동작 확인해보기

 

이 정도인 것 같다. 

 

개인적인 소감

자격증 시험이라는 것을 본지가 너무 오래되었었고, 쿠버네티스 자체가 공부하기에는 꽤나 흥미로워서 재미있게 공부하고 시험을 친 것 같다. 시간이 촉박하다는 이야기가 있어서 긴장했었는데, 개인적으로는 연습문제만 어느 정도 풀고 어떤 문제를 봤을 때 무엇을 찾아야하는지만 안다면 그렇게 난이도가 높은 시험은 아니라는 생각이 들었다. 다만, 처음 CKAD시험을 보기로 결정한 이유는 쿠버네티스에 대해 조금 더 깊게 이해해보고 싶어서였는데, CKAD는 쿠버네티스 자체를 깊게 이해하기에는 내용의 깊이가 얕은 편이라고 생각했다. StatefulSet이나 Headless Service와 같은 내용도 다루지 않고, 쿠버네티스가 내부적으로 어떤 식으로 동작하는지, 클러스터는 어떻게 구성이 되는 것인지와 같은 내용도 다루지 않는다. 그래도 쿠버네티스를 사용하는 개발자로서는 CKAD에서 다루는 내용만 알아도 충분히 문제 없이 쿠버네티스를 다룰 수 있을 것 같다. 다만, 유효기간이 만료되고 다시 시험을 쳐야 한다면, 그 때는 CKAD말고 CKA 취득에 도전해보지 않을까 싶다. 이상 후기를 마칩니다 🙂

'Kubernetes' 카테고리의 다른 글

Kubernetes Architecture (Master Node / Worker Node)  (0) 2020.12.20