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 가이드
• 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 가이드