CKA 명령어 정리

2026. 1. 15. 11:59·CKA

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
  • ★ 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)
  • ★ 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)
  • ★ 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 ./k8s
    • kustomization.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
'CKA' 카테고리의 다른 글
  • CKA 파일 경로 및 옵션 정리
  • CKA 명령어 시험
  • CKA 시험 대비 - Scheduling
  • Kustomize - 총 정리
5jyan5
5jyan5
  • 5jyan5
    jyan
    5jyan5
  • 전체
    오늘
    어제
    • 분류 전체보기 (242)
      • 김영한의 스프링 핵심 원리(기본편) (8)
      • 김영한의 스프링 핵심 원리 - 고급편 (11)
      • 김영한의 스프링 MVC 1편 (1)
      • 김영한의 스프링 DB 1편 (3)
      • 김영한의 스프링 MVC 2편 (3)
      • 김영한의 ORM 표준 JPA 프로그래밍(기본편) (9)
      • 김영한의 스프링 부트와 JPA 활용2 (2)
      • 김영한의 실전 자바 - 중급 1편 (1)
      • 김영한의 실전 자바 - 고급 1편 (9)
      • 김영한의 실전 자바 - 고급 2편 (9)
      • Readable Code: 읽기 좋은 코드를 작성.. (2)
      • 김영한의 실전 자바 - 고급 3편 (9)
      • CKA (118)
      • 개발 (37)
      • 경제 (4)
      • 리뷰 (1)
      • 정보 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      자바
      고급
      WAS
      페치 조인
      조회 성능 최적화
      김영한
      락
      jdk 동적 프록시
      빈 후처리기
      @discriminatorvalue
      @discriminatorcolumn
      @within
      프록시
      양방향 맵핑
      Thread
      단방향 맵핑
      typequery
      cglib
      log trace
      @args
      프록시 팩토리
      버퍼
      reentarantlock
      jpq
      gesingleresult
      requset scope
      hibernate5module
      Target
      JPQL
      스레드
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.2
    5jyan5
    CKA 명령어 정리
    상단으로

    티스토리툴바