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 |
|---|---|---|
| 3372 | 2026. 08. 18. | Linux 서버에서 포트는 열려 있는데 접속이 안 될 때: 방화벽·바인딩·라우팅 점검 순서 |
| 3340 | 2026. 08. 09. | systemd로 Linux 서비스 장애 자동 복구하기: 재시작 정책과 운영 로그 설정 |
| 3308 | 2026. 08. 01. | Linux 디스크 용량 부족을 막는 운영 가이드: 로그·임시파일·inode를 함께 점검하는 방법 |
| 3277 | 2026. 07. 24. | Linux 서버 SSH 보안 설정 가이드: 비밀번호 로그인 줄이고 접근 통제하기 |
| 3247 | 2026. 07. 16. | systemd 서비스 장애 대응 가이드: 자동 재시작과 로그 확인을 운영 표준으로 만드는 방법 |
| 3194 | 2026. 07. 07. | Linux 서버 디스크 용량 장애 예방: 로그와 임시 파일을 자동으로 정리하기 |
| 3158 | 2026. 06. 29. | Linux 서버 SSH 보안 강화: 키 인증, 접속 제한, 감사 로그를 함께 점검하기 |
| 3102 | 2026. 06. 21. | 크론 장애를 줄이는 systemd 타이머 운영 가이드: 실패 로그, 재시도, 격리 실행까지 |
| 3013 | 2026. 06. 13. | Linux 서버 로그 폭주 방지: journald와 logrotate로 디스크 장애를 막는 운영 가이드 |
| 2957 | 2026. 06. 05. | SSH 서버 접속 보안 점검: 키 인증, 접속 제한, 차단 로그 운영 가이드 |