피드로 돌아가기
Kubernetes BlogKubernetes Blog
DevOps

Kubernetes 운영팀이 YAML 기반 설정 관리 및 리소스 컨트롤러 패턴 도입으로 배포 장애와 설정 오류 최소화

Kubernetes Configuration Good Practices

2025년 11월 25일8intermediate

Context

Kubernetes 설정은 작은 문제가 전체 배포를 중단시킬 수 있다. YAML 들여쓰기 오류, 잘못된 API 버전, 따옴표 누락 같은 사소한 실수가 클러스터 안정성을 위협하고 운영 복잡도를 증가시킨다.

Technical Solution

  • 최신 안정화 API 버전 사용: Kubernetes 진화 속도에 맞춰 deprecated API 방지 및 호환성 보장
  • Git 기반 버전 관리: 데스크톱에서 직접 배포 금지, 모든 manifest 파일을 Git에 저장하여 롤백 및 변경 추적 가능
  • YAML 형식 표준화: JSON 대신 YAML 사용, 부울 값은 true/false로만 명시 (yes, no, on, off 사용 금지)
  • 단일 manifest 파일로 관련 리소스 통합: Deployment, Service, ConfigMap을 한 파일에 작성하여 추적 및 원자적 배포
  • kubectl apply -f configs/ 명령으로 디렉토리 전체 배포: 단일 명령으로 여러 파일 일괄 적용
  • Deployment 및 Job 컨트롤러 패턴 도입: 직접 Pod 생성 금지, Deployment로 자동 재스케줄링 구현, Job으로 일회성 작업 관리
  • Service 선행 생성: Pod 시작 시 환경변수 주입(FOO_SERVICE_HOST, FOO_SERVICE_PORT) 받도록 구조화
  • DNS 기반 Service 디스커버리: IP 대신 DNS 이름(my-service.default.svc.cluster.local) 사용
  • hostPort 및 hostNetwork 회피: 특정 노드 바인딩 제거로 스케줄링 유연성 향상
  • kubernetes.io/description 주석 추가: 리소스 의도와 설정 이유 명시하여 디버깅 시간 단축
  • 일관된 Label 사용: kubectl get pods -l app=myapp 형태로 리소스 선택 및 관리 자동화
  • 라벨로 Pod 격리 및 검사: 문제 Pod에 debug 라벨 추가, 로그 확인 후 수동 삭제 (inspect-then-delete 패턴)

Key Takeaway

최소한의 설정으로 버전 제어 및 컨트롤러 기반 관리를 도입하면 Kubernetes 운영의 불확실성과 장애 복구 시간을 현저히 줄일 수 있다. 일관된 설정 습관이 장기적 클러스터 안정성과 팀의 생산성을 보장한다.


Kubernetes를 운영하는 팀에서 모든 manifest를 YAML로 작성하고 Git에 저장한 후 kubectl apply -f 로 디렉토리 단위로 배포하면, 설정 오류로 인한 배포 실패를 사전에 차단하고 변경사항을 추적하여 장애 발생 시 즉시 이전 버전으로 롤백할 수 있다. 동시에 Deployment와 Job 컨트롤러를 직접 Pod 대신 사용하면 노드 장애 시에도 자동 재스케줄링이 보장되므로 수동 복구 비용을 제거할 수 있다.

원문 읽기