☸️
컨테이너 오케스트레이션 · 실전/심화

Kubernetes 실전/심화 가이드

👥 방문자 수

설정 관리, 외부 트래픽 라우팅, 자동 스케일링, 패키지 관리까지 프로덕션 환경에서 실제로 마주치는 주제를 다룹니다. 기초 가이드에서 Pod/Deployment/Service를 먼저 익히고 오면 더 수월합니다.

ConfigMap/Secret Ingress HPA Helm

1. ConfigMap & Secret

# ConfigMap — 비민감 설정
apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
data:
  APP_ENV: production
  LOG_LEVEL: info
  config.yaml: |
    server:
      port: 3000
      timeout: 30s

---
# Secret — 민감 데이터 (Base64 인코딩)
apiVersion: v1
kind: Secret
metadata:
  name: myapp-secret
type: Opaque
data:
  DB_PASSWORD: c2VjcmV0MTIz  # echo -n 'secret123' | base64
  API_KEY: bXlhcGlrZXk=yaml
# Pod에서 ConfigMap / Secret 사용
spec:
  containers:
  - name: app
    # 방법 1: 환경변수로
    envFrom:
    - configMapRef:
        name: myapp-config
    - secretRef:
        name: myapp-secret

    # 방법 2: 특정 키만 선택
    env:
    - name: LOG_LEVEL
      valueFrom:
        configMapKeyRef:
          name: myapp-config
          key: LOG_LEVEL

    # 방법 3: 볼륨으로 마운트 (설정 파일)
    volumeMounts:
    - name: config-vol
      mountPath: /etc/app

  volumes:
  - name: config-vol
    configMap:
      name: myapp-configyaml
# kubectl로 빠르게 생성
kubectl create configmap myapp-config \
  --from-literal=APP_ENV=production \
  --from-file=config.yaml

kubectl create secret generic myapp-secret \
  --from-literal=DB_PASSWORD=secret123bash

2. Ingress

Ingress는 클러스터 외부의 HTTP/HTTPS 트래픽을 내부 Service로 라우팅합니다. nginx-ingress-controller 설치가 선행되어야 합니다.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    cert-manager.io/cluster-issuer: letsencrypt-prod  # TLS 자동 발급
spec:
  ingressClassName: nginx
  tls:
  - hosts: [myapp.example.com]
    secretName: myapp-tls
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port: { number: 80 }
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend-service
            port: { number: 80 }yaml

3. HPA (수평 자동 스케일링)

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 2
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60   # CPU 60% 초과 시 스케일 아웃
  - type: Resource
    resource:
      name: memory
      target:
        type: AverageValue
        averageValue: 400Miyaml
# HPA 상태 확인
kubectl get hpa
kubectl describe hpa myapp-hpa

# Metrics Server 설치 (HPA 필수 의존성)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlbash

4. Helm

Helm은 Kubernetes 패키지 매니저입니다. 복잡한 애플리케이션을 재사용 가능한 Chart로 패키징합니다.

# 설치
brew install helm

# 공개 차트 사용
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo bitnami/postgresql

# 설치 & 커스터마이징
helm install my-pg bitnami/postgresql \
  --namespace database \
  --create-namespace \
  --set auth.postgresPassword=secret \
  --set primary.persistence.size=20Gi

# 업그레이드 / 롤백
helm upgrade my-pg bitnami/postgresql --set image.tag=16.2.0
helm rollback my-pg 1

# 상태 확인
helm list -A
helm history my-pgbash
# 나만의 Helm Chart 생성
helm create myapp         # 기본 구조 생성
# myapp/
# ├── Chart.yaml          # 차트 메타데이터
# ├── values.yaml         # 기본값
# └── templates/          # YAML 템플릿

# values.yaml
image:
  repository: myapp
  tag: "1.0.0"
replicaCount: 3
service:
  type: ClusterIP
  port: 80

# templates/deployment.yaml
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
replicas: {{ .Values.replicaCount }}

# 배포
helm install myapp ./myapp -f prod-values.yaml
helm template myapp ./myapp   # 렌더링만 미리보기yaml

5. 다음 단계

🚀
K8s 심화 주제

GitOps: ArgoCD / Flux로 Git 기반 선언적 배포 자동화
서비스 메시: Istio / Linkerd — 트래픽 제어, mTLS, 관찰 가능성
모니터링: Prometheus + Grafana 스택
로깅: EFK(Elasticsearch + Fluent Bit + Kibana)
배포 자동화: Jenkins 또는 GitHub Actions로 Helm 배포 파이프라인 구성
CKA / CKAD 자격증: 실무 K8s 역량 공인 자격증

연계 가이드: Kubernetes 기초 가이드 · Docker 가이드 · CI/CD 가이드 · 📊 Prometheus 가이드 · Grafana 가이드