콘텐츠로 이동
Study NoteCKA

CKA 시험 해부

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

형식

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

환경

브라우저 안의 리눅스 데스크톱 + 터미널. 진짜 클러스터 여러 개를 준다. 문제마다 지정된 SSH 호스트·context를 먼저 확인. 노드 접속은 ssh <노드이름>, 권한은 sudo -i.

CKA 다섯 도메인의 배점 — Troubleshooting 30%, Cluster Architecture 25%, Servicing and Networking 20%, Workloads and Scheduling 15%, Storage 10%
비중도메인이 덱의 장
30%Troubleshooting트러블슈팅
25%Cluster Architecture, Installation and Configuration
20%Servicing and Networking
15%Workloads and Scheduling
10%Storage스토리지
  • 트러블슈팅 + 클러스터 아키텍처 = 55%. 여기가 승부처다
  • 그런데 많은 사람이 Pod/Deployment(15% 쪽)에 시간을 제일 많이 쓴다. 배분이 틀렸다
  • 스토리지는 10%지만 문제 유형이 좁아서 확실히 챙기면 거의 다 먹는다

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

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

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

최근 개정에서 강조된 Gateway API · Helm/Kustomize · CRD와 오퍼레이터 · 오토스케일링 · 로그, 그리고 이것들이 빠진 오래된 자료의 함정
  • Gateway API — Ingress만 알면 안 된다. CRD(CustomResourceDefinition — 새 리소스 종류를 추가하는 확장) 기반이라 설치부터 다르다 (Ingress와 Gateway)
  • Helm / Kustomize — “컴포넌트 설치” 맥락. 차트 작성이 아니라 설치·값 오버라이드 (Helm과 Kustomize)
  • CRD와 오퍼레이터 — 직접 만들진 않지만 읽고 설치하고 상태를 확인할 줄 알아야 (CRD)
  • 워크로드 오토스케일링 — HPA(Horizontal Pod Autoscaler — 부하에 따라 Pod 수를 자동 조절). metrics-server가 없으면 아무것도 안 된다 (오토스케일링)
  • 컨테이너 출력 스트림 — 로그. kubectl logs 옵션 전부 + 노드의 로그 파일 위치 (트러블슈팅)

내 컴퓨터의 PSI Secure Browser → 시험용 원격 Linux 데스크톱 → Firefox·터미널 구조다. PSI Secure Browser는 감독 플랫폼에 접속하는 전용 브라우저이고, 문서 열람과 문제 풀이는 그 안에 표시되는 원격 데스크톱에서 한다. 공식 ExamUI 안내에서 실제 화면도 볼 수 있다.

화면·도구사용하는 곳
문제 패널 / ReadMe문제 조건과 시험 환경 지시 확인
원격 Firefox허용된 공식 문서 열람·검색
Terminal Emulator지정 호스트에 SSH 접속해 작업
VSCodium원격 GUI 편집기. 확장 설치는 금지

ExamUI Tour가 끝나거나 Hide를 누르면 시험 타이머가 시작된다. 문제 패널 경계와 창 크기를 조절할 수 있고, 설정 메뉴에서 원격 화면 해상도를 바꿀 수 있다. 휴식 요청이나 연결 끊김은 타이머를 멈추지 않는다.

미리 저장한 개인 브라우저 북마크는 시험 환경에서 사용할 수 없다. Linux Foundation의 PSI 전환 안내에 명시된 제한이다. 허용 문서는 원격 Firefox에서 열고, 문제에 제공된 Quick Reference 링크도 활용한다. 현재 허용 범위는 Resources Allowed와 아래 문서 활용에 정리했다.

연습할 때도 북마크 없이 공식 사이트 내부 검색 → Ctrl+F로 예제 찾기 → 복사·수정을 해 본다. 이 덱은 시험 전 학습용이며 시험 중 열람 자료가 아니다.

  • 실제 응시할 컴퓨터·네트워크에서 PSI System Check를 실행한다. 활성 모니터는 하나만 쓰며 웹캠·마이크를 준비한다. Secure Browser 다운로드는 시험 실행 시 제공된다. 지원 OS와 설치 조건은 CKA·CKAD 공식 안내에서 확인한다.
  • 신분 확인·시험 공간·체크인 절차는 Candidate Handbook을 따른다. 위 링크들은 응시 준비용 안내이며, 시험 중 열람 허용 사이트 목록과는 구분한다.

공식 기술 지침에 따르면 아래 명령 도구는 지정된 SSH 호스트에 준비되어 있다. 접속 출발점인 base에는 이 도구들이 사전 설치되어 있지 않다. 문제 지시대로 ssh <호스트> → 작업 → exit으로 돌아오며, 중첩 SSH는 지원하지 않는다. base를 재부팅해서는 안 된다.

항목상태
k aliaskubectl로 설정되어 있다
bash 자동완성켜져 있다
yq설치되어 있다 (YAML 편집에 유용)
curl / wget있다 — Service 연결 확인용
man있다
  • 터미널 복사/붙여넣기는 Ctrl+Shift+C / Ctrl+Shift+V — Ctrl+C는 실행 중인 명령을 중단한다
  • Firefox 등 다른 앱은 Ctrl+C / Ctrl+V — Mac으로 응시해도 원격 화면은 Linux다
  • Insert 키가 막혀 있다 — vim에서 삽입 모드는 i, 빠져나오기는 Esc
  • 문제 지문에서 명령을 복사할 때 줄바꿈이 깨지는 일이 있다. 붙여넣고 눈으로 확인
  • 노드 작업 후에는 반드시 exit 해서 원래 셸로 돌아올 것
노드에 ssh 로 들어가 작업한 뒤 exit 을 했는지에 따라 다음 문제에서 kubectl 이 정상 동작하거나 막히는 갈림길

YAML의 필드·경로를 고칠 때는 검색 → 필요한 부분만 편집 → 저장 → 검증을 반복한다. Vim은 모드에 따라 같은 키의 의미가 달라진다. 조작이 꼬이면 먼저 Esc로 일반 모드로 돌아온다. 아래 이동·편집 키는 일반 모드 기준이며, : 명령과 검색은 입력 뒤 Enter를 누른다.

모드들어가는 법하는 일
일반 모드Esc이동·검색·삭제·복사
삽입 모드i문자 입력. 끝나면 Esc
줄 선택 모드Vj·k로 여러 줄 선택 후 들여쓰기·복사
명령줄 모드:저장·종료·설정. 실행은 Enter

Vim 설정 — 필요할 때만 보완한다

섹션 제목: “Vim 설정 — 필요할 때만 보완한다”

기본 설정으로 편집하고, 들여쓰기 동작이 불편할 때만 보완한다. Tab 입력과 들여쓰기가 원하는 대로 동작하면 파일마다 설정을 조회하거나 .vimrc를 수정할 필요가 없다. 실습에서 별도 설정 없이 잘 동작했다면 그대로 사용한다. 다만 실습에서 본 설정값을 모든 시험 호스트의 보장된 기본값으로 가정하지는 않는다.

Tab·Backspace의 공백 처리나 >>·<<의 이동 폭이 예상과 다를 때는 YAML을 연 상태에서 아래 명령으로 확인하고 보완할 수 있다. ?는 값을 바꾸지 않고 조회한다.

:set et? ts? sts? sw? ai?
:set et ts=2 sts=2 sw=2 ai

첫 줄은 조회, 둘째 줄은 공백 2칸으로 편집하고 싶을 때 쓰는 설정 예다. 필요한 옵션만 골라 적용해도 된다. Vim 안에서 직접 입력할 때는 약어를, .vimrc에 적을 때는 읽기 쉬운 풀 이름을 쓴다. 둘은 같은 옵션이다.

풀 이름약어효과
expandtabetTab 입력을 공백으로 넣음
tabstop=2ts=2기존 탭 문자의 표시 간격을 2칸으로 설정
softtabstop=2sts=2삽입 중 Tab·Backspace의 공백 처리 단위를 2칸으로 설정
shiftwidth=2sw=2>>·<<로 옮기는 들여쓰기 단위를 2칸으로 설정
autoindentai새 줄에 이전 줄의 들여쓰기를 이어받음
numbernu줄 번호 표시
incsearchis입력 중 검색 결과로 이동
hlsearchhls검색 결과 강조

number·incsearch·hlsearch는 탐색 편의를 위한 선택 사항이다. 약어와 풀 이름은 Vim 옵션 도움말에 함께 명시되어 있다.

YAML 들여쓰기에는 탭 대신 공백을 사용한다. 2칸은 이 실습의 편집 기준이며 YAML이 모든 깊이에 반드시 2칸을 요구하는 것은 아니다. 기존 파일에서는 같은 계층의 정렬과 부모·자식 관계를 유지한다. expandtab은 이미 파일 안에 들어간 탭을 자동으로 제거하지는 않는다. 설정 의미는 Vim 옵션 도움말에서 확인할 수 있다.

같은 설정을 반복해서 보완해야 한다면 기존 ~/.vimrc를 먼저 읽고 필요한 항목만 추가하거나 수정한다. 아래는 선택할 수 있는 설정 예이며, 기존 파일을 통째로 덮어쓰지 않는다. 저장한 설정은 다음에 Vim을 실행할 때 읽는다.

set expandtab
set tabstop=2
set softtabstop=2
set shiftwidth=2
set autoindent
set number
set incsearch
set hlsearch

~/.vimrc를 고쳐도 이미 열려 있는 Vim에는 자동 반영되지 않는다. :source ~/.vimrc로 다시 읽는다. 설정은 그 호스트, 그 사용자에게 적용된다. base에서 만든 파일은 다른 호스트에 따라가지 않고, sudo -i로 root가 되면 /root/.vimrc를 따로 본다. root에서도 편집이 잘 되면 추가 설정은 필요 없다.

KodeKloud의 vimrc — 기존 설정을 읽고 필요한 값만 보완한다

섹션 제목: “KodeKloud의 vimrc — 기존 설정을 읽고 필요한 값만 보완한다”

실습에서 확인한 set sw=2, set et, set ts=2, set ai는 위 표의 옵션을 약어로 쓴 것이다. 같은 옵션·값이라면 풀 이름으로 바꿔 적을 필요가 없다. 해당 .vimrc에 sts가 없다고 Tab이 잘못 동작하는 것도 아니다. et와 ts=2로도 Tab을 공백으로 넣을 수 있고, 이 덱에서는 삽입·삭제 단위를 명확히 하기 위해 sts=2도 지정한다. 파일을 연 뒤의 실제 값은 플러그인 설정까지 반영된다. 동작이 예상과 다를 때만 위 조회 명령으로 확인한다.

나머지 줄은 다음 역할을 맡는다. 이 구성은 확인한 실습 환경의 사례이며 모든 랩의 기본값을 뜻하지 않는다.

설정역할
set termguicolors터미널의 True Color 사용
syntax on코드 구문 강조 켜기
colorscheme dracula설치된 Dracula 색상 테마 적용
execute pathogen#infect()Pathogen이 관리하는 플러그인을 Vim의 로딩 경로에 추가
filetype plugin indent on파일 형식을 감지하고 해당 형식의 플러그인·들여쓰기 규칙 로드

filetype plugin indent on은 이전 줄의 공백을 이어받는 ai보다 파일 형식에 맞춘 동작을 더한다. Pathogen과 Dracula는 실습 환경에 설치된 구성 요소다. 기존 환경에서는 유지하고, 다른 노드의 .vimrc를 준비할 때는 이 줄들을 통째로 복사하지 않고 필요한 편집 옵션만 보완한다.

YAML 목록 — 하이픈의 들여쓰기는 두 방식 모두 가능하다

섹션 제목: “YAML 목록 — 하이픈의 들여쓰기는 두 방식 모두 가능하다”

공식 예제에서 containers: 아래의 -가 같은 열에 있기도 하고, 두 칸 더 들어가 있기도 하다. 키의 값이 목록일 때는 두 표기 모두 유효하며 같은 데이터로 해석된다. YAML 명세의 블록 컬렉션 규칙이 허용하는 문법이다.

# 부모 키와 같은 열에 놓기
containers:
- name: nginx
image: nginx:alpine
# 부모 키보다 두 칸 더 들여쓰기
containers:
- name: nginx
image: nginx:alpine

name과 image는 같은 컨테이너의 필드이므로 서로 정렬한다. 컨테이너를 더 추가하면 같은 목록 안의 항목들은 - 위치를 맞춘다. 반면 containers와 volumes처럼 서로 다른 목록은 한 파일에서 두 방식을 섞어도 된다. 이 허용 규칙은 목록에 관한 것이며, metadata 아래의 name 같은 일반 자식 필드까지 부모와 같은 열에 놓아도 된다는 뜻은 아니다.

Kubernetes 공식 예제에도 두 방식이 있다. 기본 Pod 예제는 키와 -를 같은 열에 두고, PV를 사용하는 Pod 예제는 두 칸 더 들여쓴다.

Vim 이동·검색 — 줄의 처음과 첫 글자를 구분한다

섹션 제목: “Vim 이동·검색 — 줄의 처음과 첫 글자를 구분한다”
키이동 위치
h / j / k / l왼쪽 / 아래 / 위 / 오른쪽. 방향키도 사용 가능
0줄의 맨 처음, 들여쓰기 공백 앞. 숫자 0
^줄의 첫 공백 아닌 문자. YAML 필드 이름으로 이동할 때 유용
$줄의 마지막 문자
w / b다음 단어 시작 / 이전 단어 시작
gg / G파일 첫 줄 / 마지막 줄
:4242번 줄
/server아래 방향으로 server 검색 후 Enter
?server위 방향으로 검색 후 Enter
n / N같은 검색 방향의 다음 결과 / 반대 방향 결과
:noh검색 강조만 지움. 검색어는 유지

예를 들어 server: https://controlplane:6553에서 0은 첫 공백으로, ^는 s로, $는 마지막 3으로 이동한다. /server는 파일 내용 검색이며 셸에서 실행하는 명령이 아니다. Vim 이동 도움말과 검색 도움말이 정본이다.

Vim 편집·저장 — 대문자 I와 A로 입력 위치를 바로 잡는다

섹션 제목: “Vim 편집·저장 — 대문자 I와 A로 입력 위치를 바로 잡는다”
키동작
i / a커서 앞 / 뒤에서 입력 시작
I첫 공백 아닌 문자 앞에서 입력 시작. 대문자 i
A줄 끝에서 입력 시작
o / O아래 / 위에 새 줄을 만들고 입력 시작
x커서의 문자 하나 삭제
D커서부터 줄 끝까지 삭제. 줄 자체는 남는다
C커서부터 줄 끝까지 지우고 바로 입력 시작. 값 뒷부분 교체에 쓴다
cc줄 내용을 지우고 들여쓰기를 유지한 채 입력 시작
dd / 3dd현재 줄 / 현재 줄부터 3줄 삭제
yy → p현재 줄 복사 후 아래에 붙이기. P는 위에 붙이기
u / Ctrl+r실행 취소 / 취소한 변경 다시 실행
:w저장
:q종료. 저장하지 않은 변경이 있으면 거부
:wq저장 후 종료
:q!마지막 저장 이후 변경을 버리고 종료

Vim의 yy·p는 편집기 내부 복사·붙여넣기다. 브라우저에서 복사한 YAML을 터미널로 넣는 조작과 구분한다. 명령의 세부 동작은 Vim 빠른 참조에서 확인한다.

Vim YAML 들여쓰기 — 선택한 블록을 함께 옮긴다

섹션 제목: “Vim YAML 들여쓰기 — 선택한 블록을 함께 옮긴다”

왼쪽 여백은 공백을 줄마다 지우기보다 같은 블록을 선택해 함께 이동한다.

>>는 일반 모드에서 > 키를 두 번 연속 누르라는 뜻이다. 첫 >는 들여쓰기할 범위를 기다리고, 두 번째 >로 현재 줄을 지정한다. V로 줄을 선택했다면 이미 범위가 정해져 있으므로 >를 한 번만 누른다. <<와 선택 후 <도 같은 방식으로 내어쓴다.

키 순서동작
일반 모드에서 >> / <<현재 줄을 오른쪽 / 왼쪽으로 한 단계 이동
일반 모드에서 3>> / 3<<현재 줄부터 3줄을 각각 한 단계 이동
V → j·k로 범위 선택 → > 또는 <선택한 줄 전체를 한 단계 이동
범위를 선택한 뒤 3> / 3<선택한 줄 전체를 세 단계 이동
gv → > 또는 <방금 선택했던 범위를 다시 선택해 한 단계 더 이동
Esc선택 취소 또는 일반 모드 복귀

shiftwidth=2이면 한 단계가 2칸이다. 일반 모드의 3>>는 줄 수, 선택 후 3>는 들여쓰기 횟수를 뜻한다. 따라서 3>>는 3줄을 각각 2칸, 선택 후 3>는 선택한 줄들을 각각 6칸 옮긴다 (Vim 들여쓰기 명령).

선택 후 >·<를 실행하면 일반 모드로 돌아온다. 한 번만 옮길 수 있는 것이 아니라, 조금씩 더 옮기려면 gv로 다시 선택한 뒤 >·<를 반복한다. =는 설정된 들여쓰기 규칙에 따른 자동 정렬이며, YAML의 의도한 부모·자식 관계를 복구해 주는 기능이 아니다. 파일 전체를 자동 정렬하기 전에 필요한 블록만 고친다. Vim 들여쓰기 설명도 선택 범위에 대한 이동과 자동 정렬을 구분한다.

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

시험 중 열 수 있는 문서 사이트와 열면 안 되는 GitHub · StackOverflow · 블로그의 구분

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

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

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

외우는 게 아니라 검색어를 외운다. kubectl 옵션이 가물가물할 때는 검색보다 kubectl Quick Reference 한 페이지를 열어 두고 훑는 쪽이 빠르다.

필요한 것검색어얻는 것
PV/PVC YAMLpersistent volume완성된 매니페스트
NetworkPolicynetwork policies예제 5종 (deny-all 포함)
Ingressingress규칙·TLS 예제
Gateway API(Gateway API 사이트) http routingGateway + HTTPRoute 짝
RBACrbacRole/RoleBinding 예제
etcd 백업operating etcdetcdctl snapshot 전체 명령
업그레이드upgrade kubeadm clusters단계별 명령
Pod 스케줄링assign pods nodesaffinity 문법
create·YAML·edit 중 무엇으로 만들었든 클러스터의 최종 상태만 자동 채점되고 부분 점수가 있다는 구조
  • 채점은 자동화된 검증 스크립트가 클러스터의 최종 상태를 본다
  • 어떻게 만들었는지는 상관없다 — kubectl create든 YAML 파일이든 동일
  • 그러니 YAML 파일을 예쁘게 만들 이유가 없다. 상태만 맞으면 된다
  • 부분 점수가 있다 — 문제 안에 여러 요구가 있으면 맞춘 만큼 받는다

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

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

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

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

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

  4. 마지막 10분은 검산

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

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

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

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