콘텐츠로 이동

1. CKA 시험 해부

무엇이 나오고, 어떻게 채점되는가

형식

2시간, 원격 감독(웹캠 필수). 15~20개의 수행형 과제. 합격선 66%. 문제는 순서 무관. 재응시 1회 무료 포함.

환경

브라우저 안의 리눅스 데스크톱 + 터미널. 진짜 클러스터 여러 개를 준다. 문제마다 kubectl config use-context ... 를 먼저 실행. 노드 접속은 ssh <노드이름>, 권한은 sudo -i.

flowchart LR
    T["Troubleshooting<br/>30%<br/>18장"]
    C["Cluster Architecture<br/>25%<br/>14~17장"]
    N["Services & Networking<br/>20%<br/>9~12장"]
    W["Workloads & Scheduling<br/>15%<br/>4~8장"]
    S["Storage<br/>10%<br/>13장"]
    T --- C
    C --- N
    N --- W
    W --- S
    SUM["T + C = 55%<br/>여기가 승부처다"] -.- T
    SUM -.- C

    classDef big fill:#fee2e2,stroke:#dc2626,color:#7f1d1d
    classDef mid fill:#fef3c7,stroke:#d97706,color:#78350f
    classDef small fill:#dbeafe,stroke:#2563eb,color:#1e3a8a
    classDef note fill:#dcfce7,stroke:#16a34a,color:#14532d
    class T,C big
    class N,W mid
    class S small
    class SUM note
비중 도메인 이 덱의 장
30% Troubleshooting 18장
25% Cluster Architecture, Installation and Configuration 14~17장
20% Servicing and Networking 9~12장
15% Workloads and Scheduling 4~8장
10% Storage 13장
  • 트러블슈팅 + 클러스터 아키텍처 = 55%. 여기가 승부처다
  • 그런데 많은 사람이 Pod/Deployment(15% 쪽)에 시간을 제일 많이 쓴다. 배분이 틀렸다
  • 스토리지는 10%지만 문제 유형이 좁아서 확실히 챙기면 거의 다 먹는다

도메인별 실제 출제 항목 (커리큘럼 원문 정리)

섹션 제목: “도메인별 실제 출제 항목 (커리큘럼 원문 정리)”
  • RBAC 관리
  • 클러스터 설치를 위한 인프라 준비
  • kubeadm으로 클러스터 생성·관리
  • 클러스터 라이프사이클(업그레이드) 관리
  • 고가용성 컨트롤 플레인 구성
  • Helm·Kustomize로 컴포넌트 설치
  • 확장 인터페이스(CNI, CSI, CRI) 이해
  • CRD 이해, 오퍼레이터 설치·구성

굵게 표시한 항목들이 최근 개정에서 들어오거나 강조된 것들이다.

flowchart LR
    NEW["최근 개정에서 강조된 것"]
    NEW --> G["Gateway API<br/>Ingress 만 알면 안 된다 · 11장"]
    NEW --> H["Helm / Kustomize<br/>설치·값 오버라이드 · 16장"]
    NEW --> C["CRD와 오퍼레이터<br/>설치하고 상태 확인 · 17장"]
    NEW --> A["워크로드 오토스케일링<br/>HPA + metrics-server · 8장"]
    NEW --> L["컨테이너 출력 스트림<br/>로그 전반 · 18장"]
    OLD["오래된 자료의 함정"] -.->|"Docker · PodSecurityPolicy 를 다루고<br/>Gateway API 가 없다 ❌"| NEW

    classDef key fill:#dbeafe,stroke:#2563eb,color:#1e3a8a
    classDef bad fill:#fee2e2,stroke:#dc2626,color:#7f1d1d
    classDef mute fill:#f1f5f9,stroke:#94a3b8,color:#334155
    class NEW key
    class OLD bad
    class G,H,C,A,L mute
  • Gateway API — Ingress만 알면 안 된다. CRD 기반이라 설치부터 다르다 (11장)
  • Helm / Kustomize — “컴포넌트 설치” 맥락. 차트 작성이 아니라 설치·값 오버라이드 (16장)
  • CRD와 오퍼레이터 — 직접 만들진 않지만 읽고 설치하고 상태를 확인할 줄 알아야 (17장)
  • 워크로드 오토스케일링 — HPA. metrics-server가 없으면 아무것도 안 된다 (8장)
  • 컨테이너 출력 스트림 — 로그. kubectl logs 옵션 전부 + 노드의 로그 파일 위치 (18장)
항목 상태
k alias kubectl로 설정되어 있다
bash 자동완성 켜져 있다
yq 설치되어 있다 (YAML 편집에 유용)
curl / wget 있다 — Service 연결 확인용
man 있다
편집기 vim, nano
  • 복사/붙여넣기는 Ctrl+Shift+C / Ctrl+Shift+V — 터미널 안에서는 Ctrl+C가 안 된다
  • Insert 키가 막혀 있다 — vim에서 삽입 모드는 i, 빠져나오기는 Esc
  • 문제 지문에서 명령을 복사할 때 줄바꿈이 깨지는 일이 있다. 붙여넣고 눈으로 확인
  • 노드 작업 후에는 반드시 exit 해서 원래 셸로 돌아올 것
flowchart LR
    Q1["문제 N"] --> SSH["ssh node01"] --> WORK["노드에서 작업"]
    WORK -->|"exit 했다 ✅"| BACK["원래 셸<br/>다음 문제 정상"]
    WORK -->|"exit 을 잊었다 ❌"| STUCK["노드 셸에 남는다<br/>kubectl 이 다른 kubeconfig 를 보거나 아예 없다"]
    STUCK --> WHY["'갑자기 명령이 안 먹는다' 의 90%"]

    classDef ok fill:#dcfce7,stroke:#16a34a,color:#14532d
    classDef bad fill:#fee2e2,stroke:#dc2626,color:#7f1d1d
    classDef mute fill:#f1f5f9,stroke:#94a3b8,color:#334155
    class BACK ok
    class STUCK,WHY bad
    class Q1,SSH,WORK mute

YAML을 손으로 고쳐야 하는 순간은 반드시 온다.

" ~/.vimrc — 시험 시작하자마자 만들어도 좋다
set expandtab
set tabstop=2
set shiftwidth=2
set number

이동

gg / G — 처음 / 끝 :42 — 42번 줄로 /문자열 + n — 검색

편집

dd / 3dd — 줄 삭제 yy + p — 줄 복사·붙여넣기 u / Ctrl+r — 실행 취소 / 되돌리기 V + > — 블록 들여쓰기

시험 중 브라우저에서 아래만 열 수 있다.

flowchart LR
    OK["열 수 있다 ✅"] --> O1["kubernetes.io/docs/<br/>검색 기능 포함"]
    OK --> O2["kubernetes.io/blog/"]
    OK --> O3["helm.sh/docs/"]
    OK --> O4["gateway-api.sigs.k8s.io/"]
    OK --> O5["문제의 Quick Reference 링크"]
    NG["열면 안 된다 ❌"] --> N1["GitHub"]
    NG --> N2["StackOverflow"]
    NG --> N3["블로그 전부"]
    NOTE["검색은 되지만<br/>외부 사이트 클릭에 주의"] -.- NG

    classDef ok fill:#dcfce7,stroke:#16a34a,color:#14532d
    classDef bad fill:#fee2e2,stroke:#dc2626,color:#7f1d1d
    classDef mute fill:#f1f5f9,stroke:#94a3b8,color:#334155
    class OK,O1,O2,O3,O4,O5 ok
    class NG,N1,N2,N3 bad
    class NOTE mute

그래서 “공식 문서 어디에 뭐가 있는지” 자체가 실력이다. 평소 연습할 때부터 다른 사이트를 끊고 kubernetes.io만 보자.

공식 문서에서 자주 퍼오는 페이지

섹션 제목: “공식 문서에서 자주 퍼오는 페이지”

외우는 게 아니라 검색어를 외운다.

필요한 것 검색어 얻는 것
PV/PVC YAML persistent volume 완성된 매니페스트
NetworkPolicy network policies 예제 5종 (deny-all 포함)
Ingress ingress 규칙·TLS 예제
Gateway API (Gateway API 사이트) http routing Gateway + HTTPRoute 짝
RBAC rbac Role/RoleBinding 예제
etcd 백업 operating etcd etcdctl snapshot 전체 명령
업그레이드 upgrade kubeadm clusters 단계별 명령
Pod 스케줄링 assign pods nodes affinity 문법
flowchart LR
    M1["kubectl create 로 만들었다"] --> R["클러스터의 최종 상태"]
    M2["YAML 파일로 만들었다"] --> R
    M3["kubectl edit 으로 고쳤다"] --> R
    R --> SCORE["자동 검증 스크립트가 채점<br/>어떻게 만들었는지는 상관없다"]
    SCORE --> PART["부분 점수가 있다<br/>맞춘 요구만큼 받는다"]

    classDef key fill:#dbeafe,stroke:#2563eb,color:#1e3a8a
    classDef ok fill:#dcfce7,stroke:#16a34a,color:#14532d
    classDef mute fill:#f1f5f9,stroke:#94a3b8,color:#334155
    class R key
    class PART ok
    class M1,M2,M3,SCORE mute
  • 채점은 자동화된 검증 스크립트가 클러스터의 최종 상태를 본다
  • 어떻게 만들었는지는 상관없다kubectl create든 YAML 파일이든 동일
  • 그러니 YAML 파일을 예쁘게 만들 이유가 없다. 상태만 맞으면 된다
  • 부분 점수가 있다 — 문제 안에 여러 요구가 있으면 맞춘 만큼 받는다

2시간 / 17문제 ≈ 문제당 7분. 그런데 난이도가 균일하지 않다.

  • 1분 문제: 라벨 붙이기, Pod 하나 만들기, 노드 cordon
  • 10~15분 문제: 클러스터 업그레이드, etcd 복구, 고장난 컨트롤 플레인 수리
  1. 전체를 한 번 훑으며 쉬운 것부터 처리

    배점이 문제마다 표시된다. 3분 안에 풀리는 것을 먼저 끝낸다.

  2. 막히면 플래그 걸고 즉시 넘어간다 — 5분 룰

  3. 남은 시간에 플래그로 돌아온다

  4. 마지막 10분은 검산

    컨텍스트 실수, 네임스페이스 실수를 확인한다.

시기 할 일
1~2주차 아키텍처·kubectl·Pod·워크로드 (2~6장). kind로 손에 익히기
3~4주차 스케줄링·Service·DNS·Ingress·NetworkPolicy (7~12장)
5주차 스토리지·RBAC (13~14장). 여기는 문제 유형이 좁으니 확실히
6~7주차 클러스터 라이프사이클 (15장) — killercoda에서 업그레이드·etcd 10회 이상 반복
8주차 트러블슈팅(18장) 집중 + killer.sh 1세션
시험 직전 killer.sh 2세션, 틀린 것만 복습, 치트시트 손에 붙이기 (19장)

15장(라이프사이클)에 가장 많은 시간을 써야 한다. 평소에 안 하는 작업이라 반복 말고는 방법이 없다.

  • 2시간 / 15~20문제 / 66% 합격 / 순서 무관 / 클러스터 여러 개
  • 컨텍스트 전환을 안 하면 맞아도 0점 — 가장 비싼 실수
  • 배점의 55%가 트러블슈팅 + 클러스터 아키텍처. 시간 배분을 여기에 맞춰라
  • 열 수 있는 문서는 kubernetes.io / helm.sh / gateway-api.sigs.k8s.io
  • 채점은 최종 상태만 본다 → 명령형 우선, YAML은 필요할 때만
  • 노드에서 나올 때 exit, vim은 expandtab