콘텐츠로 이동

0. 시작하기 전에

이 덱을 어떻게 읽을 것인가

“이 명령을 외운다”가 아니라 **“이 명령을 쳤을 때 클러스터 안에서 무슨 일이 벌어지는가”**를 남긴다.

  • CKA는 실기 시험이다. 객관식이 아니라 진짜 클러스터를 고친다
  • 그래서 암기는 오래 못 간다 — 동작 모델이 있어야 처음 보는 문제도 푼다
  • 반대로 동작 모델만 있고 손이 느리면 시간에 진다. 둘 다 필요하다
flowchart LR
    C["개념<br/>무엇인가"] --> A["실제 동작<br/>안에서 무슨 일이"] --> CMD["명령<br/>어떻게 하나"] --> P["함정<br/>어디서 틀리나"]
    P -.->|"다음 주제에서 반복"| C

    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 A key
    class P bad
    class C,CMD mute

이 정도는 안다

kubectl get pod은 쳐봤고, Deployment가 뭔지는 안다.

그런데 여기서 막힌다

“Pod이 Pending인데 왜 그런지” 를 30초 안에 못 짚는다.

이건 불안하다

etcd 백업·복구, kubeadm 업그레이드처럼 평소에 안 하는 작업.

이게 가장 큰 문제

실무는 EKS/GKE 같은 관리형이라 컨트롤 플레인을 만져본 적이 없다.

전부 해당된다면 정확히 이 덱의 대상이다. 특히 마지막 항목 — CKA 배점의 25%가 관리형에서 못 만지는 영역이다.

덱의 구성 — 커리큘럼 도메인에 맞춰 정렬했다

섹션 제목: “덱의 구성 — 커리큘럼 도메인에 맞춰 정렬했다”
주제 CKA 도메인
1 시험 자체
2~3 아키텍처 · kubectl 기초
4~8 Pod · 워크로드 · 설정 · 스케줄링 · 오토스케일링 Workloads & Scheduling (15%)
9~12 Service · DNS · Ingress/Gateway · NetworkPolicy Services & Networking (20%)
13 스토리지 Storage (10%)
14~17 RBAC · 클러스터 라이프사이클 · Helm/Kustomize · 확장 Cluster Architecture (25%)
18 트러블슈팅 Troubleshooting (30%)
19~20 시험 전략 · 마무리

배점 순서와 학습 순서는 다르다.

flowchart LR
    B["기초<br/>2~3장"] --> W["워크로드<br/>4~8장"] --> N["네트워크<br/>9~12장"] --> S["스토리지<br/>13장"] --> C["클러스터<br/>14~17장"] --> T["트러블슈팅<br/>18장 · 30%"]
    T -.->|"앞의 전부가 재료다<br/>그래서 마지막"| B

    classDef key fill:#fee2e2,stroke:#dc2626,color:#7f1d1d
    classDef mute fill:#f1f5f9,stroke:#94a3b8,color:#334155
    class T key
    class B,W,N,S,C mute

트러블슈팅이 30%지만 마지막에 있는 이유는, 앞의 전부를 알아야 진단이 되기 때문이다.

Kubernetes의 모든 것은 “선언된 상태”와 “실제 상태”의 차이를 줄이는 루프다.

flowchart LR
    SPEC["spec<br/>당신이 쓴 원하는 상태"] --> CTRL["컨트롤러<br/>차이를 관찰한다"]
    CTRL -->|"차이만큼 행동"| REAL["실제 클러스터"]
    REAL --> STATUS["status<br/>실제 상태"]
    STATUS --> CTRL
    STUCK["문제가 생겼다<br/>= 루프가 어딘가에서 막혔다"] -.-> CTRL

    classDef key fill:#dbeafe,stroke:#2563eb,color:#1e3a8a
    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 SPEC key
    class STATUS ok
    class STUCK bad
    class CTRL,REAL mute

트러블슈팅 30%가 결국 이 한 문장이다. **“어느 루프가 어디서 멈췄나”**를 찾는 것.

명령 표기

  • k = kubectl (시험 환경에 alias가 걸려 있다)
  • -n <ns> 는 대부분 생략해서 적었다. 실제 시험에서는 거의 항상 필요하다
  • 노드에서 실행하는 명령은 sudo 를 붙여 표기

YAML은 시험에서 그대로 쓸 수 있게 축약 없이 적었다.

이 덱은 읽는 자료다. 손은 클러스터에서 움직여야 한다.

용도 도구 비고
로컬 멀티노드 kind (+ Docker/colima) 가장 빠르게 뜬다. 컨트롤 플레인이 컨테이너
업그레이드·etcd 연습 killercoda 무료. 진짜 kubeadm 노드를 준다
0→1 클러스터 구축 VM 2대 (Multipass/UTM 등) kubeadm init 을 한 번은 직접 해봐야 한다
시험 직전 모의고사 killer.sh 시험 등록 시 2세션 포함. 실제보다 어렵다
flowchart LR
    Q{"무엇을 연습하나"}
    Q -->|"워크로드 · 네트워크 · RBAC"| KIND["kind<br/>빠르게 뜬다 ✅"]
    Q -->|"업그레이드 · etcd · 컨트롤 플레인"| KC["killercoda<br/>진짜 kubeadm 노드 ✅"]
    Q -->|"0에서 클러스터 만들기"| VM["VM 2대<br/>kubeadm init 직접"]
    KIND -.->|"노드가 컨테이너라<br/>apt install kubeadm 흐름이 다르다 ❌"| KC

    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 KIND,KC ok
    class VM mute
    class Q mute
  • CKA 커리큘럼 v1.35 (cncf/curriculum) 기준으로 도메인·비중을 정렬했다
  • 시험 환경 Kubernetes v1.35 기준으로 API 버전과 명령을 적었다
  • 커리큘럼은 대략 분기마다, 시험 환경 버전은 k8s 릴리스 후 4~8주 안에 따라 올라간다

버전이 올라가도 이 덱의 개념 부분은 거의 그대로다. 바뀌는 건 주로 API 버전 표기와 새로 GA된 기능 몇 개다.

  • CKA는 실기다 — 개념 모델과 손 속도가 둘 다 필요하다
  • 덱은 커리큘럼 5개 도메인 순서로 배치했고, 트러블슈팅(30%)이 마지막인 건 앞의 전부가 재료라서다
  • 모든 장을 관통하는 축: “선언된 상태 ↔ 실제 상태를 좁히는 루프”
  • 읽기만 하면 안 된다. kind + killercoda를 옆에 띄워두고 볼 것