TestForge Blog

Kubernetes 운영 체크리스트 — 프로덕션 배포 전 필수 점검 항목

Kubernetes 클러스터를 프로덕션에서 안정적으로 운영하기 위한 34가지 체크리스트. 리소스, 보안, 네트워크, 모니터링 영역별 정리.

TestForge Team ·

왜 체크리스트가 필요한가

Kubernetes는 기능이 방대해서 “일단 동작하는” 수준과 “프로덕션 수준”의 차이가 큽니다.
장애의 70%는 예측 가능한 설정 누락에서 발생합니다.


1. 리소스 관리

  • 모든 Deployment에 resources.requestsresources.limits 설정
  • HorizontalPodAutoscaler(HPA) 설정 (CPU/메모리 기반)
  • PodDisruptionBudget(PDB) 설정 — 롤링 업데이트 중 최소 가용 Pod 보장
  • LimitRange로 네임스페이스 기본 리소스 제한
  • ResourceQuota로 네임스페이스 총량 제한
# PodDisruptionBudget 예시
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: my-app-pdb
spec:
  minAvailable: 2  # 최소 2개 Pod 유지
  selector:
    matchLabels:
      app: my-app

2. 가용성

  • replicas 최소 2 이상 (단일 Pod는 SPOF)
  • topologySpreadConstraints로 AZ 분산 배치
  • RollingUpdate 전략 설정 (maxSurge, maxUnavailable)
  • Liveness / Readiness Probe 설정
  • terminationGracePeriodSeconds 설정 (기본 30초)
topologySpreadConstraints:
- maxSkew: 1
  topologyKey: topology.kubernetes.io/zone
  whenUnsatisfiable: DoNotSchedule
  labelSelector:
    matchLabels:
      app: my-app

3. 보안

  • runAsNonRoot: true 설정
  • readOnlyRootFilesystem: true 설정
  • allowPrivilegeEscalation: false 설정
  • ServiceAccount 최소 권한 원칙 (RBAC)
  • Secret은 환경변수 대신 파일 마운트로 사용
  • NetworkPolicy로 Pod 간 통신 제한
  • 이미지 취약점 스캔 (Trivy, Snyk)
securityContext:
  runAsNonRoot: true
  runAsUser: 1000
  readOnlyRootFilesystem: true
  allowPrivilegeEscalation: false
  capabilities:
    drop: ["ALL"]

4. 네트워크

  • Ingress에 TLS 설정 (cert-manager)
  • Service type은 ClusterIP 기본, 외부 노출 필요 시만 LoadBalancer
  • NetworkPolicy로 네임스페이스 간 접근 제어
  • DNS TTL 설정 확인 (ndots 설정)

5. 스토리지

  • PersistentVolume의 reclaimPolicy 확인 (Retain 권장)
  • StorageClass에 allowVolumeExpansion: true
  • StatefulSet 사용 시 volumeClaimTemplates 설정

6. 모니터링 & 알림

  • Prometheus + Grafana 설치
  • 핵심 알림 설정: Pod 재시작, Node NotReady, HPA 최대값 도달
  • 로그 수집: Fluent Bit → Elasticsearch/Loki
  • kubectl top nodes / kubectl top pods 동작 확인
# 알림 예시 (Prometheus Alert Rule)
- alert: PodCrashLooping
  expr: rate(kube_pod_container_status_restarts_total[15m]) > 0
  for: 5m
  labels:
    severity: critical

7. 배포 프로세스

  • latest 태그 사용 금지 — 버전 태그 고정
  • imagePullPolicy: Always 설정
  • Helm Chart 또는 Kustomize로 환경별 설정 분리
  • GitOps (ArgoCD/Flux) 적용
  • Rollback 절차 문서화 및 테스트
# 빠른 롤백
kubectl rollout undo deployment/my-app

# 특정 버전으로 롤백
kubectl rollout undo deployment/my-app --to-revision=3

8. 비용 최적화

  • Spot/Preemptible 인스턴스 활용 (비중요 워크로드)
  • 미사용 네임스페이스/리소스 정리
  • VPA(VerticalPodAutoscaler)로 requests 최적화
  • Cluster Autoscaler 설정

빠른 클러스터 건강 점검

# Node 상태
kubectl get nodes -o wide

# 재시작 많은 Pod
kubectl get pods -A | grep -v Running | grep -v Completed

# 리소스 사용률
kubectl top nodes
kubectl top pods -A --sort-by=memory

# 최근 이벤트 (경고만)
kubectl get events -A --field-selector type=Warning --sort-by='.lastTimestamp'