ALLSSU

Certified Kubernetes Administrator(CKA) 자격증 취득 후기

AWS CDK를 통해 Amazon EKS를 운영하고 있는 개발자의 Certified Kubernetes Administrator(CKA) 자격증 신청 이유와 시험 경험기

2023년 4월 5일 수 02:58

CKA 자격증 캡처

떨어졌다고 생각했는데, 거짓말처럼 붙어버림🤪

결론부터

작년 4월에 신청해놓고 만료 기간이 한 달 앞으로 다가와서 부랴부랴 벼락치기로 마무리 공부를 하게 된 CKA(Certified Kubernetes Administrator) 자격증. 신청해놓으면 돈 아까워서라도 어떻게든 딸 것 같았는데 일 년을 채울 줄은 몰랐다.😭 결국 따긴 했고 쿠버네티스(kubernetes)에 대해 새롭게 배운 게 많았던 CKA 준비였다.

자격증 절차에 대한 후기는 많아서 굳이 여기서 정보를 얻을 건 별로 없을 것 같고, AWS CDK를 통해 Amazon EKS 환경을 운영하는 개발자 입장에서의 자격증 취득 준비 및 후기를 작성했다.

CKA 자격증을 신청하고 취득한 이유

1. EKS를 관리하는 내가 쿠버네티스를 더 깊게 이해하고 싶어 시작했다.

내가 관리하는 쿠버네티스는 AWS CDK를 통해 코드로 Amazon EKS를 개발해서 프로비저닝하는 방식으로 개발하고 운영하기 시작했다. 시간이 지날수록 CDK & EKS가 쿠버네티스를 직접 구성하는 것에 비해 해주는 일이 정말 많다고 생각되었다. 이에 따라 쿠버네티스에 대한 전반적인 이해도가 적다고 느껴졌다.

가장 먼저 Amazon EKS.
EKS를 사용하면 컨트롤플레인은 물론이고 관리형 노드 그룹(Managed node groups)을 통해 노드 컴포넌트도 쉽게 관리할 수 있기 때문에, 쿠버네티스 컴포넌트들을 직접 다룰 일이 없었다.

다음으로, 애플리케이션을 구성하는 쿠버네티스 오브젝트들을 전부 CDK를 통해 타입스크립트 코드로 만들었다.
클러스터 & 노드와 유사하게 쿠버네티스 오브젝트 또한 CLI를 통해 만들 일은 없고 전부 코드로 구성했다. 헬름(helm)을 예로 들면, CDK에서 헬름차트(helm chart)를 지원하고 차트들을 타입스크립트 코드로 작성하기 때문에 helm CLI를 직접 사용할 일이 없었다. 헬름의 경우 CKA 과정에 포함되어 있지 않고 CKAD에 포함되어있기 때문에, 이번에도 딱히 helm을 직접 다룰 일은 없었다.😅 CKAD를 볼 생각은 없으니 로컬에서나 다뤄봐야지.
쿠버네티스 오브젝트(Deployment, Service, Ingress 등) 또한 cdk8s라는 기술을 사용해서 타입스크립트(Typescript)로 쿠버네티스 애플리케이션 매니페스트를 만들고 gitops로 배포했다. 이렇게 쿠버네티스 오브젝트 또한 코드형인프라(IaC)로 전부 구성했기 때문에 kubectl은 트러블슈팅 용도로만 사용하고 eksctl은 사용한 적이 없다.

/**
 * cdk8s example.
 * reference : https://cdk8s.io/docs/latest/plus/cdk8s-plus-26/deployment/
 */
import * as kplus from "cdk8s-plus-26";
import { Construct } from "constructs";
import { App, Chart, ChartProps } from "cdk8s";

export class MyChart extends Chart {
  constructor(scope: Construct, id: string, props: ChartProps = {}) {
    super(scope, id, props);

    new kplus.Deployment(this, "FrontEnds", {
      containers: [{ image: "node" }],
    });
  }
}

const app = new App();
new MyChart(app, "deployment");
app.synth();
cdk8s 예제. kubectl create deployment와 같은 명령어 대신, cdk8s를 사용하면 타입스크립트 코드를 통해 디플로이먼트 매니페스트를 만들어 낼 수 있다.

또한, AWS에서는 쿠버네티스 서비스어카운트(Service Account)같은 오브젝트를 관리할 때도 IRSA(IAM Roles for Service Account)라는 개념을 통해 파드에 권한을 주고, RBAC를 IAM과 연결해서 사용하는 등의 방식을 사용하기 때문에, CSP(Cloud Service Provider)에 종속적이지 않은 좀 더 순수한 쿠버네티스를 경험하고 싶었다.

2. 시험이 실습이자 실전처럼 진행된다. 쿠버네티스를 설치하고, 매니페스트 파일을 만들고, CLI를 입력해서 오브젝트를 만들고, 컴포넌트 장애를 트러블슈팅하는 과정들이 매력적이었다.

앞선 글과 비슷한 내용인데, EKS를 프로비저닝하고 개발하면서 타입스크립트로만 작성해봤기 때문에 직접 매니페스트 파일을 yaml로 직접 만들거나 kubectl을 통해 오브젝트를 직접 만들어본 경험이 적었다.

우선, 트러블슈팅의 경우 실제 경험은 EKS 버전을 1.23으로 올리다가 PV(Persistent Volume)를 사용 못 해서 EBS CSI Driver을 설치했거나, 애드온을 업데이트하거나, 헬름으로 만든 앱들이 deprecated가 되어 고장 난 적이 있어서 픽스한 등의 경험이 있다. 하지만 CKA에서 요구하는 트러블슈팅은 컨트롤플레인이 고장 났을 때 고치거나 워커노드의 kubelet이 죽었을 때 다시 살리는 등의, 앞으로도 잘 다뤄보지 못할 장애 상황을 트러블슈팅 하는 내용이었다. 실전으로 시험을 볼때는 워커노드 한대가 맛이 갔고, 살리는 문제가 나와서 kubelet을 트러블 슈팅해서 해결했다 (고득점 문제라 많은 시간을 쏟고 후덜덜 하면서 풀었다. 이거 틀리면 떨어진다는 마음으로😵‍💫)

다음으로, 쿠버네티스에 대해 내가 잘 모르고 있는 부족했던 부분을 많이 채워줬다. 멀티 컨테이너 파드, 스토리지(pv, pvc), 네트워크(NetworkPolicy), RBAC(role, rolebinding), jsonpath를 이용한 분석 및 모니터링 등등 관리형 서비스를 사용하면서 부족했던 개념을 채워줬고, 쿠버네티스의 확장성에 대한 철학을 느끼게 되었다. 쿠버네티스가 어디에서 실행되든지, 온프레미스나 클라우드 환경 불문하고 사용할 수 있도록 만든 좋은 플랫폼이라는 생각이 들게 되었다.

udemy 강의 수강 내역

지난 일년간 유데미 Mumshad 강의를 통해 시간이 여유로울 때 쿠버네티스를 전반적으로 가볍게 훑어보았다.

그 외에도 CLI를 직접 입력하면서 시험을 보는 환경에 따라 공부했기 때문에, 서비스, 파드나 디플로이정도는 가볍게 실행하거나 수정하고 매니페스트를 yaml로 만들 수 있게 되었다. —dry-run=client와 -o yaml를 조합해서 매니페스트를 만드는 명령어들은 이제 언제든지 활용할 수 있을 정도로.

결론적으로 CDK + EKS + cdk8s 조합으로 쉽게 관리하는 쿠버네티스를 추상화되지 않은 레벨로, 더 넓게 이해하는데 있어서 자격증 공부는 좋은 선택이였다. 쿠버네티스를 컨트롤플레인부터 직접 프로비저닝해서 사용하고 kubectl을 사용하는 개발자들의 경우 시험이 매우 쉬울 거라 생각되지만, 나에겐 쉽지는 않았다. 그렇기 때문에 많은 걸 배울 수 있었던 시험이 아닐까 싶다.

아래부터는 다른 사람들과 거의 비슷한 CKA 시험 준비와 절차에 대해 작성했다.

CKA 시험 신청

일 년 전(2022.04) 리눅스 파운데이션에서 신청했다. 여러 블로그에 나와 있듯이, 할인 코드를 받는 방법이 있다. 정가가 395달러(약 52만 원)으로, 나는 225달러로 등록했었다.

등록만 하고 일 년간 미뤄왔던 시험을 신청하기 위해 간만에 linux foundation에 접속하고, 시험 날짜를 선택했다. 그 전에 시험 동의와 이름 검증, 리눅스 플랫폼 선택 등등 여러가지 절차가 있지만 이미 되어있고 한참 전에 했던거라 어떻게 했는지 기억도 나지 않는다. 4월 16일이 지나면 만료되기 때문에, 발등에 불 떨어져서 두 번째 시험 볼 각오로 시험 날짜만 한국시간 4월 1일 AM 10:00로 선택하고 거짓말처럼 붙기를 바랐다.

udemy 강의 수강 내역

만료일 15일 전 스케줄 된 CKA 시험

CKA 자격증 준비

많은 CKA 후기와 동일하게, 나 또한 Mumshad Mannambeth의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의로 시작했다(무려 일년 전에). 영어로 된 강의가 이해가 안 갈 때는 쿠버네티스 공식 문서를 읽으면서 추가로 개념을 이해했고, 강의마다 Udemy 포함되어있는 Practice Test로 실습했다. Practice Test의 경우 Mumshad Mannambeth가 운영하는 플랫폼인 kodekloud라는 사이트에서 원격 리눅스 환경을 통해 실습하게 되고, 내가 만든 쿠버네티스 환경에 대한 채점도 기가 막히게 잘 된다. 실제 시험보다 낫다. 반대로 말하면 시험 환경은 썩 좋지 못했다.

Mumshad Mannambeth의 CKA 강의 대부분의 강의를 들었는데, 보안 관련 자격증인 CKS(Certified Kubernetes Security Specialist)에서만 나올만한 부분들은 제외하고 들었다. 시험 등록을 하면 killer.sh라는 곳에서 CKA 시험에 대한 시뮬레이터를 두 번 제공하는데 난이도가 높다고 들었지만 풀진 않았고 대충 환경이 어떤지만 체크했다. 일반적인 리눅스 GUI 환경과 같았다.

시험 날 아침까지 Mock Exam 난이도 2까지만 봤고, 이때만 해도 합격에 못 미치는 50점대가 나왔던 것 같다.

무슨 베짱이였는진 몰라도 killer.sh와 udemy CKA강의 Mock Exam 3는 풀지 않았다. 시험 기회가 두 번 주어지니 떨어질 각오에 다음번(만료 2주밖에 남지 않았지만)에 제대로 붙자는 생각이었고, 실제 시험 난이도가 어떤지 체크하고 싶었다. (근거 없는 자신감이 아주 넘쳐난다)

CKA 시험 날 환경 (2023년 4월 01일)

4월 1일 오전 10시 시험이었는데, 미리 접속해서 원격 브라우저 프로그램(PSI Secure Browser)을 받고 설치해야 한다. 용량도 꽤 크고 뭔가 컴퓨터에 백도어 심는 느낌이라 설치하는 도중에 기분이 썩 좋지 못하다. 맥에서 접속했는데, 내 컴퓨터를 보는 권한과 카메라 & 마이크 권한을 승인해야 진행된다.

CKA 자격증 캡처

접속하면 왼쪽 사이드에는 문제가 나오고, 오른쪽에 가상 환경의 리눅스 GUI가 나온다. 처음 들어가면 터미널도 안 열려 있고 브라우저만 덩그러니 하나 띄워져 있다. (ref. https://docs.linuxfoundation.org/tc-docs/certification/tips-cka-and-ckad )

이후에 10시가 지나서 감독관이 채팅으로 말을 걸고, 내가 자리해있는 곳의 앞 벽면, 왼쪽 벽면, 오른쪽 벽면, 책상, 책상 아래, 책상 밑바닥까지 검사한다. 맥북 들고 이리저리 쇼를 했다. 캠이 따로 있으면 보여주기 편할 것 같으나 맥북으로도 크게 문제는 없다. 아이맥으론 할 생각도 없었지만, 맥북으로 해보니 아이맥과 같은 일체형 PC는 시험보기 불가능할 것 같다.

시험에 들어가고 나서 원격 리눅스 환경의 커맨드와 터미널상의 커맨드가 달라 시험 내내 헷갈리면서 사용하게 됐다. 터미널에서는 컨트롤+시프트+c를 눌러야 복사가 되는데, 리눅스 브라우저상에서는 컨트롤+c를 눌러야 했기 때문이다. 브라우저에서 컨트롤+시프트+c를 누르면 브라우저 개발자 도구가 나와서 안 그래도 없는 시간을 자꾸 잡아먹기 일쑤였다. 이러한 커맨드는 두시간짜리 시험이 마무리될 때쯤 익숙해진 것 같다. 다른 후기들 보면 killer.sh 같은 환경을 미리 체험하라고 말하는데, 그러는 이유가 다 있다.

공식 문서에서 한국어로 번역이 되어있는 페이지들은 언어를 바꿔서 한글로도 문서를 볼 수 있다. 원격 환경의 키 입력 자체는 한글 지원이 잘되지 않아서, 문제에 대한 키워드만 영어로 검색하고 문서에 접속한 후 우측 상단 언어 선택에서 한국어가 있으면 우리나라 말로 문서를 읽는 데 전혀 지장이 없다.

시험은 다른 사람들과 비슷하게 나왔다. 총 18문제인가 나왔던 것 같고, 배점이 낮은(4점 정도) 간단한 문제로는 Deployment Scale 조정, 특정 컨테이너 이미지와 네임스페이스가 포함된 Pod 생성, Deployment에 연결하는 Service 생성(Cluster IP), Ingress 생성 등이 있었다.

배점이 중간(7점?) 정도 되는 문제는 A 네임스페이스에 있는 파드와 통신할 수 있는 B 네임스페이스에 포함된 Network Policy를 생성하는 문제와 PV(Persistent Volume), PVC(Persistent Volume Claim) 생성 및 볼륨을 연동하는 Pod 생성과 같은 문제, 그리고 Role 및 RoleBinding을 생성하고 연동하는 문제들이 나왔다.

배점이 높은 (14점인지 17점인지 기억이 안 난다) 문제는 트러블슈팅 문제였는데, 워커노드 1번이 NotReady 상태로 죽어 있고 살리는 문제였다. 문제 보자말자 벙찐 상태에서 쿠버네티스 문서에서 열심히 검색했다. 여기서 몰랐던 부분이 있는데, 시험 환경 리눅스에서 쿠버네티스 공식 문서에서 검색해서 나오는 블로그 글들(쿠버네티스 포럼) 또한 접속이 가능하다. 여기에서 내가 잊고 있던 service 명령어나 journalctl 명령어를 다시금 기억나게 만들어줬다. 리눅스 터미널에서 ssh를 통해 특정 서버로 접속해서 kubelet을 확인(service kubelet status)했는데 running 중이라고 떠서 그때부터 멘붕이 왔다. 이것저것 찾아보고 journalctl -u kubelet 명령어를 통해서 확인해도 뭔가 힌트를 못찾고 있었는데, 혹시나 해서 kubelet을 껐다 켠 후 보니 노드가 살아났다.

아마도 고득점 문제를 맞혔기 때문에 한 번에 붙지 않았을까 싶다. 시험 10분 정도 남았을 때 문제마다 컨텍스트를 바꿔가며 잘 생성되어있는지 체크했다.

시험 결과

4월 1일 오전 10시에 시험을 봤고, 다음 날 오전 10시쯤 결과가 나왔다. 여러 블로그 글을 본 결과 시험 끝나고 22시간 후 정도면 나오는 것 같다. (떨어질 것 같아도 열심히 브라우저 리로드한 결과🤣)

혹시나 붙었을까 광클해본건데 76점이 나와서 통과(66점 기준)했다. 점수는 나오지만, 어디에서 어떻게 점수를 깎아 먹었는지는 나오지 않는다.

정리

  • 자격증은 일단 신청해놓으면 만료일 전에 어떻게든 딸 수 있다는 근거 없는 자신감이 더 생겼다.
  • 일 년 전 사비로 신청한 자격증 비용을 우리회사(퍼플아이오)에서 환급 지원해줘서 좋다😘. 파트원분들께 한턱 내야지!
  • 쿠버네티스라는 플랫폼 (쿠버네티스 공식 문서에 따르면 쿠버네티스는 단순한 오케스트레이션 시스템이 아니라고 말한다)을 조금 더 심층적으로 공부하기 위해 신청부터 했고, 시험 결과를 떠나 부족했던 지식을 채워 굉장히 만족스럽다.
  • CKA 자격증 시험 방식에 대한 경험이 매우 신선했다. 일하는 것처럼 뭔가 만들고 변경하고 트러블슈팅하고 분석하고 모니터링하는 방식이 재밌었고, 사지선다나 주관식 푸는 문제들보다 훨씬 재밌었다.
  • 예전에 AWS Certification을 취득한 적이 있는데, Dump로 달달 외우고 딴 거라 스스로 만족스럽지 않고 시험의 실효성에 대한 의문이 든 적이 있었는데, AWS Certification도 aws cli나 CDK같은 코드를 통해 클라우드를 구성하는 시험이 나오면 좋겠다는 생각이 들었다.