Admission Webhook
API 요청이 인증·인가(RBAC)를 통과한 뒤 etcd에 저장되기 전 마지막으로 거치는 관문. Mutating Webhook(객체 수정 가능, 검증보다 먼저 실행)과 Validating Webhook(승인/거부만, 수정 불가)으로 나뉜다.
Admission Webhook — API 서버가 저장하기 직전 마지막 관문
· Kubernetes 공식문서 Admission Control in Kubernetes
backoffLimit / activeDeadlineSeconds
Job의 두 가지 실패 제한 축. backoffLimit(기본 6)은 실패로 간주되기 전 재시도 허용 횟수, activeDeadlineSeconds는 재시도 횟수와 무관하게 Job 시작 후 경과 시간이 이 값을 넘으면 무조건 강제 종료하는 절대 타임아웃이다.
Job/CronJob — '계속 떠 있기'가 아니라 '끝까지 완료하기'가 목표인 워크로드
· Kubernetes 공식문서 Jobs
ConfigMap/Secret 볼륨 재투영
볼륨으로 마운트된 ConfigMap·Secret의 원본이 바뀌면, kubelet이 주기적 동기화(보통 30~90초 내)로 마운트된 파일을 자동 갱신하는 동작. 환경변수 주입과 달리 컨테이너 재시작이 필요 없다.
ConfigMap/Secret 주입 방식 — env는 재시작해야, 볼륨은 알아서 갱신된다
· Kubernetes 공식문서 Secrets
DaemonSet
조건에 맞는 클러스터의 모든(또는 일부) 노드에 Pod를 정확히 하나씩 배치하는 워크로드 컨트롤러. replica 수가 아니라 노드 개수가 배정 기준이며, 새 노드가 추가되면 자동으로 그 노드에도 Pod가 뜬다.
DaemonSet — 모든 노드에 정확히 한 벌씩
· Kubernetes 공식문서 DaemonSet
Ephemeral Container
이미 실행 중인 Pod에 사용자가 요청해 임시로 주입하는 디버깅용 컨테이너(1.25부터 stable). 대상 컨테이너와 네트워크·프로세스 네임스페이스를 공유하며, distroless처럼 exec으로 들어갈 셸이 없는 이미지를 조사할 때 특히 유용하다.
Ephemeral Containers — 셸도 없는 이미지에 디버깅 도구를 몰래 끼워 넣는다
· Kubernetes 공식문서 Ephemeral Containers
etcd
Kubernetes 클러스터의 모든 API 서버 데이터(리소스 상태, 설정 등)를 저장하는 일관되고 고가용한 key-value 저장소. 클러스터의 '진실의 원천(source of truth)'이다.
Control Plane과 Node — 클러스터를 이루는 두 축
· Kubernetes 공식문서 Components of Kubernetes
HorizontalPodAutoscaler(HPA)
metrics-server가 수집한 CPU·메모리 사용률(k8s-learn-05의 requests 대비 백분율)을 근거로 Deployment 등의 replica 수를 자동으로 늘리고 줄이는 컨트롤러.
HorizontalPodAutoscaler(HPA) — requests 대비 사용률로 replica 수를 조절한다
· GKE 공식 문서 Horizontal Pod autoscaling
kubectl logs --previous
현재 실행 중인 컨테이너가 아니라, 직전에 크래시해 종료된 컨테이너 인스턴스의 로그를 조회하는 옵션. CrashLoopBackOff 진단에서 실제 크래시 원인을 담은 로그를 얻는 첫 단계다.
CrashLoopBackOff 진단 절차 — 순서대로 좁혀나가기
· GKE 공식 문서 Troubleshoot CrashLoopBackOff events, Komodor How to Fix CrashLoopBackOff
maxSurge / maxUnavailable
Deployment 롤링 업데이트 중 허용되는 초과 Pod 수(maxSurge)와 동시에 사용 불가능해도 되는 Pod 수(maxUnavailable)를 지정하는 설정. 무중단 배포의 속도·여유분을 조절한다.
Deployment와 ReplicaSet — 선언적으로 Pod를 관리한다
· Kubernetes 공식문서 Workloads — Deployments
Native Sidecar Container
initContainers 목록에서 restartPolicy: Always로 지정된 컨테이너. 다른 init 컨테이너와 같은 순서로 시작하지만 완료를 기다리지 않고, Pod의 나머지 생애주기 동안 함께 실행되며 재시작될 수 있다(1.29 베타 기본활성화, 1.33 stable).
Native Sidecar Containers — initContainers에 restartPolicy: Always를 붙인다
· KEP-753: Sidecar Containers
NetworkPolicy default-allow → whitelist 전환
NetworkPolicy가 적용 안 된 Pod는 모든 트래픽이 기본 허용되지만, ingress(또는 egress) 타입 정책이 하나라도 그 Pod에 적용되면 그 방향의 트래픽은 정책이 명시적으로 허용한 것만 통과하는 화이트리스트 방식으로 바뀐다.
NetworkPolicy — 기본은 전부 허용, 정책이 붙는 순간부터 화이트리스트
· Calico/Kubernetes 커뮤니티 NetworkPolicy 가이드
persistentVolumeClaimRetentionPolicy
StatefulSet의 PVC를 스케일다운 시(whenScaled)와 StatefulSet 삭제 시(whenDeleted) 각각 보존(Retain, 기본값)할지 삭제(Delete)할지 지정하는 필드. 두 값은 서로 독립적으로 설정할 수 있다.
StatefulSet PVC 보존 정책 — 기본값은 '스케일다운해도 안 지운다'
· Kubernetes 공식 블로그 StatefulSet PVC Auto-Deletion (beta)
Pod Security Standards
Pod의 SecurityContext 등에 요구사항을 두는 세 격리 수준(privileged/baseline/restricted). 내장 Pod Security Admission 컨트롤러가 네임스페이스 라벨을 기준으로 이 수준을 강제한다.
Pod Security Standards — 네임스페이스 라벨로 Pod 보안 수준을 강제한다
· Kubernetes 공식문서 Pod Security Admission
PodDisruptionBudget(PDB)
kubectl drain 등 Eviction API를 통한 자발적 축출에 대해 '이 밑으로는 가용 Pod 수가 줄면 안 된다'는 하한선을 설정하는 리소스. minAvailable 또는 maxUnavailable 중 하나로 지정하며, 노드 하드웨어 장애 같은 비자발적 장애는 막지 못한다.
PodDisruptionBudget — 자발적 축출에 '이 밑으로는 안 된다' 선을 긋는다
· Kubernetes 공식문서 Pod Disruption Budgets
podManagementPolicy
StatefulSet의 Pod들을 순서대로 생성·종료할지(OrderedReady, 기본값), 아니면 한꺼번에 병렬로 처리할지(Parallel)를 지정하는 필드.
podManagementPolicy — 순서를 지킬지, 속도를 낼지
· Kubernetes 공식문서 StatefulSets
QoS 클래스(Guaranteed/Burstable/BestEffort)
Pod의 requests/limits 설정 상태로부터 Kubernetes가 자동 계산하는 서비스 품질 등급. 노드 자원 압박 시 축출 우선순위를 결정하는 기준이 된다.
리소스 요청/제한과 QoS — 압박 상황에서 누가 먼저 쫓겨나는가
· Kubernetes 공식문서 Pod Quality of Service Classes
readinessProbe와 Service 엔드포인트
readinessProbe가 실패한 Pod는 컨테이너 재시작 없이 Service의 트래픽 라우팅 대상(엔드포인트) 목록에서만 제외된다. 프로브가 다시 성공하면 자동으로 엔드포인트 목록에 복귀한다.
Liveness/Readiness/Startup Probe — 세 헬스체크의 서로 다른 결과
· Kubernetes 공식문서 Pod Lifecycle — Container probes
Role vs ClusterRole
Role은 특정 네임스페이스에 속해 그 안의 리소스 권한만 정의하는 namespaced 리소스, ClusterRole은 네임스페이스에 속하지 않고 클러스터 스코프 리소스나 여러 네임스페이스에 걸친 권한을 정의할 수 있는 non-namespaced 리소스다.
RBAC — 누가 K8s API 자체에 무엇을 할 수 있는가
· Kubernetes 공식문서 Using RBAC Authorization
Taint / Toleration
taint는 노드가 스스로에게 붙여 '이 taint를 감수하지 않는 Pod는 오지 마라'고 밀어내는 표식이고, toleration은 Pod가 특정 taint를 감수하겠다고 선언하는 허용이다. 서로 안 맞으면 Pod는 그 노드에 스케줄되지 못한다.
Pod가 Pending에서 안 움직일 때 — 스케줄링 실패 원인과 진단
· 웹 리서치 종합(Komodor, Datadog, Kubernetes 공식문서 taint-and-toleration)
terminationGracePeriodSeconds
Pod 종료 시 SIGTERM 전송부터 preStop 훅 실행까지를 포함해 컨테이너가 정상 종료할 수 있도록 주어지는 전체 유예 시간(기본 30초). 이 시간이 지나면 강제 종료(SIGKILL)된다.
Graceful Termination — SIGTERM과 트래픽 제거는 동시에 일어나지 않는다
· Kubernetes 공식문서 Pod Lifecycle — Termination of Pods
Topology Spread Constraints
topologyKey로 묶은 토폴로지 도메인(노드·가용영역 등)에 걸쳐 Pod를 얼마나 균등하게(maxSkew) 분산시킬지 지정하는 스케줄링 제약. whenUnsatisfiable로 그 균형을 못 지킬 때의 동작(강제 거부 또는 완화)을 정한다.
Topology Spread Constraints — Pod를 물리적으로 골고루 흩뿌린다
· Kubernetes 공식문서 Pod Topology Spread Constraints
헤드리스 서비스(Headless Service)
clusterIP: None으로 설정해 단일 가상 IP를 만들지 않고, 대신 각 Pod마다 개별 DNS 레코드를 만들어주는 Service. StatefulSet과 짝을 이뤄 특정 Pod를 이름으로 직접 지목해 접속할 수 있게 한다.
StatefulSet — 순서와 고유 정체성이 필요한 워크로드
· Kubernetes 공식문서 StatefulSets, Basic StatefulSet Tutorial