[Kubenertes] CKA 대비 정리

Xabi·2025년 9월 2일

kubernetes

목록 보기
10/20

2025년 CKA 최신 경향 및 최근 기출 문제 를 분석해 주제별 핵심 영역을 다시 간단 명료하고 실전 중심으로 재정리해드릴게요. By chatGPT
(*2024년~2025년 출제경향, 공식 커리큘럼 및 수험생 후기 기반 요약)

1. 클러스터 구조 및 설치/관리 (15~20%)

  • kubeadm 명령어(설치, 초기화, 노드 조인/제거)
  • 주요 컴포넌트(api-server, etcd, kubelet, scheduler, controller-manager) 역할 숙지
  • kubeconfig 경로/변경 (KUBECONFIG 환경변수, 인증/컨텍스트)
  • etcd 백업/복원(기출 많아짐), 데이터 복원 실습
  • 클러스터 업그레이드
  • 네트워크 플러그인(CNI), 노드 추가/이동 및 비활성(코돈, 드레인, 언코돈)

2. 리소스 기본 관리 (Pod, Deployment, ReplicaSet, Job 등) (20~25%)

  • 파드(Pod), 디플로이먼트(Deployment), 레플리카셋(ReplicaSet), 잡(Job), 크론잡(CronJob) 생성/수정/삭제
  • YAML에서 apiVersion, kind, metadata, spec 필수 항목 구분
  • 파드/디플로이먼트 rolling update, 롤백 등 실제 작업
  • 멀티컨테이너 파드(init, sidecar 등)
  • scale/rollout/status 명령어 활용

3. 네트워킹 및 서비스 관리 (15~20%)

  • ClusterIP, NodePort, LoadBalancer, ExternalName 서비스 타입 차이
  • Ingress, ingress controller 실습 (리다이렉션, path, host rule)
  • 파드 간 통신, 서비스 디스커버리(DNS)
  • NetworkPolicy (allow/deny, ingress/egress) - 실제 yaml 작성, 적용

4. 스케줄링, 배치 및 고급 파드 배치 전략 (10~15%)

  • NodeSelector, Node Affinity, Pod Affinity/AntiAffinity, topologyKey(예시 yaml 실습까지!)
  • Taint와 Toleration (NoSchedule, PreferNoSchedule, NoExecute)
  • resource requests/limits (CPU, 메모리)
  • 파드 migration, 파드 고의적 장애 복구 등

5. 설정 및 보안 관리 (15%)

  • RBAC(Role-Based Access Control), 사용자/그룹/서비스어카운트와 역할(Role, ClusterRole, RoleBinding, - - - ClusterRoleBinding) 실제 yaml 실습
  • Secret, ConfigMap 설정 및 동적 참조(envFrom, volumeMount)
  • ServiceAccount, imagePullSecrets, default namespace 변경 등
  • SecurityContext, PodSecurityPolicy (보완적 기출 증가)

6. 스토리지 및 데이터 관리 (10~15%)

  • PersistentVolume(PV), PersistentVolumeClaim(PVC) 생성/연결, 삭제, 수정
  • StorageClass, 동적 프로비저닝, hostPath, emptyDir 등 다양한 볼륨 생성과 마운트
  • 파드 재시작 후 데이터 보존 확인
  • 볼륨 관련 장애(권한, 마운트 불가) 트러블슈팅

7. 유지보수, 모니터링/디버그/트러블슈팅 (10~15%)

  • kubectl logs/exec/describe/get 명령어로 상태 확인, 문제 해결
  • CrashLoopBackOff, ImagePullBackOff, Pending, Failed 상태 분석 및 원인 수정
  • 노드/파드 status, 리소스 이벤트 조회
  • 리소스 삭제/복구, orphan pod 정리, etcd 스냅샷/복구
  • 중요한 시스템 로그 위치(/var/log/pods, /var/log/messages 등)
  • metric-server, 간단한 리소스 사용량 확인/제한

주제별 CKA 최신 기출 경향 TIP

  • 기본 리소스 생성/변경 실습 꼭 직접 해볼 것: 문제에서 “YAML을 고쳐서 n개로 replica 설정” “다른 네임스페이스로 이동, 서비스 생성” 등이 자주 출제됩니다.
  • 관리자 권한과 설정: 인증/권한, RBAC 구성이 계속 강화되는 추세
  • etcd 백업/복원 및 클러스터 재구성 문제 비중 상승
  • 실행중 장애(파드 상태 변경, 노드 cordon/drain, pod 삭제/복구 등) 상황에 따른 문제 해결 능력
  • yaml 작성과 명령어 조합, 공식 도큐먼트 빠르게 참고하는 능력이 실제 점수에서 큰 차이

2025 핵심 주제별 요약표

공부 팁

리소스마다 실제 yaml을 매번 직접 작성해서 실습
공식 도큐먼트에서 예제 yaml 검색(시험 중 검색 가능한 링크로 연습)
kubectl 명령어 옵션(-o yaml, -n, --dry-run 등) 암기
실제 트러블슈팅 시나리오(파드 장애, 네트워크 불능 등) 실습
etcd, 업그레이드, RBAC, SecurityContext 등 보안/관리 분야 준비

2025년 신규 유형 대비 : https://www.youtube.com/@jaydemytech/videos

시험 환경 예습 / dump 실습 환경 : https://killercoda.com/cka

kubectl 차트 시트 / 자동 완성 : https://kubernetes.io/ko/docs/reference/kubectl/cheatsheet/

k alias
alias k='kubectl'

인증과 인가

🧠 CSR은 “인증(Authentication)”, Role은 “인가(Authorization)”

개념담당하는 역할관련 리소스
CSR (CertificateSigningRequest)클러스터에 “나 인증서 발급해줘” → 인증(Authentication)CertificateSigningRequest
Role / RoleBinding / ClusterRole / ClusterRoleBinding인증된 사용자가 “무엇을 할 수 있는가” → 인가(Authorization)Role, ClusterRole, RoleBinding, ClusterRoleBinding

요약

  • CSR은 “클러스터 접근 자격을 요청하는 단계” → 즉, 인증(Authentication)
  • Role / RoleBinding은 “인증된 사용자가 수행 가능한 행동 정의” → 즉, 인가(Authorization)

🔑 간단히 말해
CSR = "접속할 수 있게 해줘"
Role = "접속한 뒤 할 수 있는 일은 이것뿐이야"

트러블 슈팅

파일 찾기

  • sudo find / -name kubeadm.conf 2>/dev/null

alias 설정

  • alias kd='kubectl describe'

라벨 조회

  • kubectl get pods --show-labels

특정 라벨 조회

  • kubectl get pods -L app
  • kubectl get pods -L app,env

static pod 확인

  • ps -ef | grep kubelet

kubectl 먹통

  • sudo systemctl status kubelet로 kubelet : running 확인
  • 런타임이 containerd면 crictl ps, docker면 docker ps : 리소스 상태 점검

컨트롤 플레인 트러블슈팅

  • service kube-scheduler status
  • service kube-apiserver status
  • service kube-controller-manager status
  • service kubelet status
  • service kube-proxy status
  • kubectl logs kube-apiserver-master -n kube-system
  • sudo journalctl -u kube-apiserver

static pod는 /etc/kubernetes/manifests 의 yaml 파일을 수정해야 함!!

구분Static Pod (kubeadm 기본)systemd 서비스 (바이너리 직접 설치)
확인 위치/etc/kubernetes/manifests/ (yaml)/usr/lib/systemd/system/ (unit 파일)
Pod 확인kubectl get pod -n kube-systemps -ef / grep kube-apiserver
상태 확인kubectl get pod -n kube-systemservice <컴포넌트> status
systemctl status <컴포넌트>
로그 확인kubectl logs <pod> -n kube-systemsudo journalctl -u <컴포넌트>
대표 컴포넌트kube-apiserver-<node>
kube-scheduler-<node>
kube-controller-manager-<node>
kube-apiserver.service
kube-scheduler.service
kube-controller-manager.service
설치 방식kubeadm init 시 기본 생성직접 바이너리 설치 (/usr/bin/kube-*)
시험 출제 경향✅ 가장 많이 등장⚠️ 일부 트러블슈팅 문제에서 등장

중요 파일 위치

  • 인증서 키 파일: /etc/kubernetes/pki
  • static Pod manifest: /etc/kubernetes/manifests
  • kubelet 설정 및 상태 정보: /var/lib/kubelet

워커 노드 트러블슈팅

  • ssh node01
  • service kubelet status
  • service kubelet start -> active(running) 확인
  • journalctl -u kubelet
  • vi /etc/kubernetes/kubelet.conf
  • vi /var/lib/kubelet/config.yaml
  • service kubelet restart
  • controlplane의 포트는 6443

로그 확인

  • kubectl logs 파드이름
  • kubectl logs 파드이름 -c 컨테이너이름 (파드 중 여러 컨테이너 있을 때)

ip/mac 확인

  • ip a
  • ip link show eth0

internal ip 확인

  • kubectl get nodes -o wide

노드 스위칭

  • ssh node01

프로세스 확인

  • ps -aux | grep -i kubelet | grep runtime

파일/폴더

  • 파일 이름 변경
    • mv a.file b.file
  • 파일 이동
    • mv a.file /home/user/docs/
  • 폴더 생성
    • mkdir mydir

pod로 들어가서 로그 보기

  • kubectl exec -it frontend -- curl 'BACKEND-POD-IP'

현재 네임스페이스 변경

  • kubecl config set-context --current --namespace=alpha

마스터 노드 버전 업그레이드

부분의미
Given an existing Kubernetes cluster running version 1.20.0현재 클러스터 전체는 Kubernetes 1.20.0 버전임
upgrade all of the Kubernetes control plane and node componentscontrol plane (apiserver, controller-manager, scheduler 등)과 node components (kubelet, kubectl 등)를 모두 업그레이드하라는 뜻
on the master node only하지만 “master 노드에 한해서만” 업그레이드하라는 의미. 즉, 워커 노드는 건드리지 말라는 뜻
to version 1.20.1목표 버전은 1.20.1 (마이너 패치 업그레이드)
# 0. 마스터 노드 root 접근
ssh <MASTER_HOST>
sudo -i

# 1. cordon/drain master
kubectl cordon <MASTER_HOST>
kubectl drain <MASTER_HOST> --ignore-daemonsets --delete-local-data

# 2. kubeadm 업그레이드 (control plane 업그레이드)
apt-get install -y kubeadm=1.20.1-00
kubeadm upgrade plan
kubeadm upgrade apply v1.20.1 --etcd-upgrade=false

# 3. kubelet, kubectl 업그레이드
apt-get install -y kubelet=1.20.1-00 kubectl=1.20.1-00
systemctl daemon-reload
systemctl restart kubelet

# 4. uncordon
kubectl uncordon <MASTER_HOST>

# 5. check
kubectl get nodes
kubelet --version
kubectl version --short

클러스터 정보

  • kubectl cluster-info

jsonpath 확인방법

  • kubectl get node controlplane -o yaml | grep -C5 podCIDR
  • kubectl explain node.spec
  • k get node controlplane -o jsonpath='{.spec.podCIDR}'

1️⃣ kubectl get node 'name' -o yaml | grep -C5 'keyword'
2️⃣ kubectl explain 'resource'.'field'

grep 옵션 : A(after), B(before), C(앞뒤로)

profile
롱런하는 개발자!

0개의 댓글