-
Notifications
You must be signed in to change notification settings - Fork 0
KR_K8s_Core
somaz edited this page Mar 30, 2026
·
1 revision
- Control Plane(kube-apiserver, etcd, kube-scheduler, kube-controller-manager)과 Node 컴포넌트(kubelet, kube-proxy, Container Runtime, CoreDNS)로 구성된다.
- kubectl 요청 →
- kube-apiserver가 etcd에 저장 →
- kube-controller-manager가 Pod 리소스 생성 →
- kube-scheduler가 적합한 노드 선택 →
- 해당 노드의 kubelet이 CRI 데몬 호출 →
- 컨테이너 생성 →
- kubelet이 상태를 kube-apiserver에 업데이트 →
- etcd에 최종 상태 저장된다.
- RBAC은 API Group(Core Group, Named Group)별로 세밀한 권한 제어를 제공한다.
- Role은 특정 API Group의 리소스에 대한 verbs(get, list, create 등)를 정의하고, RoleBinding으로 ServiceAccount에 할당한다.
- ServiceAccount는 Pod가 API 서버와 통신하기 위한 인증 자격증명으로, Token(JWT), ca.crt(CA 인증서), Namespace를 포함하며, K8s 1.24 이후 자동 토큰 생성이 비활성화되어 명시적 생성이 필요하다.
- Secret은 base64 인코딩(암호화 아님)되므로 etcd 암호화 활성화, RBAC 권한 최소화, 필요시에만 Pod 마운트가 필수다.
- External Secrets Operator는 AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager 등 외부 시크릿 저장소와 연동하여 K8s Secret을 동기화하며, 중앙 집중식 관리와 자동 로테이션을 지원한다.
- ExternalTrafficPolicy는 외부 트래픽 라우팅을 제어한다. Cluster(기본값)는 모든 노드로 분산하지만 소스 IP가 손실되고, Local은 Pod 있는 노드로만 라우팅하여 소스 IP를 유지하지만 불균형이 발생한다.
- InternalTrafficPolicy(K8s 1.22+)는 클러스터 내부 트래픽에 동일한 정책을 적용하며, Local 설정 시 같은 노드 내 Pod로만 트래픽을 보내 네트워크 홉을 줄인다.
-
Reclaim Policy는 PVC 삭제 후 PV 처리 방식이다. -
Retain(수동 정리, 데이터 보존), Delete(자동 삭제, 동적 프로비저닝 기본값), Recycle(Deprecated, 기본 삭제 후 재사용). -
Volume Binding Mode는 Immediate(PVC 생성 즉시 바인딩)와 WaitForFirstConsumer(Pod 스케줄링 후 바인딩, 토폴로지 제약 고려)가 있다. -
WaitForFirstConsumer는 멀티 AZ 환경에서 Pod와 같은 AZ에 볼륨을 생성하여 성능을 최적화한다.
- HPA는 Resource Metrics(CPU/Memory), Custom Metrics(Prometheus 등), External Metrics(외부 시스템)을 지원한다.
-
desiredReplicas = ceil[currentReplicas * (currentMetricValue / targetMetricValue)].
-
stabilizationWindowSeconds로 플래핑 방지, behavior 설정으로 scale up/down 속도 제어, 여러 메트릭 사용 시 가장 큰 replica 수를 선택한다.
-
KEDA(Kubernetes Event-Driven Autoscaling)는 이벤트 기반 0→N 스케일링을 지원한다.
- Startup Probe는 느린 시작 애플리케이션용으로 initialDelaySeconds를 길게 설정하며, 성공 전까지 Liveness 비활성화한다.
- Liveness Probe는 애플리케이션 데드락 감지용으로 failureThreshold를 3 이상으로 설정하여 오탐을 방지한다.
- Readiness Probe는 트래픽 수신 준비 확인용으로 즉시 실패 처리(failureThreshold=1)하여 불량 Pod으로 트래픽이 가지 않도록 한다.
- 모든 Probe는 timeoutSeconds를 애플리케이션 응답 시간보다 길게 설정한다.
Q8. Node Affinity의 requiredDuringSchedulingIgnoredDuringExecution vs preferredDuringSchedulingIgnoredDuringExecution의 실무 활용은?
- required는 하드 제약으로 조건 불만족 시 Pod가 Pending 상태로 남는다. GPU 노드, 특정 인스턴스 타입, 규제 준수가 필요한 경우 사용한다.
- preferred는 소프트 제약으로 조건 불만족 시에도 다른 노드에 스케줄되며, weight로 우선순위를 정한다.
- 비용 최적화(Spot 인스턴스 선호), 성능 최적화(SSD 노드 선호), 지역 선호도에 사용한다.
- Pod Anti-Affinity와 함께 사용하여 고가용성을 보장한다.
maxUnavailable은 업데이트 중 사용 불가한 Pod 비율이고, maxSurge는 초과 생성 가능한 Pod 비율이다. 기본값(25%, 25%)은 일반적 상황에 적합하다.
빠른 배포: maxSurge=100%, maxUnavailable=0 (리소스 2배 필요, 무중단). 리소스 제약: maxSurge=0, maxUnavailable=1 (느리지만 추가 리소스 불필요).
- Blue-Green 유사: maxSurge=100%, maxUnavailable=0 후 완료되면 이전 버전 종료.
- Canary: replica 수 조정과 progressDeadlineSeconds로 문제 감지 시 롤백한다.
- ① preStop Hook 실행(블로킹) →
- ② SIGTERM 전송 →
- ③ terminationGracePeriodSeconds(기본 30초) 대기 →
- ④ 시간 초과 시 SIGKILL 강제 종료. preStop Hook은 로드밸런서 등록 해제, 진행 중 요청 완료 대기, 연결 정리 등에 사용한다.
preStop 실행 시간도 terminationGracePeriodSeconds에 포함되므로, 전체 정리 시간을 고려하여 60초 이상으로 설정한다. sleep을 추가하여 Endpoint 업데이트 전파 시간을 확보한다.
💡 용어 설명:
- 핵심 개념 질문들(Q1-Q10)에서 사용된 용어들(Control Plane, etcd, RBAC, ServiceAccount, API Group, Secret, ExternalTrafficPolicy, PV/PVC, StorageClass, HPA, VPA, Probe, Node Affinity, RollingUpdate, Graceful Shutdown 등)에 대한
- 상세한 설명은 문서 상단의 주요 용어 통합 정리 각 섹션을 참고하세요.