쿠버네티스 마스터 노트 시리즈 10편 (마지막). 매니지드 K8s 3종(GKE·EKS·AKS) 비교, GitOps 패러다임과 ArgoCD/Flux 자동 배포, Prometheus + Grafana 표준 모니터링 스택, 로그 수집 (Loki·EFK), 분산 추적 (Jaeger·Tempo), 운영 환경 체크리스트, 12-Factor App 원칙까지 — 시리즈 마무리.
이 글은 쿠버네티스 마스터 노트 시리즈의 마지막 열 번째 편입니다. 1~9편이 K8s 자체였다면, 이번엔 운영 환경의 실전 — 매니지드 K8s·CI/CD·관측성.
운영 환경에서 K8s 직접 운영은 비효율. 매니지드 서비스가 표준. 그 위에 GitOps·관측성 스택을 올려야 진짜 시작.
처음 운영이 어렵게 느껴지는 이유
처음 이 단원이 어렵게 느껴지는 이유는 두 가지예요. 첫째, 너무 많은 도구가 등장합니다. ArgoCD·Prometheus·Grafana·Loki·Jaeger·Cert-Manager·External Secrets… 둘째, 무엇부터 도입할지 막연합니다.
해결법은 한 가지예요. "3 축으로 묶기" — 1) 매니지드 클러스터 (GKE·EKS), 2) GitOps 배포 (ArgoCD), 3) 관측성 (Prometheus). 시작은 이 3개. 나머지는 필요 시 추가.
매니지드 K8s — 3 옵션
| 서비스 | 클라우드 | 특징 |
|---|---|---|
| GKE | Google Cloud | K8s 발원지·가장 매끄러움 |
| EKS | AWS | 가장 큰 시장 점유 |
| AKS | Azure | MS 생태계 통합 |
GKE 핵심
- Autopilot Mode — 노드 관리 완전 자동
- Standard Mode — 노드 직접 관리
- 자동 업그레이드·자동 복구
- Workload Identity (GCP IAM ↔ K8s SA)
- Cloud Logging·Monitoring 자동 통합
EKS 핵심
- 컨트롤 플레인 매니지드 (Worker는 EC2·Fargate·EKS Auto Mode)
- IRSA (IAM Roles for ServiceAccounts) — IAM ↔ K8s SA
- AWS Load Balancer Controller
- VPC CNI — Pod에 ENI 직접 부여 (성능 ↑·비용 고려)
직접 vs 매니지드
여기서 정말 중요한 시험 함정 — 운영 환경 = 매니지드 권장. 직접 K8s 운영 (kubeadm·k3s·kops) = etcd 백업·인증서 갱신·노드 운영체제 패치·네트워크 설정 모두 직접. 매니지드는 컨트롤 플레인 자동.
작은 회사는 매니지드 + 노드 자동 관리 (GKE Autopilot 또는 EKS Auto Mode) 가장 효율.
GitOps — 운영 표준 패러다임
Git Repo (단일 진실)
↓ push
ArgoCD / Flux 감지
↓
K8s 클러스터 자동 동기화
특징:
- 선언형 — Git이 desired state
- 감사 가능 — 모든 변경이 Git 커밋
- 롤백 자연스러움 — Git revert
- 자동 동기화 — 수동 배포 X
ArgoCD vs Flux
| 측면 | ArgoCD | Flux |
|---|---|---|
| UI | 강력함 (웹 대시보드) | 미니멀 |
| 학습 곡선 | 낮음 | 중간 |
| 멀티 클러스터 | 강력 | 강력 |
| 인기 | 높음 | 중간 |
여기서 시험 함정이 하나 있어요. GitOps + Helm = 표준 조합. ArgoCD가 Git의 Helm Chart 감지·자동 적용.
ArgoCD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/my-app
targetRevision: HEAD
path: helm-chart
helm:
valueFiles:
- values-prod.yaml
destination:
server: https://kubernetes.default.svc
namespace: prod
syncPolicy:
automated:
prune: true # Git에서 제거된 리소스 자동 삭제
selfHeal: true # 수동 변경 자동 복구
CI/CD 파이프라인
[개발자 push]
↓
[CI: GitHub Actions / GitLab / Jenkins]
- 코드 체크아웃
- 테스트
- 이미지 빌드 (docker build)
- 이미지 푸시 (ECR/GCR/Docker Hub)
- Helm chart 패키지·푸시 또는 image tag 갱신
↓
[CD: ArgoCD / Flux]
- Git 변경 감지
- K8s 클러스터 sync
이미지 태그 전략
my-app:v1.2.3 # semver (안전)
my-app:abc123 # git sha (정확)
my-app:latest # 절대 X (운영)
여기서 정말 중요한 시험 함정 — latest 태그 운영 X. 어느 버전인지 추적 X. 롤백 어려움. 명시 태그 + image pull policy IfNotPresent 표준.
Image Updater
ArgoCD Image Updater 등으로 이미지 자동 업데이트:
1. 새 이미지 푸시 → 레지스트리
2. Image Updater 감지
3. Git에 자동 commit (image tag 갱신)
4. ArgoCD 동기화
Observability — 3 축
1. Metrics — 숫자 시계열 (CPU·메모리·요청 수)
2. Logs — 텍스트 이벤트
3. Traces — 분산 요청 추적
1. Metrics — Prometheus + Grafana
# kube-prometheus-stack (Helm chart)
helm install monitoring prometheus-community/kube-prometheus-stack
자동 설치:
- Prometheus — 메트릭 수집
- Grafana — 시각화
- Alertmanager — 알람
- Node Exporter — 노드 메트릭
- kube-state-metrics — K8s 상태 메트릭
Pod 메트릭 노출
spec:
containers:
- name: app
ports:
- name: metrics
containerPort: 9100
# ServiceMonitor
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-app
spec:
selector:
matchLabels:
app: my-app
endpoints:
- port: metrics
핵심 메트릭
CPU·Memory 사용률 (Pod·노드)
요청 수 (HTTP·gRPC)
요청 지연 (p50·p95·p99)
에러율
큐 길이 (Kafka·Redis)
DB 연결 풀
2. Logs — Loki·EFK·OpenSearch
Loki (가벼움)
helm install loki grafana/loki-stack
Promtail (DaemonSet) → Loki → Grafana 조회.
EFK (전통적)
- Fluentd / Fluent Bit — 수집
- Elasticsearch — 저장·검색
- Kibana — UI
여기서 시험 함정이 하나 있어요. Loki는 메트릭 친화 (라벨), ES는 풀텍스트 검색. 단순 로그 조회 = Loki, 복잡 검색 = ES.
3. Traces — Jaeger / Tempo / OpenTelemetry
요청 ID로 마이크로서비스 사이 흐름 추적
지연 병목 식별
OpenTelemetry — 표준 SDK. Jaeger·Tempo·Datadog 등으로 export.
Cert-Manager — TLS 자동
helm install cert-manager jetstack/cert-manager --set installCRDs=true
Let's Encrypt 자동 발급:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts: [example.com]
secretName: example-tls
rules:
- host: example.com
http: ...
자동 인증서 발급·갱신.
Backup·Disaster Recovery
Velero — 클러스터 백업
velero backup create my-backup --include-namespaces=prod
velero restore create --from-backup=my-backup
K8s 객체 + PVC 데이터 (CSI 스냅샷) 백업.
etcd 백업
매니지드 = 자동. 직접 운영 = 정기 etcd snapshot 필수.
12-Factor App — K8s 친화 원칙
| 요소 | K8s 적용 |
|---|---|
| 1. Codebase | Git |
| 2. Dependencies | 컨테이너 이미지 |
| 3. Config | ConfigMap·Secret |
| 4. Backing Services | Service·외부 DB |
| 5. Build/Release/Run | CI/CD + 이미지 태그 |
| 6. Processes | Stateless Pod |
| 7. Port Binding | containerPort |
| 8. Concurrency | replicas·HPA |
| 9. Disposability | restartPolicy·SIGTERM 처리 |
| 10. Dev/Prod parity | 같은 이미지·환경별 values |
| 11. Logs | stdout·stderr |
| 12. Admin processes | Job |
운영 체크리스트
✓ 매니지드 K8s (GKE Autopilot·EKS Auto Mode 등)
✓ GitOps (ArgoCD·Flux)
✓ Helm Chart 또는 Kustomize
✓ 명시적 이미지 태그 (latest X)
✓ HPA + Cluster Autoscaler
✓ 3 Probes (Liveness·Readiness·Startup)
✓ Resource requests·limits
✓ NetworkPolicy default deny
✓ RBAC 최소 권한·앱별 SA
✓ SecurityContext (runAsNonRoot 등)
✓ Pod Security Standards (restricted)
✓ 외부 Secret 관리 (Vault·External Secrets)
✓ etcd 암호화
✓ Audit Log
✓ Prometheus + Grafana
✓ 중앙 로그 (Loki·EFK)
✓ 분산 추적 (OpenTelemetry)
✓ Cert-Manager (TLS 자동)
✓ Backup (Velero + etcd)
✓ Image scan (Trivy·Snyk)
✓ Multi-AZ Pod 분산 (AntiAffinity)
✓ PodDisruptionBudget
✓ 적절한 namespace 분리·ResourceQuota
시리즈 마무리 — 10편 종합
1편부터 10편까지의 흐름:
| 편 | 주제 | 한 줄 |
|---|---|---|
| 1 | 아키텍처 | Control Plane 4 + Worker 3, Reconciliation Loop |
| 2 | Pod | 최소 단위, Pause·Init·Sidecar, Ephemeral |
| 3 | Workloads | Deployment·StatefulSet·DaemonSet·Job·CronJob |
| 4 | Services·Networking | ClusterIP·NodePort·LoadBalancer·Ingress |
| 5 | Config·Secret | 4 주입 방식, Secret base64 함정 |
| 6 | Storage | PV·PVC·StorageClass, AccessMode 3종 |
| 7 | Scaling·Scheduling | HPA·Probe 3종·Affinity·Taint |
| 8 | Security | RBAC·NetworkPolicy·SecurityContext·PSS |
| 9 | Helm | Chart·템플릿·환경별 values·Hooks |
| 10 | 실전 | 매니지드·GitOps·관측성·12-Factor |
K8s의 거의 모든 운영 패턴을 한 번에 통찰할 토대.
시험 직전 한 번 더 — 자주 헷갈리는 함정 모음
여기까지가 10편의 핵심입니다. 시험 직전 또는 실무에서 헷갈릴 때 다시 펼쳐 볼 수 있게 압축 노트로 마무리할게요.
- 매니지드 3 — GKE / EKS / AKS
- 운영 = 매니지드 권장 (직접 운영 비효율)
- GKE Autopilot·EKS Auto Mode = 노드 자동
- IRSA (EKS) / Workload Identity (GKE) = 클라우드 IAM ↔ K8s SA
- GitOps = Git이 단일 진실
- ArgoCD / Flux — Git 감지·자동 동기화
- ArgoCD Application —
automated.prune·selfHeal - CI/CD — 이미지 빌드·푸시 + Helm·image tag 갱신
- 이미지 명시 태그 (semver·git sha)
latest운영 X- Observability 3 축 — Metrics / Logs / Traces
- Prometheus + Grafana = 표준 (kube-prometheus-stack)
- ServiceMonitor로 메트릭 자동 수집
- 로그 — Loki (가벼움·라벨) / EFK (전통·풀텍스트)
- 추적 — OpenTelemetry + Jaeger·Tempo
- Cert-Manager = Let's Encrypt 자동 TLS
- Velero = 클러스터 백업 (객체 + PVC)
- 매니지드 etcd = 자동 백업
- 12-Factor — Config·Concurrency·Disposability·Logs 등 K8s 친화
- 운영 체크 — 매니지드·GitOps·Helm·HPA·Probes·NetworkPolicy·RBAC·SecurityContext·PSS·외부 Secret·etcd 암호화·Audit·Prometheus·Loki·OpenTelemetry·Cert-Manager·Velero·이미지 스캔·AntiAffinity·PDB·ResourceQuota
시리즈 다른 편 (시리즈 마지막)
- 1편 — 아키텍처·Control Plane
- 2편 — Pod
- 3편 — Workloads
- 4편 — Services·Networking
- 5편 — ConfigMap·Secret
- 6편 — Storage
- 7편 — Scaling·Scheduling
- 8편 — Security
- 9편 — Helm
- 10편 — 실전 (매니지드·GitOps·Observability) (현재 글, 시리즈 마지막)
공식 문서: GKE / EKS / ArgoCD / Prometheus / 12-Factor App 에서 더 깊이.
쿠버네티스 마스터 노트는 여기서 마무리. 1편부터 10편까지의 흐름이 머리에 남으면 컨테이너 오케스트레이션의 거의 모든 운영 패턴을 손에 잡고 시작할 토대가 됩니다.