1) 리소스 생성/적용(Declarative) & 출력 포맷
- ★
kubectl apply -f pod.yaml- YAML/JSON 매니페스트를 선언형(Declarative) 으로 적용합니다. 기존 리소스가 있으면 변경사항을 반영(패치)합니다.
- 시험에서는 “파일 수정 → apply → 결과 확인” 흐름이 기본입니다.
- 문서:
kubectl apply(Kubernetes)
- ★
kubectl delete -f pod.yaml(추가)- 파일에 정의된 리소스를 일괄 삭제합니다(시험에서 정리/롤백 대용으로 자주 씀).
- 문서:
kubectl delete
- ★
kubectl get <res> -o wide|yaml(추가)-o wide: 노드/IP 등 트러블슈팅에 필요한 컬럼을 추가로 봅니다.-o yaml: “문제에서 요구한 필드가 맞는지” 빠르게 검증할 때 가장 확실합니다.- 문서: kubectl 커맨드 레퍼런스 (Kubernetes)
- ★
kubectl diff -f pod.yaml(추가)- apply 전에 무슨 변경이 들어갈지 확인합니다(실수 방지).
- 문서:
kubectl diff(kubectl 생성 문서 트리 내) (Kubernetes)
2) Pod/Deployment 생성(Imperative) & 드라이런
- ★
kubectl run nginx --image=nginx- 빠르게 컨테이너를 띄우는 용도(대개 테스트 Pod).
- 시험에서 DNS/네트워크 확인용 임시 Pod 만들 때 자주 씁니다.
- 문서:
kubectl run(Kubernetes)
- ★
kubectl run nginx --image=nginx --dry-run=client -o yaml > nginx-pod.yaml- 실제 생성은 하지 않고(dry-run) YAML만 뽑아서 파일로 저장합니다.
- 시험에서 “빠르게 뼈대 생성 → 필요한 필드만 수정 → apply” 패턴이 매우 유용합니다.
- 문서:
kubectl run/ 출력 옵션 (Kubernetes)
- ★
kubectl create deployment --image=nginx nginx- nginx 이미지를 사용하는 Deployment를 생성합니다.
kubectl run대신 컨트롤러(Deployment) 가 필요한 상황에 사용합니다.- 문서:
kubectl create deployment(Kubernetes)
- ★
kubectl scale --replicas=6 -f rs-definition.yaml- ReplicaSet/Deployment 등 스케일 대상의 레플리카 수를 조정합니다.
- “현재 desired replicas 맞추기” 문제에 바로 대응 가능합니다.
- 문서:
kubectl scale(Kubernetes)
3) 롤아웃/배포 트러블슈팅(Deployment)
- ★
kubectl rollout status deployment api- 롤아웃이 완료될 때까지 상태를 추적합니다(Ready/available 확인).
- 시험에서 “업데이트 후 정상 반영 확인” 단계로 자주 요구됩니다.
- 문서:
kubectl rollout status
- ★
kubectl rollout history deployment/<deployment-name>- revision 히스토리(어떤 변경이 있었는지)를 확인합니다.
- “이전 revision으로 롤백” 문제에서 선행 확인으로 사용합니다.
- 문서:
kubectl rollout history
- ★
kubectl rollout undo deployment/<deployment-name> --to-revision=<n>- 특정 revision으로 롤백합니다.
--to-revision없으면 직전 revision으로 롤백합니다. - 문서:
kubectl rollout undo
- 특정 revision으로 롤백합니다.
- ★
kubectl rollout restart deployment/<deployment-name>(추가)- 이미지 태그는 그대로 두고도 Pod 재시작(재배포) 이 필요할 때 사용합니다.
- 문서:
kubectl rollout restart(Kubernetes)
4) Service / Endpoint / Ingress
- ★
kubectl expose deploy web --port=80 --target-port=8080- Deployment의 Pod들을 대상으로 Service를 생성합니다.
--port는 Service 포트,--target-port는 Pod(컨테이너) 포트입니다.- 문서:
kubectl expose(Kubernetes)
- ★
kubectl expose deploy web --type=NodePort --port=80 --target-port=8080- NodePort Service를 생성해 노드의 특정 포트로 외부 접근이 가능하게 합니다(학습/시험 환경에서 자주 등장).
- 문서: Service 타입 (Kubernetes)
- ★
kubectl create service clusterip redis --tcp=6379:6379 --dry-run=client -o yaml- 커맨드로 Service YAML을 빠르게 생성합니다(시험에서 속도↑).
--tcp=서비스포트:타겟포트형식입니다.- 문서:
kubectl create service clusterip(Kubernetes)
kubectl get endpoints- Service가 가리키는 실제 엔드포인트 목록(구 Endpoints API)을 봅니다.
- 최신 환경에서는 EndpointSlice가 주로 사용되며, Endpoints는 점진적으로 대체되는 흐름입니다.
- 문서: Service / Endpoints/EndpointSlice (Kubernetes)
- ★
kubectl get endpointslices- Service의 백엔드 엔드포인트를 EndpointSlice 단위로 확인합니다(대규모 확장에 유리).
- 문서: EndpointSlice (Kubernetes)
- ★
kubectl create ingress ingress-test --class=nginx --rule="wear.my-online-store.com/wear*=wear-service:80"- Ingress 리소스를 커맨드로 생성합니다(규칙 빠르게 만들기).
- 시험에서는 IngressClass/컨트롤러가 무엇인지가 전제일 때가 많습니다.
- 문서:
kubectl create ingress/ Ingress 개념 (Kubernetes)
5) Namespace & Context
- ★
kubectl create namespace dev- 네임스페이스를 생성합니다.
- 시험에서 “리소스는 dev 네임스페이스에 만들 것” 같은 조건이 흔합니다.
- 문서:
kubectl create namespace(Kubernetes)
- ★
kubectl config set-context --current --namespace=dev- 현재 context의 기본 namespace를 dev로 바꿉니다(이후
-n생략 가능). - 시험에서 실수로 default에 만들지 않도록 매우 중요합니다.
- 문서:
kubectl config set-context(Kubernetes)
- 현재 context의 기본 namespace를 dev로 바꿉니다(이후
- ★
kubectl config view- 현재 로드되는 kubeconfig 내용(클러스터/유저/컨텍스트)을 확인합니다.
- 문서:
kubectl config(Kubernetes)
kubens <namespace>- kubectx/kubens 플러그인으로 namespace를 전환합니다(편의 도구).
- CKA 필수는 아니지만 로컬 연습 시 생산성에 도움됩니다.
- 문서: kubectx/kubens (AWS Documentation)
6) 조회/탐색(리소스/스키마)
- ★
kubectl get pods -A/kubectl get pods --all-namespaces- 전체 네임스페이스의 Pod를 확인합니다(문제에서 “클러스터 전체” 조건 자주 등장).
- 문서: Troubleshooting Clusters 예시 (Kubernetes)
- ★
kubectl api-resources- 클러스터에서 사용 가능한 리소스 종류(단축명, API 그룹 등)를 확인합니다.
- CRD가 있을 때 “리소스 이름이 뭐였지?”를 해결합니다.
- 문서:
kubectl api-resources(Kubernetes)
- ★
kubectl explain pod/kubectl explain pod.spec/kubectl explain pod --recursive- 오브젝트 스키마(필드 의미/타입)를 로컬에서 바로 조회합니다.
- 시험에서 가장 빠른 “필드명 기억 안 날 때” 해결책입니다.
- 문서:
kubectl explain(Kubernetes)
7) 스케줄링/노드 운영(Taints/Labels/Priority)
- ★
kubectl taint nodes node1 app=blue:NoSchedule- 해당 노드에 toleration 없는 Pod가 스케줄되지 않게 합니다.
- 제거는 마지막에
-를 붙입니다:... app=blue:NoSchedule- - 문서: Taints and Tolerations /
kubectl taint(GitHub)
- ★
kubectl label node node1 size=large- 노드에 라벨을 붙여 nodeSelector/affinity로 스케줄링 제어에 사용합니다.
- 이미 값이 있으면
--overwrite가 필요할 수 있습니다. - 문서: Labels/Selectors /
kubectl label(GitHub)
kubectl get priorityclass- 우선순위 클래스 목록을 확인합니다(프리엠션 관련).
- 문서: Pod Priority & Preemption (Kubernetes)
8) 로그/리소스/디버깅(트러블슈팅 핵심)
- ★
kubectl logs multi-container-pod -c event-simulator- 멀티 컨테이너 Pod에서 특정 컨테이너 로그를 봅니다(
-c필수). - 문서:
kubectl logs(Kubernetes)
- 멀티 컨테이너 Pod에서 특정 컨테이너 로그를 봅니다(
- ★
kubectl logs <pod> -c <container> --previous- 재시작된(크래시 난) 이전 컨테이너 로그를 봅니다(CrashLoopBackOff에서 중요).
- 문서:
kubectl logs(Kubernetes)
- ★
kubectl logs <pod> --tail=100- 마지막 N줄만 빠르게 확인합니다(로그가 너무 길 때).
- 문서:
kubectl logs(Kubernetes)
- ★
kubectl top pod- Pod 리소스 사용량을 확인합니다(메트릭 파이프라인 필요: Metrics Server 등).
- 문서:
kubectl top(Kubernetes)
- ★
kubectl describe pod <pod>(추가)- 이벤트/스케줄링/볼륨마운트 실패 원인 등 “왜 안 뜨는지”의 1차 정답입니다.
- 문서:
kubectl describe(GitHub)
- ★
kubectl get events -A --sort-by=.lastTimestamp(추가)- 최근 이벤트를 시간순으로 확인해 장애 원인을 좁힙니다.
- 문서:
kubectl get events(OneUptime)
- ★
kubectl exec -it <pod> -- sh(추가)- 실행 중인 컨테이너에 들어가 네트워크/DNS/파일 등을 직접 확인합니다.
- 문서:
kubectl exec(GitHub)
kubectl port-forward svc/<svc> 8080:80(추가)- 클러스터 내부 서비스에 로컬 포트로 터널링(디버그/검증).
- 문서:
kubectl port-forward(GitHub)
crictl ps / crictl logs <id>(추가, 노드 레벨)- kubelet/컨테이너 런타임 레벨에서 상태를 직접 확인합니다(노드 장애 디버깅).
- 문서: crictl 디버깅 (Kubernetes)
9) ConfigMap / Secret / base64
- ★
kubectl create configmap appconfig --from-literal=APP_COLOR=blue --from-literal=APP_MODE=prod- 리터럴 키/값으로 ConfigMap을 만듭니다.
- 시험에서는 “env 주입/볼륨 마운트” 둘 다 나올 수 있습니다.
- 문서:
kubectl create configmap(Kubernetes)
- ★
kubectl create secret generic app-secret --from-literal=DB_HOST=mysql --from-literal=DB_USER=root --from-literal=DB_PASSWORD=passw0rd- generic Secret 생성(문자열/파일 기반 모두 가능).
- Secret의
data는 base64 인코딩이므로 “암호화”와는 다릅니다(시험 함정 포인트). - 문서:
kubectl create secret generic/ Secret 관리 (Kubernetes)
echo -n 'passw0rd' | base64/echo 'bXlzcWw=' | base64 --decode- Secret 매니페스트를 직접 만들 때 base64 인코딩/디코딩에 사용합니다.
-n은 개행 제거(원치 않는 개행이 base64에 포함되는 실수 방지).- 문서: Secret 관리 / base64 man page (Kubernetes)
- ★
kubectl create secret docker-registry regcred --docker-server=... --docker-username=... --docker-password=... --docker-email=... -n default- Private registry pull을 위한 imagePullSecret을 생성합니다.
- 문서:
kubectl create secret docker-registry(Kubernetes)
10) 인증/인가(RBAC) & CSR
- ★
kubectl auth whoami- 현재 kubeconfig 기준 “내가 누구로 인증되는지” 확인합니다.
- 문서:
kubectl auth whoami(Kubernetes)
- ★
kubectl auth can-i list pods -n default --as=system:serviceaccount:default:dashboard-sa- 특정 사용자/SA 관점에서 권한을 시뮬레이션합니다(시험에서 RBAC 검증에 핵심).
- 문서:
kubectl auth can-i(Kubernetes)
- ★
kubectl create serviceaccount dashboard-sa -n default- 서비스어카운트를 생성합니다.
- 문서:
kubectl create serviceaccount(Kubernetes)
- ★
kubectl -n default create role developer --resource=pods --verb=get,list,watch- 네임스페이스 범위 Role을 생성합니다.
- 문서: RBAC /
kubectl create role(GitHub)
- ★
kubectl -n default create rolebinding dev-user-to-developer --role=developer --user=dev-user- Role과 유저를 바인딩합니다(권한 부여).
- 문서: RBAC /
kubectl create rolebinding(GitHub)
- ★
kubectl get csr- CSR 오브젝트 목록을 확인합니다(승인 대기 등).
- 문서: CSR 개념 (Kubernetes)
- ★
kubectl certificate approve jane-csr- CSR을 승인합니다(승인 후 인증서가 발급/반영).
- 문서:
kubectl certificate approve(Kubernetes)
11) 오토스케일링(HPA/VPA)
- ★
kubectl autoscale deployment myapp --min=1 --max=10 --cpu-percent=50- HPA를 생성합니다(메트릭 기반으로 레플리카 자동 조정).
- 문서:
kubectl autoscale/ HPA (Kubernetes)
- ★
kubectl get hpa/kubectl delete hpa myapp- HPA 목록 확인/삭제. 삭제하면 자동 스케일이 멈춥니다.
- 문서: HPA (Kubernetes)
kubectl describe vpa myapp-vpa- VPA는 리소스 request/limit 권고/조정에 사용됩니다(클러스터에 VPA가 설치돼 있어야 함).
- 문서: VPA (Kubernetes)
12) 노드 유지보수(Cordon/Drain)
- ★
kubectl cordon <node-name>- 해당 노드에 새 Pod 스케줄을 막습니다(기존 Pod는 유지).
- 문서:
kubectl cordon(Kubernetes)
- ★
kubectl uncordon <node-name>- cordon 해제(스케줄 재개).
- 문서:
kubectl uncordon(Kubernetes)
- ★
kubectl drain <node-name> --ignore-daemonsets- 노드를 비우기 위해 Pod를 축출(evict)합니다(유지보수 표준 절차).
- 필요 시
--delete-emptydir-data도 함께 고려합니다(문제 조건에 따라). - 문서:
kubectl drain(Kubernetes)
13) 클러스터 설치/업그레이드(kubeadm + 패키지)
cat /etc/*release*- OS 배포판/버전 확인(패키지 설치 트러블슈팅용).
- (K8s 공식 문서 외: 일반 리눅스)
- ★
kubectl version --short(추가)- 클라이언트/서버(클러스터) 버전을 명확히 확인합니다.
- 문서:
kubectl version(Kubernetes)
- ★
kubeadm join ...- 워커 노드를 기존 클러스터에 조인합니다(토큰/CA 해시 필요).
- 문서:
kubeadm join/ 노드 추가 (Kubernetes)
sudo apt-get update/apt-cache madison kubeadm/sudo apt-get install -y kubeadm=<버전>- 특정 버전으로 kubeadm 설치/고정에 사용합니다(업그레이드 실습에서 중요).
- 문서: Installing kubeadm (Kubernetes)
- ★
kubeadm upgrade plan/ ★kubeadm upgrade apply v1.28.0- 업그레이드 가능 버전/사전조건 확인 후 컨트롤 플레인 업그레이드 적용.
- 마이너 버전 스킵은 비권장/비지원(문제에서 꼬일 수 있음).
- 문서: kubeadm 업그레이드 (Kubernetes)
sudo systemctl daemon-reload/sudo systemctl restart kubelet- 패키지 변경 후 kubelet 재기동이 필요할 때 사용합니다.
- 문서(간접): kubeadm 업그레이드/설치 흐름 (Kubernetes)
14) kubeadm 인증서 관리
- ★
kubeadm certs check-expiration- kubeadm이 관리하는 PKI 인증서 만료를 점검합니다.
- 문서: kubeadm certs (Kubernetes)
- ★
kubeadm certs renew all- kubeadm 관리 인증서를 일괄 갱신합니다.
- 문서: Certificate Management with kubeadm (Kubernetes)
kubeadm certs renew apiserver/kubeadm certs renew apiserver-etcd-client- 특정 인증서만 선택 갱신합니다(문제에서 특정 인증서만 만료된 상황).
- 문서: kubeadm certs (Kubernetes)
15) etcd 백업/복원(매우 중요, 최신 변경 포함)
- ★
ETCDCTL_API=3 etcdctl --endpoints=... --cacert=... --cert=... --key=... snapshot save <backup-file>- etcd DB를 스냅샷 파일로 백업합니다. TLS 설정은 kubeadm 기본 구성에서 거의 필수입니다.
- 문서: Kubernetes etcd 운영/백업 (Kubernetes)
- ★
etcdutl --data-dir <dir> snapshot restore snapshot.db- 스냅샷을 새 데이터 디렉터리로 복원합니다(오프라인 복원).
- 중요: etcd 최신 버전 흐름에서
etcdctl snapshot restore는 제거/비권장이고etcdutl사용이 권장됩니다. - 문서: etcd 복구(etcdutl) / etcd 변경 공지 (etcd)
16) Kustomize (kubectl -k / standalone)
- ★
kubectl apply -k ./k8skustomization.yaml디렉터리를 기준으로 빌드된 리소스를 적용합니다.- 시험에서 overlay/base 구조가 나오면 이게 정답 커맨드인 경우가 많습니다.
- 문서: Kustomize로 관리 / apply -k (Kubernetes)
kubectl delete -k ./k8s- 동일한 kustomize 구성을 기준으로 삭제합니다.
- 문서: Kustomize로 관리 (Kubernetes)
kubectl kustomize <dir>(추가)- apply 없이 렌더링 결과만 출력합니다(검증/디버그).
- 문서:
kubectl kustomize(Kubernetes)
kustomize build ./k8s | less- standalone kustomize로 렌더링 결과를 확인합니다.
- 문서: kustomize.io (Kustomize)
17) Helm (CKA 핵심 범위는 아니지만, 포함된 목록 정리)
helm repo add .../helm repo update/helm search repo ...- 차트 저장소 추가/갱신/검색.
- 문서: Helm Commands (GitHub)
helm install .../helm upgrade --install .../helm rollback .../helm uninstall ...- 릴리즈 설치/업그레이드(없으면 설치)/롤백/삭제.
- 문서: Helm Commands (GitHub)
helm show values ... > values.yaml/helm get values .../helm history ...- values 확인/추출 및 릴리즈 이력 확인.
- 문서: Helm Commands (GitHub)
helm template .../helm pull ... --untar- 렌더링 결과 확인/차트 내려받아 로컬 설치.
- 문서: Helm Commands (GitHub)
18) 리눅스 네트워킹(쿠버네티스 디버깅 보조)
ip link/ip addr/ip route/ip link set eth0 up/ip addr add .../ip route add ...- CNI/라우팅 문제에서 노드의 인터페이스/주소/라우팅 테이블 확인에 사용합니다.
- 문서(리눅스): iproute2 man page (manpages.debian.org)
19) Worker Node 장애 트러블슈팅(노드 NotReady) — CKA 실전 명령어 셋
`kubectl get nodes -o wide` / `kubectl describe node node01`
컨트롤플레인에서 노드 상태를 1차 진단. Ready/NotReady, 내부 IP, Roles, Version 확인. `describe`에서 **Conditions(Ready), Taints, Events**를 보고 “kubelet 하트비트/등록 문제인지”, “CNI/네트워크 문제인지” 방향을 잡는다.sudo systemctl status kubelet
워커 노드에서 kubelet 서비스 상태 확인. inactive, activating, failed면 노드 NotReady의 1순위 원인 후보.
sudo systemctl start kubelet / sudo systemctl restart kubelet
kubelet이 내려가 있거나 설정 수정 후 반영이 필요할 때 즉시 복구/재기동. (시험에서는 “일단 살리고 상태 확인”이 빠른 경우가 많음)
sudo journalctl -u kubelet -n 200 --no-pager
kubelet 로그로 원인 확정. 자주 나오는 패턴:
NetworkPluginNotReady,cni plugin not initialized→ CNI 설정/바이너리/경로 문제 가능unable to register node,dial tcp ...:6443 connection refused→ API 서버 주소/포트, kubelet kubeconfig 문제 가능x509,certificate,unknown authority→ CA/클라이언트 인증서 경로 문제 가능
sudo vi /var/lib/kubelet/config.yaml
kubelet “런타임 설정”에서 자주 깨지는 지점 수정. 시험/랩에서 자주 보는 키워드:
clientCAFile경로 오타(예:/etc/kubernetes/pki/ca.crt)resolvConf경로(특히 systemd-resolved 환경에서 DNS 이슈 루프/해결에 영향)- 그 외 kubelet이 참조하는 파일 경로/옵션이 환경과 불일치하는 케이스
수정 후에는 보통systemctl restart kubelet로 반영.
sudo vi /etc/kubernetes/kubelet.conf
kubelet이 API 서버로 붙을 때 사용하는 kubeconfig. 자주 터지는 지점:
server: https://<controlplane>:6443포트/호스트 오타- 인증서/토큰 참조 경로 불일치
수정 후systemctl restart kubelet.
kubectl get nodes
컨트롤플레인에서 최종 검증. NotReady → Ready 전환 확인. 필요하면 -o wide로 노드 IP/버전까지 함께 확인.
(옵션) 진행 중 상태 모니터링(시험에서 유용)
watch -n1 'kubectl get nodes -o wide''CKA' 카테고리의 다른 글
| CKA 파일 경로 및 옵션 정리 (0) | 2026.01.15 |
|---|---|
| CKA 명령어 시험 (0) | 2026.01.15 |
| CKA 시험 대비 - Scheduling (0) | 2026.01.09 |
| Kustomize - 총 정리 (0) | 2026.01.08 |
| Kustomize - Components (0) | 2026.01.08 |