CKA — Kubernetes Administrator
Investigating and Operating a Cluster
한국어 원문으로 표시합니다.
목표
클러스터에 처음 들어갔을 때 하는 일 일곱 가지를 손에 익힙니다. 조사, 네임스페이스, 라벨과 애너테이션, 컨텍스트 전환, 노드 라벨링, kubectl explain, dry-run 매니페스트 생성입니다.
왜 중요한가
CKA 는 120분에 17문제입니다. 문제당 7분입니다. 매니페스트를 처음부터 손으로 쓰면 시간이 모자랍니다. 그래서 --dry-run=client -o yaml 로 뼈대를 뽑고 필요한 필드만 고치는 방식이 사실상 표준 전략입니다.
kubectl explain 은 그 다음 반쪽입니다. 시험장에서 볼 수 있는 문서는 쿠버네티스 공식 문서뿐인데, 필드 하나의 정확한 철자와 위치를 확인하는 데는 explain 이 훨씬 빠릅니다. 라벨과 애너테이션의 차이도 같은 맥락입니다. 라벨은 셀렉터가 고를 수 있는 식별자라 서비스와 컨트롤러가 참조하고, 애너테이션은 고를 수 없는 부가 정보라 도구들이 메타데이터를 실어 나릅니다. 둘을 바꿔 쓰면 조용히 아무것도 연결되지 않습니다.
단계
- 네임스페이스
cka-basics를 만들고 라벨env=lab을 붙인다. - 클러스터의 모든 노드 이름을 한 줄에 하나씩
/root/cka-basics/nodes.txt에 저장한다. 파일에는 이름만 있어야 하고 헤더나node/접두어가 있으면 안 된다. cka-basics에 ConfigMapapp-meta를 만든다. 데이터는env=lab, 라벨은tier=backend, 애너테이션은owner=cka-student.- 현재 쓰고 있는 cluster 와 user 를 그대로 재사용하면서 기본 네임스페이스가
cka-basics인 컨텍스트cka-basics-ctx를 만들고, 그 컨텍스트로 전환한다. - 노드
lab-node-1에 라벨disktype=ssd와topology.kubernetes.io/zone=rack-a, 애너테이션owner=cka-student를 붙인다. - 파드 톨러레이션의
effect필드 설명을kubectl explain으로 뽑아/root/cka-basics/explain.txt에 저장한다. - dry-run 으로 Deployment
web(이미지nginx:1.27, 레플리카 3) 매니페스트를 만들어/root/cka-basics/web.yaml에 저장한다. 이 단계에서는 아직 적용하지 않는다. - 그 매니페스트를
cka-basics에 적용하고, 디플로이먼트 오브젝트에 라벨tier=backend를 붙인 뒤 3/3 Ready 를 확인한다.
참고
kubectl get nodes -o custom-columns=NAME:.metadata.name --no-headers처럼 헤더를 빼는 옵션이 있습니다.- 컨텍스트는
kubectl config set-context <이름> --cluster=... --user=... --namespace=...로 만들고use-context로 전환합니다. - 흔한 실수 1: 라벨을 파드 템플릿에만 붙이고 디플로이먼트 자체에는 안 붙이는 것. 8단계는 디플로이먼트 오브젝트의 라벨을 봅니다.
- 흔한 실수 2: 컨텍스트를 만들 때 cluster 나 user 이름을 새로 지어내는 것. 기존에 있는 이름을 그대로 써야 접속이 유지됩니다.
네임스페이스 만들고 라벨 붙이기
네임스페이스 cka-basics 를 만들고 라벨 env=lab 을 붙인다.
네임스페이스를 만든 뒤 라벨을 따로 붙여도 되고, 처음부터 매니페스트에 넣어도 됩니다. 라벨은 metadata.labels 아래에 들어갑니다.
노드 목록 파일로 뽑기
클러스터의 모든 노드 이름을 한 줄에 하나씩 /root/cka-basics/nodes.txt 에 저장한다. 파일에는 이름만 있어야 하고 헤더나 node/ 접두어가 있으면 안 된다.
파일에는 노드 이름만 한 줄에 하나씩 들어가야 합니다. 출력에서 헤더나 node/ 접두어를 걷어내는 방법을 생각해 보세요. jsonpath 의 range 나 -o custom-columns 가 도움이 됩니다.
라벨과 애너테이션 구분해서 붙이기
cka-basics 에 ConfigMap app-meta 를 만든다. 데이터는 env=lab, 라벨은 tier=backend, 애너테이션은 owner=cka-student.
라벨은 셀렉터로 고를 수 있는 식별자, 애너테이션은 고를 수 없는 부가 정보입니다. 저장 위치가 다릅니다 (metadata.labels 와 metadata.annotations).
kubeconfig 컨텍스트 만들고 전환하기
현재 쓰고 있는 cluster 와 user 를 그대로 재사용하면서 기본 네임스페이스가 cka-basics 인 컨텍스트 cka-basics-ctx 를 만들고, 그 컨텍스트로 전환한다.
컨텍스트는 cluster + user + namespace 세 쌍입니다. 새 cluster 나 user 를 만들 필요 없이 기존 이름을 그대로 재사용하세요. kubectl config get-clusters 와 get-users 로 이름을 먼저 확인합니다.
노드에 라벨과 애너테이션 붙이기
노드 lab-node-1 에 라벨 disktype=ssd 와 topology.kubernetes.io/zone=rack-a, 애너테이션 owner=cka-student 를 붙인다.
노드도 오브젝트라 label/annotate 명령이 그대로 통합니다. 슬래시가 들어간 키는 그대로 써도 됩니다.
kubectl explain 으로 필드 설명 뽑기
파드 톨러레이션의 effect 필드 설명을 kubectl explain 으로 뽑아 /root/cka-basics/explain.txt 에 저장한다.
explain 은 점 표기법으로 중첩 필드를 따라갑니다. 파드 스펙의 톨러레이션 배열 안에 있는 필드를 지목해 보세요.
dry-run 으로 매니페스트 만들기
dry-run 으로 Deployment web (이미지 nginx:1.27, 레플리카 3) 매니페스트를 만들어 /root/cka-basics/web.yaml 에 저장한다. 이 단계에서는 아직 적용하지 않는다.
kubectl create 계열 명령에 --dry-run=client -o yaml 을 붙이면 API 를 건드리지 않고 YAML 만 나옵니다. 레플리카 수는 create 옵션으로 줄 수 있습니다.
적용하고 라벨까지 마무리하기
그 매니페스트를 cka-basics 에 적용하고, 디플로이먼트 오브젝트에 라벨 tier=backend 를 붙인 뒤 3/3 Ready 를 확인한다.
앞 단계에서 만든 파일을 그대로 적용합니다. 라벨은 파드 템플릿이 아니라 디플로이먼트 오브젝트 자체에 붙여야 합니다. 파드가 Ready 가 될 때까지 잠시 걸립니다.