Contents
see List개요
Kubernetes(K8s)는 컨테이너 오케스트레이션의 사실상 표준으로 자리잡았지만, 클러스터를 안정적으로 운영하는 것은 설치보다 훨씬 어렵습니다. 리소스 관리, 모니터링, 업그레이드, 장애 대응 등 운영 과정에서 마주치는 현실적인 문제들을 제대로 다루지 않으면 서비스 장애로 이어질 수 있습니다. 이 글에서는 프로덕션 Kubernetes 클러스터 운영에 필요한 핵심 지식과 실전 노하우를 정리합니다.
핵심 개념
리소스 관리: Pod의 requests와 limits를 적절히 설정하는 것이 안정 운영의 기본입니다. requests는 스케줄링 기준, limits는 OOM Kill 기준입니다. requests 없이 배포하면 노드 과부하의 원인이 됩니다.
HPA와 VPA: Horizontal Pod Autoscaler는 Pod 수를 조정하고, Vertical Pod Autoscaler는 개별 Pod의 리소스를 조정합니다. 두 가지를 동시에 사용할 때는 충돌에 주의해야 합니다.
PDB(Pod Disruption Budget): 노드 유지보수나 업그레이드 시 최소 가용 Pod 수를 보장합니다. 프로덕션 서비스에는 반드시 설정해야 합니다.
네트워크 정책: NetworkPolicy로 Pod 간 통신을 제한하여 마이크로서비스 보안을 강화합니다. 기본은 모든 통신이 허용이므로 명시적 차단이 필요합니다.
실전 예제: 운영 필수 설정
# 리소스 관리가 포함된 Deployment 예제
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: production
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: app
image: myapp:v1.2.3
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 10
periodSeconds: 15
readinessProbe:
httpGet:
path: /ready
port: 8080
periodSeconds: 5
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: web-app
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: web-app-pdb
namespace: production
spec:
minAvailable: 2
selector:
matchLabels:
app: web-app
EOF
운영 중 자주 사용하는 디버깅 명령입니다.
# Pod 상태 진단
kubectl get pods -n production -o wide
kubectl describe pod web-app-xxx -n production
kubectl logs web-app-xxx -n production --previous
# 노드 리소스 사용량 확인
kubectl top nodes
kubectl top pods -n production --sort-by=memory
# 이벤트 확인 (최근 장애 원인 파악)
kubectl get events -n production --sort-by='.lastTimestamp' | tail -20
# 노드 유지보수 (drain)
kubectl drain node-1 --ignore-daemonsets --delete-emptydir-data
# 작업 완료 후
kubectl uncordon node-1
활용 팁
- LimitRange 설정: 네임스페이스에 LimitRange를 적용하면 리소스 미설정 Pod이 배포되는 것을 방지할 수 있습니다.
- ResourceQuota: 팀별 네임스페이스에 ResourceQuota를 설정하여 특정 팀이 클러스터 리소스를 독점하는 것을 방지하세요.
- Graceful Shutdown: terminationGracePeriodSeconds를 애플리케이션의 종료 시간에 맞게 설정하세요. 기본 30초가 부족한 경우가 많습니다.
- GitOps 도입: ArgoCD나 Flux를 사용하여 클러스터 상태를 Git으로 관리하면 변경 이력 추적과 롤백이 용이합니다.
- etcd 백업: etcd는 클러스터의 뇌입니다. 정기적인 스냅샷 백업을 반드시 설정하세요.
마무리
Kubernetes 클러스터 운영의 핵심은 리소스 관리, 가용성 보장, 그리고 관측 가능성(Observability)입니다. 적절한 requests/limits 설정, PDB, 헬스체크를 기본으로 갖추고, GitOps로 선언적 관리를 하면 안정적인 운영이 가능합니다. 완벽한 자동화보다는 장애 발생 시 빠르게 원인을 파악하고 복구할 수 있는 역량을 갖추는 것이 더 중요합니다.
os
| No | 작성일 | Title |
|---|---|---|
| 2342 | 2026. 04. 06. | macOS 터미널 보안 기능과 필수 시스템 관리 명령어 2026 총정리 |
| 2328 | 2026. 04. 05. | Linux systemd 실전 마스터: 서비스 관리부터 타이머, 리소스 제한까지 |
| 2308 | 2026. 04. 05. | macOS 터미널 자동화 완벽 가이드: launchd, Automator, 셸 스크립트 실전 |
| 2307 | 2026. 04. 05. | Linux 시스템 모니터링 완벽 가이드: 성능 병목 찾기부터 자동 알림까지 |
| 2282 | 2026. 04. 04. | macOS 개발자를 위한 터미널 완벽 가이드: Homebrew, CLI 도구, 시스템 관�� |
| 2281 | 2026. 04. 04. | Linux 시스템 성능 분석 실전 가이드: top부터 perf, strace까지 완벽 정리 |
| 2211 | 2026. 02. 11. | systemd 서비스 관리와 저널 로그 분석 실전 |
| 2210 | 2026. 02. 11. | macOS 개발환경 자동화: Homebrew와 Dotfiles 관리 |
| 2209 | 2026. 02. 11. | Nginx 리버스 프록시와 로드밸런싱 고급 설정 |
| 2208 | 2026. 02. 11. | Kubernetes 1.31 신기능과 클러스터 운영 팁 |