[Kubernetes] CKA(Certified Kubernetes Administrator) 취득 후기

서준교·2022년 12월 24일
8

Docker / Kubernetes

목록 보기
15/15
post-thumbnail

2022년 12월 6일, 약 3주간의 준비기간 끝에 CKA 자격증을 취득하였습니다. 과거에 DevOps 관련 역량을 쌓기 위해 수강했던 도커 / 쿠버네티스 온라인 부트캠프 with 카카오엔터프라이즈 강의에서 습득했던 Kubernetes 관련 지식을 검증받고, 적극적으로 학습에 대한 동기 부여를 얻고자 CKA 시험을 접수하였습니다.

하지만 이직 준비와 같은 개인적인 사정으로 인해 시험을 차일피일 미루다 보니 어느새 시험 기간이 곧 만료된다는 사실을 메일로 통보받았고, 이에 부랴부랴 시험 준비를 하게 되었습니다.

이 당시 회사 업무와 연말 행사가 겹쳐 공부할 시간이 매우 부족했었습니다. 이에 어떻게 하면 단기간에 CKA를 취득할 수 있을까에 대해 많은 고민을 했고, 제 나름의 학습 전략을 세운 뒤 실행에 옮겼습니다.

이번 글을 통해 CKA에 대한 전반적인 설명과 공부 방법에 대해 공유드리고자 합니다.

🤔 CKA란?

CKA(Certified Kubernetes Administrator)는 Container Orchestration Tool 중 가장 널리 쓰이고 있는 Kubernetes 기반의 클러스터 관리 능력을 검증하는 것을 목적으로 합니다. Kubernetes 기반의 애플리케이션 개발 역량을 검증하는 자격증인 CKAD(Certificed Kubernetes Application Developer)의 범위를 포함하며, Linux Foundation 공식 홈페이지에서 응시 신청을 할 수 있습니다.

기본적으로 CKA 강의와 CKA 시험 응시 자격을 번들 형태로 묶어서 판매하는데, 현재 기준으로 595달러라는 정신 나간 가격에 판매 중입니다.
보통 사이버 먼데이나 블랙 프라이데이때 30%에서 최대 60%까지 할인 쿠폰을 지급하므로, 이 때 구매하시는 것을 강력히 추천합니다. 참고로 저는 블랙프라이데이 할인 기간에 구매하였는데, Linux Foundation에서 귀여운 머그잔을 사은품으로 보내주었습니다!

📖 How to study

여러 CKA 취득 후기를 살펴보면 단연 최고로 꼽히는 강의가 있는데, Udemy에 있는 Mumshad Mannambeth의 Certified Kubernetes Administrator (CKA) with Practice Tests입니다.

개인적으로 이 강의가 왜 호평받는지 살펴보자면,

  • 120개가 넘는 평균 4~5분의 짤막한 강의들로 구성되어 있어 효율적인 공부가 가능합니다.
  • katacoda 기반의 실습 환경과 상세한 풀이 영상을 제공합니다.
  • 실제 시험과 매우 유사한 3회 분량의 Mock Exam과 Lightning Lab을 제공합니다. (풀이 영상 또한 제공됩니다.)

실제로 Kubernetes 명령어를 사전에 구축된 클러스터에서 웹을 통해 실습할 수 있는 환경을 제공한다는 것은 매우 큰 장점입니다. 동일한 환경을 GCP의 GKE나 AWS의 EKS를 통해 구축한다고 하였을 때 소요되는 시간, 비용은 어마어마하기 때문이죠.

하지만 한국어 자막을 제공하지 않는다는 점과, 종종 사소한 영어자막 오류(cubelet)가 보인다는 점은 아쉬움이 남습니다.

저 또한 본 강의를 1회독하였으며, 빈출 유형 관련 문제와 Mock Exam, Lightning Lab은 2~3번씩 반복해서 풀었습니다. Mock Exam과 Lightning Lab 풀이는 해당 링크에 보다 깔끔하게 정리되어 있어, 문제 풀이 후 유용하게 참고하였습니다.

또한, Kubernetes는 기본적으로 도커 엔진을 기반으로 생성된 컨테이너를 관리하는 툴이기 때문에, 도커에 대한 배경지식을 갖고 있다면 훨씬 더 효율적으로 학습하실 수 있습니다.

저는 위의 도서를 통해 도커와 쿠버네티스의 기본 개념과 이론적인 부분을 습득하였습니다. 가독성도 좋고 개념 정리도 구조적으로 아주 잘 되어 있는 책이므로 강력하게 추천드립니다.

🎯 빈출 유형

CKA 시험에서 공통적으로 나오는 문제 유형 위주로 정리하였습니다.

- Kubernetes 클러스터 업그레이드

Kubernetes 클러스터의 구성 요소인 kubeadm, kubelet, kubectl를 특정 버전으로 업그레이드하는 문제 유형입니다. 업그레이드 전 drain, uncordon을 통한 노드 스케줄링을 적절히 활용해야 하며, 많은 시간이 소요되는 문제(약 10분)이므로 가장 마지막에 푸는 것을 추천드립니다.

참고 자료: https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/

- RBAC(Role Based Access Control)

RBAC를 기반으로 하는 ServiceAccount를 생성하는 문제 유형입니다.
일반적으로 ServiceAccount 생성 → Role or Clusterrole 생성 → Rolebinding or Clusterrolebinding 적용 순으로 문제를 풀어나가시면 됩니다.
kubectl auth can-i 명령을 통해 권한이 제대로 설정되었는지 꼭 확인하고 넘어가시는 것을 추천드립니다.

참고 자료: https://velog.io/@khyup0629/K8S-RBAC-%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-Role-RoleBinding-ClusterRole-ClusterRoleBinding

- ETCD Backup & Restore

ETCD를 통해 이전 클러스터 상태를 backup하고 복원하는 문제 유형입니다. /etc/kubernetes/manifests/etcd.yaml에 정의된 인증서 및 key 파일의 경로를 참조하여 etcdctl 명령을 통해 backup 및 복원을 진행해주시면 됩니다.
자세한 내용은 해당 블로그에 아주 잘 정리되어 있으므로, 해당 내용만 숙지하셔도 무리없이 푸실 수 있습니다.

- Troubleshooting

Kubernetes 클러스터에서 발생할 수 있는 여러 가지 오류 상황을 적절히 해결해야 하는 문제 유형입니다. 일반적으로 애플리케이션 내부의 오류보다는 노드의 오류를 수정하는 유형이 더 많이 출제되므로, Mumshad 강의 섹션 13의 Control Plane Failure, Worker Node Failure 문제를 반복적으로 풀어보시는 것을 추천드립니다.

- Sidecar 컨테이너 구축

기존에 존재하는 파드에 사이드카 컨테이너를 추가하여 로그 수집과 같은 보조 역할을 수행하는 멀티 컨테이너 파드를 생성하는 문제 유형입니다. 사이드카 컨테이너에서 실행할 command, 로그를 저장할 volume 등의 옵션을 적절히 설정하고, kubectl exec 명령을 통해 command가 컨테이너 내에서 정상적으로 실행되는지 확인하는 방식으로 문제를 푸시면 됩니다. 주의해야 할 점은 직접 기존 파드의 yaml 파일을 수정하는 과정에서 에러가 발생할 경우 복구하는 데에 시간이 많이 소요될 수 있으므로, 기존의 파드를 미리 백업용으로 yaml로 저장한 이후에 컨테이너를 추가하는 작업을 진행하는 것을 권장드립니다.

- Ingress

네트워크 규칙을 정의하고 해당 규칙을 기반으로 한 Ingress를 생성하는 문제 또한 자주 출제됩니다. 문제에 명시된 namespace, 포트 번호, prefix, label과 같은 조건들을 꼼꼼히 살펴보신 후에 해당 조건을 기반으로 하는 yaml 파일을 통해 Ingress를 생성하시면 됩니다. Ingress 오브젝트의 yaml file은 다른 오브젝트에 비해 depth가 깊기 때문에 yaml file 작성시 특히 들여쓰기에 신경을 써주셔야 합니다.

- jsonpath

jsonpath는 kubernetes에서 지원하는 템플릿의 일종입니다. yaml 파일 내부의 특정 필드를 필터링하는 데에 유용하게 사용됩니다. jsonpath를 이용하여 특정 조건에 부합하는 필드를 파일을 통해 추출하는 방식의 문제 또한 빈번하게 출제되므로, 실습을 통해 숙달하시는 것을 추천드립니다.

참고 자료: https://kubernetes.io/ko/docs/reference/kubectl/jsonpath/

☠️ Killer.sh에 대하여

CKA 시험을 구매하면 실제 시험과 매우 유사한 환경에서 시험을 치를 수 있는 시뮬레이터인 killer.sh가 2회분 제공됩니다. 대부분의 CKA 후기에서는 해당 시뮬레이터를 통해 문제를 풀어볼 것을 권장하나, 저는 절대 추천드리지 않습니다.
그 이유는 다음과 같습니다.

  1. 각 문제가 매우 길고, 난이도가 터무니없이 높습니다.
  2. 시험 환경이 열악하여 정상적인 진행이 불가능한 수준입니다.

저도 실제 CKA 시험 하루 전날 killer.sh에서 시험을 응시하였는데, 상상 이상으로 열악한 시험 환경에 당황했었습니다.
키보드, 마우스 입력 지연시간이 1초는 너끈히 넘기는 수준이었고, 복사/붙여넣기 또한 제대로 인식되지 않는 경우가 태반이었습니다.
어떻게든 참고 1시간 가량 시험을 치뤘으나, 더이상의 진행은 힘들다고 판단하여 중도에 포기했습니다.

하지만, killer.sh에서 제공하는 시험 환경은 실제 환경과 매우 유사하므로 "내가 이런 환경에서 시험을 보는구나" 정도로만 생각하고 실제 문제 풀이보단 사전 체험에 의의를 두고 가볍게 훑어보시기를 권장드립니다.

물론 본인이 Kubernetes에 대해 보다 깊은 지식을 쌓고 싶다면, killer.sh에서 제공하는 문제들은 매우 훌륭한 교보재가 될 것입니다.
다만, 단순히 CKA 취득만을 놓고 봤을 때는 killer.sh에 투자할 시간에 Mock Exam, Lightning Lab, 빈출 유형 문제를 반복해서 보는 것이 훨씬 더 도움이 될 것이라는 것이 저의 생각입니다.

💡 시험 Tip

CKA 시험의 만료일은 구입 기간으로부터 1년 뒤이므로, 만료되기 전까지 자신이 가능한 시간대로 선택하여 고르면 됩니다. 시험 날짜는 응시 하루 전까지 자유롭게 변경할 수 있습니다. 또한, 불합격하더라도 1번의 재시험을 볼 수 있는 기회를 제공해줍니다.

시험 시간은 총 2시간이 주어지며, 주어진 시간보다 빠르게 시험을 마쳤다면 중도에 종료할 수 있습니다. 참고로, 본인 확인을 위한 신분증을 사전에 지참해야 합니다. 감독관이 외국인이므로, 주민등록증보다는 여권을 준비하는 것을 권장합니다.

Linux Foundation Training & Certification Dashboard 페이지에서 CKA 메뉴를 클릭하면 위와 같은 화면이 나옵니다. Verify Name 항목에는 자신이 준비한 신분증과 정확히 일치하는 이름을 입력합니다. 이후에, 시험 전에 반드시 Check System Requirements 메뉴에서 자신이 시험을 응시하는 환경이 적절하게 세팅되었는지 확인해야 합니다. 해당 메뉴에서 확인하는 항목은 다음과 같습니다.

  • Operating System
  • 웹캠
  • 마이크
  • 모니터 해상도 (1368x769 이상)
  • 네트워크 대역폭 (300kbps 이상)

시스템 체크에 통과했다면 모든 시험 준비는 끝났습니다. 지원하는 OS에 대한 구체적인 내용은 해당 링크에서 확인하실 수 있습니다.
시험 시간 30분 전부터 Take Exam 버튼이 활성화되며, 해당 버튼을 누르면 시험 감독 절차가 진행됩니다.

실제 온라인 감독관이 VDI 환경에서 채팅 메시지로 주변 환경을 웹캠으로 비출 것을 요구합니다. 응시자 주변 환경을 매우 엄격하게 확인하므로, 불필요하다 생각되는 물건은 사전에 모두 치워두는 것이 좋습니다. (제 경우는 책상 밑, 키보드, 마우스 밑, 심지어 마우스 패드 아래까지 확인했습니다.) 검사가 꽤 오래 걸릴 수 있고, 예기치 못한 장치 오류가 발생할 수 있기 때문에 예정된 시간보다 20~30분 먼저 일찍 들어와 준비하시는 것을 추천드립니다. 검사가 문제없이 모두 끝났다면, 감독관의 채팅 메시지를 통해 시험을 시작할 수 있습니다.

실제 CKA 시험은 위와 같은 환경에서 진행됩니다. 좌측에는 문제가, 중앙에는 터미널과 웹브라우저가 위치합니다.
노트북으로 진행해도 무방하지만, 문제와 터미널, 공식 문서 웹페이지를 한 모니터로 봐야 하므로 가급적 27인치 이상의 모니터에 연결한 후 별도의 웹캠을 설치하여 응시하시는 것을 추천드립니다. (듀얼 모니터는 허용되지 않습니다.)

다음은 시험 시간에 반드시 숙지하고 있어야 할 사항들입니다.

  • 각 문제마다 kubectl config user-context 명령을 통해 매번 특정 컨텍스트로 전환해야 하므로, 컨텍스트 전환이 제대로 이뤄졌는지 꼭 확인해야 합니다.

  • 문제 하단의 flag 기능을 통해 잘 풀리지 않거나 오래 걸릴 것으로 예상되는 문제들은 체크해놓고 다른 문제를 푼 후에 다시 확인합니다.

  • 특정 노드에 ssh 명령을 통해 접속하였다면, 반드시 logout하여 기존의 노드로 돌아온 것을 확인 후 문제를 풀어나가야 합니다.

저같은 경우, 클러스터 업그레이드나 etcd backup과 같이 시간이 오래 소요될 것으로 예상되는 유형의 문제들은 flag 기능을 활용하여 미리 체크해두고, 다른 문제들을 다 푼 뒤에 체크해두었던 문제를 푸는 방식으로 진행했습니다. 모든 문제를 푸는 데는 약 1시간 10분정도 소요되었고, 10분 정도 검토를 마친 후에 시험을 종료하였습니다.

🌈 마무리

비록 시험은 합격하였지만, 70점이라는 아쉬운 점수를 받았습니다. 1~2문제 제외하고는 완벽하게 풀었다고 생각했는데, 생각보다 낮은 점수가 나와 당황하였습니다. 문제 조건을 꼼꼼히 읽지 않거나, 검토가 제대로 이뤄지지 않았던 부분이 많이 있었던 것으로 예상됩니다. 다른 시험을 볼 때에도 이는 반드시 보완해 나가야 할 부분이라고 생각합니다.

저는 짧은 시간안에 자격증을 취득해야 했기 때문에 본 자격증 취득을 위해 효율적으로 공부하는 방법 위주로 글을 작성하였습니다만, 2~3달 정도 시간을 잡고 기술적으로 이해하는 시간을 충분히 가진 이후에 CKA에 응시하는 것을 권장드립니다.

컨테이너 환경은 현업에서도 굉장히 빈번하게 활용되기 때문에 긴 호흡을 갖고 공부하신다면 차별화된 개발 역량을 쌓는 데 큰 도움이 될 것이라 확신합니다.

이 글을 읽으신 분들 모두 CKA 자격증을 취득함에 있어 많은 도움을 얻으셨길 바랍니다.

profile
매일 성장하는 개발자가 되고 싶습니다. 😊

2개의 댓글

comment-user-thumbnail
2023년 3월 14일

안녕하세요. 포스팅 잘 읽었습니다. 혹시 그럼 데스크탑에 모니터 하나 연결해서 봐도 되는 걸까요???

1개의 답글