Files
document-haness/.agents/skills/writing-practitioner-guides/references/kubernetes.md
T
DongHyeonkaandClaude Opus 5 ab59130196 chore: 이전 세션이 남긴 변경을 커밋한다
이번 파이프라인 작업과 무관하게 작업 트리에 남아 있던 것을 그대로 올린다.
사용자가 「전부 커밋」으로 정했고, 이번 작업과 섞이지 않게 커밋만 나눴다.

대부분은 clean-architecture-backend-template 의 그림 정본 재배치다 —
final/assets/diagrams/<이름>/ 에 있던 것이 CLAUDE.md 가 적은 배치인
final/assets/<이름>/ 로 옮겨졌고 .techviz/<이름>/ 이 함께 들어왔다.
삽입 줄의 대부분(3.15M)이 그 .techviz context.json 이다.

그 밖에 ca-tmpl·document-haness 의 정리, .claude/agents/ 열한 개,
writing-practitioner-guides 스킬, .playwright-mcp 세션 산출물,
scripts/check-ssot-facts.py 와 그 시험이 들어 있다.

이 커밋의 내용은 내가 만든 것이 아니라 이전 세션이 남긴 것이고 검증하지 않았다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 11:02:02 +09:00

2.6 KiB

Kubernetes — what to reach for first

Order matters. Widen first, then narrow.

무엇이 있나

kubectl get pods                    # 이름 · 상태 · 재시작 횟수
kubectl get pods -o wide            # + 노드 · 파드 IP
kubectl get all                     # 워크로드 계열만. Secret·PVC·Ingress 는 안 나온다
kubectl get secret,configmap,pvc,ingress

왜 이 파드가 이런가

kubectl describe pod <pod>          # 이벤트가 여기 붙는다 — 로그보다 먼저 본다
kubectl logs <pod>
kubectl logs <pod> --previous       # CrashLoop 이면 죽은 이유는 여기 있다
kubectl logs <pod> -c <container>   # 컨테이너가 여럿일 때
kubectl events --for pod/<pod>
kubectl get events --sort-by=.lastTimestamp | tail -20

사슬을 따라간다

kubectl get deploy,rs,pod -l app=<label>

Deployment 는 파드를 직접 만들지 않는다. ReplicaSet 을 만들고 그것이 파드를 만든다. RS 가 여러 개 남아 있는 것은 정상이며(배포 이력) 활성인 것만 0 이 아니다.

StatefulSet 은 RS 를 쓰지 않고 파드를 직접 만든다 — 이름이 고정이라 Terminating 이 안 풀리면 대체 파드가 생기지 않는다.

Service 가 파드를 잡고 있나

kubectl describe svc <svc> | grep -i endpoints
kubectl get endpointslice -l kubernetes.io/service-name=<svc>

kubectl get endpoints 는 v1.33+ 에서 deprecated 다.

비어 있으면 셀렉터와 라벨이 안 맞거나 readiness 미통과다.

kubectl get svc <svc> -o jsonpath='{.spec.selector}'
kubectl get pods --show-labels

Secret 이 실제로 들어갔나 — 값은 찍지 않는다

kubectl get secret <s> -o jsonpath='{.data}' | tr ',' '\n' | grep -o '"[A-Z_]*"'   # 키 이름만
kubectl get secret <s> -o jsonpath='{.data.<KEY>}' | base64 -d | wc -c             # 길이만
kubectl exec <pod> -- sh -c 'echo ${#MY_ENV}'                                      # 파드 안 주입 확인

적용과 대기

kubectl apply -f <file>
kubectl rollout status deploy/<name> --timeout=180s      # 끝날 때까지 블록한다
kubectl rollout undo deploy/<name>

안에서 볼 때

kubectl exec -it <pod> -- sh
kubectl port-forward svc/<svc> 8080:80
kubectl debug -it <pod> --image=busybox --target=<container>   # 최소 이미지에 도구가 없을 때

최소 이미지에는 curlwget 도 없다. Keycloak 공식 이미지가 그렇다 (exit 127). 밖에서 물어보거나 임시 파드를 띄운다.

kubectl run tmp --rm -it --restart=Never --image=curlimages/curl:8.11.1 -- \
  curl -s http://<podIP>:9000/metrics