Kubernetes 심화 및 운영 전략

개요

프로덕션(운영) 환경에서 K8s 클러스터를 안정적으로 유지하기 위한 자원 관리, 자동 스케일링, 접근 제어 보안, 그리고 현대적인 선언적 배포 파이프라인(GitOps) 전략을 다룹니다.

1. 오토 스케일링 (Auto Scaling)

트래픽의 변화에 맞춰 사람의 개입 없이 자동으로 시스템 자원을 확장 및 축소하는 기능입니다.

  • HPA (Horizontal Pod Autoscaler): CPU 사용량, 메모리 등의 메트릭을 모니터링하여 병목 발생 시 Pod의 개수(Replica)를 수평적으로 확장(Scale-out)합니다.
  • VPA (Vertical Pod Autoscaler): 메트릭을 분석하여 Pod 자체에 할당된 CPU와 메모리 제한(Limit/Request) 값을 수직적으로 상향 조절(Scale-up)합니다.
  • CA (Cluster Autoscaler): HPA에 의해 생성되어야 할 Pod가 많지만 기존 워커 노드의 자원이 꽉 차서 배치가 불가능(Pending)할 때, 클라우드 제공자(AWS EC2 등)와 연동하여 물리적인 워커 노드 수를 동적으로 늘립니다.

2. 리소스 관리 및 보안 (RBAC)

2.1 자원 제한 (Requests / Limits)

  • 모든 배포 시 각 컨테이너가 보장받아야 할 최소 자원(Requests)과 최대로 사용할 수 있는 자원 제한(Limits)을 반드시 설정해야 합니다. 이를 누락하면 특정 메모리 누수 버그가 발생한 컨테이너 하나가 전체 노드를 다운시킬 수 있습니다.

2.2 RBAC (Role-Based Access Control)

  • K8s API 서버에 대한 접근을 제어하는 역할 기반 인가 시스템입니다.
  • 개발팀에게는 특정 애플리케이션이 있는 Namespace의 읽기/배포 권한만 부여하고, 인프라 관리자에게는 클러스터 전체 권한을 부여하여 횡적 이동 보안 위협을 최소화합니다.

3. 패키지 관리 및 GitOps (CI/CD)

3.1 Helm (패키지 매니저)

  • K8s의 복잡한 YAML 파일들(Deployment, Service, ConfigMap 등)을 하나의 ‘Chart’ 패키지로 묶어 템플릿화합니다.
  • 환경(Dev, Prod)에 따라 values.yaml 변수만 주입하면 동일한 애플리케이션 구조를 손쉽게 반복 배포할 수 있습니다.

3.2 GitOps 방법론

GitOps란?

Git 저장소를 인프라 및 애플리케이션의 “단일 진실의 원천(Single Source of Truth)“으로 삼아, Git에 선언된 매니페스트 상태와 K8s 클러스터의 실제 상태를 항상 자동으로 동기화하는 배포 철학입니다.

  • 구현 도구: ArgoCD, Flux
  • 동작 방식: 개발자가 K8s YAML 파일의 버전을 변경하여 Git에 Push하면, 클러스터 내부에 설치된 ArgoCD가 이를 감지하여(Pull 방식) 직접 클러스터에 반영합니다. 배포용 인증 정보를 외부에 노출할 필요가 없어 보안성이 뛰어납니다.

4. 실제 적용 예시

트래픽 폭주를 대비한 완전 자동화 무중단 운영 파이프라인

  1. 개발팀이 앱 코드를 수정하고 저장소에 Push합니다.
  2. CI 파이프라인(GitHub Actions)이 코드를 빌드하고 새로운 도커 이미지를 레지스트리에 푸시한 뒤, CD 전용 Git 저장소의 YAML 태그 버전을 자동 업데이트합니다.
  3. ArgoCD가 저장소의 변경을 감지하고 K8s 클러스터에 즉시 롤링 배포를 시작합니다.
  4. 배포 직후, 마케팅 이벤트 알림으로 인해 동시 접속자가 10배 폭증합니다.
  5. Prometheus가 수집한 CPU 부하를 기반으로 HPA가 동작하여 해당 서비스의 Pod를 5개에서 50개로 늘립니다.
  6. 새로운 Pod를 배치할 여유 노드가 부족해지자, Cluster Autoscaler가 AWS API를 호출해 새로운 EC2 워커 노드 3대를 수 분 내에 동적으로 추가 결합합니다.
  7. 트래픽이 안정화되면 역순으로 리소스를 반납하여 비용을 최적화합니다.