Skip to content

필사 모드: Kubernetes가 왜 이렇게 복잡한가 심화 가이드 — 아키텍처, Service Mesh, GitOps, Platform Engineering, Ambient Mesh, eBPF, Gateway API까지 (2025)

한국어
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

> **TL;DR** — Kubernetes는 2014년 Google의 Borg 경험에서 탄생해, 2024년 기준 **Fortune 100의 96%**가 사용하는 사실상의 클라우드 OS다. 하지만 그 복잡도는 악명 높고 — 기본 리소스 40여 종, Istio만 추가해도 CRD 60+ 종, 운영자 1명이 이해해야 하는 개념 수백 개. 이 글은 "**K8s는 왜 이렇게 복잡한가**"라는 원질문에서 출발해, **Control Plane 아키텍처**, **CNI/eBPF/Cilium**, **Service Mesh 논쟁**(Istio Ambient vs sidecar), **GitOps 혁명**(ArgoCD, Flux), **Platform Engineering**(Backstage, IDP), **Operator 패턴**, **Karpenter 자동 스케일**, **WASM 런타임**까지 — 2025년 Kubernetes의 전 지형도와 실전 트레이드오프를 추적한다.

Kubernetes의 탄생과 확산

2003년 Google은 **Borg**라는 자사 클러스터 관리 시스템으로 수십만 머신을 운영하고 있었다. 2014년, Borg 설계자 Joe Beda, Brendan Burns, Craig McLuckie가 오픈소스 버전을 공개 — 이것이 **Kubernetes**(그리스어 "조타수"). 2015년 CNCF(Cloud Native Computing Foundation)가 설립되며 리누스 토르발즈 이후 가장 큰 오픈소스 프로젝트 중 하나가 된다.

**확산 속도**:

- 2015: CNCF 창립, 1.0 릴리스

- 2017: AWS EKS 발표 — Docker Swarm/Mesos 패배 확정

- 2019: 대부분 클라우드 업체 관리형 K8s 제공

- 2022: **Fortune 500의 85%** 도입

- 2024: **Fortune 100의 96%** 사용, 5.6M 개발자

- 2025: AI/ML 워크로드 집약 (Ray, Kubeflow, Dify)

K8s가 해결한 문제

1. **배포 자동화** — 선언형 YAML로 원하는 상태 기술

2. **자가 치유** — Pod 죽으면 자동 재시작

3. **수평 확장** — HPA/VPA/Karpenter

4. **서비스 디스커버리** — 내장 DNS + Service

5. **롤링 배포** — 다운타임 없는 업데이트

6. **리소스 관리** — CPU/메모리 제한 + 스케줄링

7. **스토리지 추상화** — CSI (Container Storage Interface)

8. **멀티 클라우드** — 동일 YAML이 AWS/GCP/Azure에서 동작

K8s가 새로 만든 문제

1. **인지 부담 폭발** — 40+ 기본 리소스, 수백 개 개념

2. **네트워킹 복잡** — CNI + kube-proxy + Ingress + Service Mesh

3. **보안 복잡** — RBAC, NetworkPolicy, PodSecurity, Secret 관리

4. **디버깅 어려움** — 왜 Pod가 Pending? 왜 502? 원인 추적 지옥

5. **업그레이드 지옥** — 3개월 릴리스 주기, API 변경

6. **비용 통제 어려움** — 리소스 과할당, idle node

7. **한 사람이 다 아는 건 불가능** — 팀 규모 최소 3명 이상 필요

"K8s는 정말 필요한가"라는 질문이 반복되는 이유다. **중소 서비스는 Heroku, Fly.io, Render, Vercel로 충분**하다. K8s는 **조직 규모, 워크로드 다양성, 멀티 클라우드 요구**가 있을 때 가치가 드러난다.

Control Plane 아키텍처

K8s는 **Control Plane** + **Data Plane**(Worker Nodes)으로 나뉜다.

Control Plane (제어 평면)

┌─────────────────────────────────────────┐

│ kube-apiserver │

│ (모든 변경의 유일한 진입점, REST API) │

│ ↕ │

│ etcd (분산 KV 스토어, 클러스터 상태) │

│ ↕ │

│ kube-scheduler (Pod → Node 배정) │

│ kube-controller-manager │

│ (ReplicaSet, Deployment, Job ... 루프) │

│ cloud-controller-manager │

│ (LoadBalancer, Volume ... 클라우드 통합)│

└─────────────────────────────────────────┘

Data Plane (Worker Nodes)

┌────────────┬────────────┬────────────┐

│ Node 1 │ Node 2 │ Node 3 │

│ kubelet │ kubelet │ kubelet │

│ kube-proxy │ kube-proxy │ kube-proxy │

│ container │ container │ container │

│ runtime │ runtime │ runtime │

│ (containerd│(containerd │(containerd │

│ /CRI-O) │ /CRI-O) │ /CRI-O) │

│ Pods... │ Pods... │ Pods... │

└────────────┴────────────┴────────────┘

etcd — 모든 상태의 유일한 진실

etcd는 Raft 컨센서스 기반 분산 KV 스토어. 보통 3-5대. 모든 K8s 객체가 여기 저장.

- **버전**: 홀수(3, 5, 7, ...) 유지 — 장애 허용 = (n-1)/2

- **크기 제한**: 기본 2GB, 최대 8GB

- **성능**: ~10000 writes/sec, 디스크 I/O 민감

- **백업 필수** — etcdctl snapshot save

**주의**: etcd 장애 = 클러스터 다운. 그래서 관리형 K8s(EKS, GKE)는 Control Plane을 클라우드 사업자가 운영.

API Server — 모든 변경의 문지기

모든 `kubectl` 명령, 컨트롤러, kubelet 호출이 여기로 향함. 인증 → 인가 → admission control → etcd 저장의 파이프라인.

Scheduler — Pod가 어느 Node에 가는가

2단계:

1. **Filter** — nodeSelector, affinity, taint/toleration, 리소스 맞는 노드만

2. **Score** — 남은 노드 중 최적 선택 (LeastRequested, 이미지 locality, ...)

**Pod Topology Spread Constraints**, **PriorityClass** 등으로 세밀 제어 가능.

Controller Manager — 무한 Reconciliation Loop

for {

desired := getDesiredState() // YAML에서

current := getCurrentState() // 실제 상태

if desired != current {

reconcile(desired, current)

}

sleep(resyncPeriod)

}

이 **level-triggered** 패턴이 K8s의 핵심 철학 — "명령형 if-then 대신 상태 선언".

Pod — 최소 배포 단위

**Pod**는 1개 이상의 컨테이너 묶음. 같은 네트워크 namespace와 볼륨 공유.

apiVersion: v1

kind: Pod

metadata:

name: my-app

spec:

containers:

- name: app

image: my-app:1.0

resources:

requests: { cpu: 100m, memory: 128Mi }

limits: { cpu: 500m, memory: 512Mi }

readinessProbe:

httpGet: { path: /healthz, port: 8080 }

initialDelaySeconds: 5

livenessProbe:

httpGet: { path: /healthz, port: 8080 }

periodSeconds: 10

- name: sidecar # 같은 Pod의 부 컨테이너

image: log-shipper:2.0

**requests vs limits 차이**:

- `requests` — 스케줄러가 보장하는 최소 리소스

- `limits` — 컨테이너가 넘을 수 없는 상한

**OOMKilled**(메모리 초과 시 강제 종료), **CPU throttling**(CPU 초과 시 느려짐) — 이 둘이 가장 흔한 장애 원인.

Probe 3종

- **startupProbe** — 느린 앱 초기화 (JVM) 보호. 성공하면 이후 다른 probe 활성화

- **livenessProbe** — "죽었나?" 실패 시 재시작

- **readinessProbe** — "트래픽 받을 준비?" 실패 시 Service endpoint에서 제외

**흔한 실수**: liveness를 DB 연결까지 확인하게 만들면, DB 지연으로 전체 Pod 재시작 → 폭주.

Deployment, StatefulSet, DaemonSet, Job

Deployment — Stateless 앱

apiVersion: apps/v1

kind: Deployment

metadata: { name: web }

spec:

replicas: 3

selector: { matchLabels: { app: web } }

template:

metadata: { labels: { app: web } }

spec:

containers:

- name: web

image: web:v2

strategy:

type: RollingUpdate

rollingUpdate:

maxSurge: 1 # 업데이트 중 최대 +1 Pod

maxUnavailable: 0 # 다운 허용 0

StatefulSet — 정체성 있는 Pod

- 이름이 고정 (web-0, web-1, web-2)

- 순차 배포 / 역순 삭제

- 각 Pod별 영구 볼륨

- 사용처: DB, Kafka, Redis cluster

DaemonSet — 노드마다 1 Pod

- 모든 노드(또는 nodeSelector에 맞는 노드)에 1개씩

- 사용처: 로그 수집(Fluent Bit), 모니터링 에이전트, CNI plugin

Job / CronJob — 배치/스케줄 작업

- `Job` — 완료될 때까지 실행

- `CronJob` — cron 표현식 스케줄

Service — 내부 로드 밸런서

Pod는 IP가 변하지만 Service는 안정적인 DNS/IP 제공.

apiVersion: v1

kind: Service

metadata: { name: web-svc }

spec:

selector: { app: web }

ports: [{ port: 80, targetPort: 8080 }]

type: ClusterIP # 기본 — 클러스터 내부만

type: NodePort — 각 노드의 특정 포트로 노출

type: LoadBalancer — 클라우드 LB 생성

Service는 kube-proxy가 iptables 또는 IPVS 규칙으로 구현. Cilium은 eBPF로 대체.

Ingress — HTTP L7 라우팅

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

name: my-ingress

spec:

rules:

- host: api.example.com

http:

paths:

- path: /users

pathType: Prefix

backend: { service: { name: user-svc, port: { number: 80 } } }

Ingress 컨트롤러 선택지: NGINX Ingress, Traefik, HAProxy, AWS ALB Controller, GKE Ingress.

Gateway API — Ingress의 후계자

2023년 GA. Ingress의 한계(L7 제한, 다중 테넌시 어려움)를 해결.

apiVersion: gateway.networking.k8s.io/v1

kind: HTTPRoute

metadata: { name: api-route }

spec:

parentRefs:

- name: my-gateway

hostnames: ["api.example.com"]

rules:

- matches: [{ path: { type: PathPrefix, value: /users } }]

backendRefs:

- name: user-svc

port: 80

**장점**: 역할 분리(Gateway는 인프라 팀, HTTPRoute는 앱 팀), 표준 L7, TCP/UDP 지원, traffic splitting.

CNI — Container Network Interface

모든 Pod에 고유 IP를 주고 서로 통신 가능하게. CNI plugin이 구현.

주요 CNI

| CNI | 방식 | 특징 |

|---|---|---|

| **Flannel** | VXLAN overlay | 가장 단순, 시작용 |

| **Calico** | BGP routing | NetworkPolicy 강점, 대규모 |

| **Cilium** | **eBPF** | 성능 최강, observability |

| **Weave Net** | VXLAN | 가장 오래됨 |

| **AWS VPC CNI** | AWS ENI 직접 | EKS 기본 |

| **Azure CNI** | Azure VNet | AKS 기본 |

| **GKE Dataplane V2** | Cilium 기반 | GKE 기본 |

eBPF — 커널 안의 작은 VM

**eBPF**(extended Berkeley Packet Filter)는 리눅스 커널에서 검증된 바이트코드를 실행하는 샌드박스. 2014년 도입, 2020년대 폭발.

- **Cilium** — L7까지 eBPF로 처리, kube-proxy 대체

- **Falco** — eBPF 기반 보안 감사

- **Pixie** — eBPF 기반 K8s observability

- **Tetragon** — eBPF 실시간 런타임 보안

eBPF는 컨테이너 런타임, 네트워킹, observability를 재정의 중. 2024년 CNCF Graduated project.

Service Mesh — sidecar vs Ambient 논쟁

Service Mesh는 마이크로서비스 간 **통신 관리 계층**: mTLS, retry, circuit breaker, traffic splitting, observability.

Sidecar 패턴 (Istio, Linkerd 전통)

각 Pod에 Envoy/proxy 컨테이너 추가.

Pod {

App Container

Envoy Sidecar ← 모든 in/out 트래픽 intercept

}

**장점**: 앱 변경 없음, 언어 무관.

**단점**: 리소스 2배, Pod당 수백MB 메모리, 업그레이드 어려움.

Ambient Mesh (Istio 2022-2024)

Sidecar 없애고 **노드 단위 ztunnel** + **Waypoint Proxy**로 대체.

Node {

ztunnel (L4: mTLS, observability)

Pod A, Pod B, Pod C ← sidecar 없음

}

+ Waypoint (L7 기능 필요 시 namespace당 배포)

**장점**: 리소스 절약, 점진적 도입 가능, 업그레이드 Pod 재시작 불필요.

**단점**: 2024년 GA, 아직 성숙도 낮음.

주요 Service Mesh

| Mesh | 제공자 | 특징 |

|---|---|---|

| **Istio** | Google/IBM | 기능 최다, 복잡도 최고, Ambient 신규 |

| **Linkerd** | Buoyant | 단순, 성능 좋음, Rust로 쓰인 데이터 플레인 |

| **Consul Connect** | HashiCorp | 멀티 플랫폼(VM+K8s) |

| **Cilium Service Mesh** | Isovalent | eBPF 기반, sidecar 없음 |

| **Kuma** | Kong | 엔터프라이즈 |

Service Mesh는 정말 필요한가

2024-2025 현장에서 답은 "**대부분은 필요 없다**"로 수렴. 이유:

- Ingress Controller + NetworkPolicy로 80% 해결

- Observability는 OpenTelemetry로 가능

- mTLS는 cert-manager + SPIFFE로 가능

- Service Mesh 학습/운영 비용이 이득 초과

**도입 기준**: 마이크로서비스 50+ 이상, 멀티 팀 독립 배포, 엄격한 zero-trust 요구.

GitOps — 배포의 선언형 혁명

2017년 Weaveworks가 제안. "**Git은 프로덕션의 유일한 진실**". 파이프라인이 아니라 **풀(pull) 기반 동기화**.

[Developer] → [Git PR] → [Merge]

[ArgoCD/Flux Controller] ← git poll

(diff 감지)

[K8s Apply]

ArgoCD

apiVersion: argoproj.io/v1alpha1

kind: Application

metadata: { name: my-app }

spec:

project: default

source:

repoURL: https://github.com/org/repo

path: k8s/overlays/prod

targetRevision: HEAD

destination:

server: https://kubernetes.default.svc

namespace: prod

syncPolicy:

automated:

prune: true

selfHeal: true

- 웹 UI 제공, 여러 앱 한눈에

- App of Apps 패턴

- Rollback = git revert

Flux

- CNCF Graduated

- Helm, Kustomize, OCI artifacts 지원

- 경량화 (UI 없음, `fluxcd` CLI)

- 2024년 Flagger 통합으로 progressive delivery

GitOps가 해결한 문제

- "프로덕션에 뭐가 배포됐는지 몰라" → git이 진실

- "kubectl 누가 뭘 바꿨지?" → 직접 변경 자동 되돌림 (drift detection)

- "rollback 어떻게?" → git revert

Helm vs Kustomize vs Jsonnet

매니페스트 관리 도구 3대장.

Helm

- 템플릿 엔진 (Go template)

- Chart 패키징, Helm Hub 생태계

- `values.yaml`로 환경별 오버라이드

templates/deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: "{"{"}}{"{"} .Release.Name {"}"}{"}"}"

spec:

replicas: "{"{"}}{"{"} .Values.replicas {"}"}{"}"}"

**장점**: 광대한 생태계 (nginx, redis, postgres 공식 chart).

**단점**: 템플릿 지옥, 디버깅 어려움.

Kustomize

- 오버레이 패턴, 템플릿 없이 patch

- `kubectl` 내장

base/deployment.yaml — 공통

overlays/prod/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1

kind: Kustomization

resources:

- ../../base

patches:

- patch: |-

- op: replace

path: /spec/replicas

value: 10

target: { kind: Deployment }

**장점**: 템플릿 없이 순수 YAML, 디버깅 쉬움.

**단점**: Helm 생태계 부재.

Jsonnet / CUE / KCL

- JSON/YAML을 프로그래밍 언어로 생성

- Grafana, Databricks 사용

- CUE는 Google 내부 구성 언어에서 유래

- **KCL**(Kusion)은 2024년 CNCF Sandbox 진입, Kubernetes 특화

Operator 패턴 — CRD로 K8s 확장

DB, Kafka, Cert-Manager 같은 **stateful 앱을 K8s에 통합**하는 표준 방식.

apiVersion: apiextensions.k8s.io/v1

kind: CustomResourceDefinition

metadata: { name: postgresqls.db.acme.io }

spec:

group: db.acme.io

versions: [{ name: v1, served: true, storage: true, schema: {...} }]

scope: Namespaced

names: { plural: postgresqls, singular: postgresql, kind: PostgreSQL }

이제 사용자는:

apiVersion: db.acme.io/v1

kind: PostgreSQL

metadata: { name: my-db }

spec:

version: "16"

replicas: 3

storage: 100Gi

**Operator**(컨트롤러)가 이를 실제 StatefulSet, Service, PVC, ConfigMap으로 변환 + 백업/장애 대응.

유명한 Operator

- **Prometheus Operator** — 모니터링

- **cert-manager** — TLS 자동화

- **CloudNativePG, Zalando PG Operator** — PostgreSQL

- **Strimzi** — Kafka

- **Elastic Operator** — Elasticsearch

- **Istio Operator** — Istio 설치

- **ArgoCD Operator** — ArgoCD 관리

- **Crossplane** — 클라우드 리소스를 K8s 리소스로

OperatorHub.io

600+ 공식 operator. "K8s Native"의 대부분 뜻하는 것.

Platform Engineering — 플랫폼 팀의 부상

**Platform Engineering**은 2022-2023년 급부상. "**개발자 생산성**을 제품으로 다루는 팀".

왜 Platform Engineering인가

- DevOps "you build it, you run it"이 너무 큰 부담

- 모든 팀이 K8s, Terraform, Argo, 모니터링을 전문가 수준으로 다 할 수 없음

- **Internal Developer Platform (IDP)** — 사내 Heroku 같은 추상화 제공

Backstage (Spotify, 2020 CNCF 기증)

Platform Engineering의 UI 표준.

apiVersion: backstage.io/v1alpha1

kind: Component

metadata:

name: user-service

annotations:

github.com/project-slug: org/user-service

sentry.io/project-slug: user-service

spec:

type: service

lifecycle: production

owner: team-platform

system: user-management

- **Software Catalog** — 사내 서비스/API/라이브러리 목록

- **Scaffolder** — 템플릿 기반 서비스 생성

- **TechDocs** — Markdown 기반 문서 자동 배포

- **Integrations** — GitHub, PagerDuty, Prometheus, ArgoCD, ...

Humanitec, Port, Cortex, Mia-Platform

Backstage의 SaaS 대안들. 2024-2025년 IDP 시장 폭발.

Platform as Product 철학

- 내부 사용자를 '고객'으로

- OKR, NPS 측정

- 기능은 adoption으로 검증

- 문서화와 DX가 성공의 80%

Autoscaling — HPA, VPA, Karpenter

HPA (Horizontal Pod Autoscaler)

Pod 수를 늘이고 줄임. CPU/메모리/커스텀 메트릭 기반.

apiVersion: autoscaling/v2

kind: HorizontalPodAutoscaler

metadata: { name: web-hpa }

spec:

scaleTargetRef: { kind: Deployment, name: web }

minReplicas: 2

maxReplicas: 20

metrics:

- type: Resource

resource: { name: cpu, target: { type: Utilization, averageUtilization: 70 } }

**KEDA** (Kubernetes Event-Driven Autoscaling) — Kafka 랙, SQS depth, Prometheus 쿼리 등 60+ 스케일러.

VPA (Vertical Pod Autoscaler)

Pod의 requests/limits 자동 조정. 재시작 필요해서 **권장 모드만**(recommend) 쓰는 경우 많음.

Cluster Autoscaler vs Karpenter

**Cluster Autoscaler** — 전통적, node group 기반, 느림.

**Karpenter** (AWS, 2021) — just-in-time 노드 프로비저닝, 수초 내, 비용 최적화 자동.

apiVersion: karpenter.sh/v1

kind: NodePool

metadata: { name: default }

spec:

template:

spec:

requirements:

- key: "karpenter.sh/capacity-type"

operator: In

values: ["spot", "on-demand"] # Spot 우선

- key: "kubernetes.io/arch"

operator: In

values: ["amd64", "arm64"]

limits: { cpu: "1000" }

disruption:

consolidationPolicy: WhenUnderutilized

expireAfter: 720h

Karpenter로 **비용 30-50% 감소** 사례 흔함.

비용 최적화 — 2024 핵심 이슈

K8s의 보이지 않는 비용 문제:

- 과도한 requests → 유휴 리소스 다량

- idle node → 시간당 돈

- PVC 미사용 → 스토리지 비용

- 로그/메트릭 보관 → 관찰 도구 비용

도구

- **OpenCost** — CNCF 프로젝트, 네임스페이스/워크로드별 비용

- **Kubecost** — OpenCost의 상업 버전, UI 강력

- **Cast.ai** — 자동 최적화 SaaS

- **Spot.io (NetApp)** — Spot 인스턴스 자동 관리

- **Datadog Cost Management** — APM + 비용 통합

체크리스트

1. Karpenter + Spot 70% 이상

2. Right-sizing (VPA recommend + 수동 조정)

3. HPA + PodDisruptionBudget

4. 미사용 PVC, namespace 정리

5. 개발/스테이징 nightly shutdown

6. Prometheus 메트릭 cardinality 감소

Observability — 3 pillars + eBPF

Metrics (Prometheus + Grafana)

- 표준 조합. 서비스별 exporter, PromQL

- Thanos, Cortex, Mimir로 장기 저장

- VictoriaMetrics (대안, 성능 강점)

Logs (Loki, Elastic, Datadog)

- Loki: Grafana Labs, 라벨 기반 저장 (저비용)

- Elastic: 전문 검색 강점

- Vector (Datadog), Fluent Bit: 로그 수집

Traces (OpenTelemetry + Jaeger/Tempo)

- OpenTelemetry가 2024년 de facto 표준

- 언어별 SDK + Collector

- Tempo, Jaeger, Zipkin, Datadog, Honeycomb 백엔드

Continuous Profiling (2024 주류화)

- **Parca, Pyroscope, Grafana Cloud Profiling** — eBPF로 CPU/메모리 프로파일링

- "왜 이 Pod가 CPU를 많이 쓰는지" 런타임 확인

2025년 Kubernetes 트렌드

WASM 런타임

- **SpinKube** (Fermyon, CNCF Sandbox) — WASM을 K8s 1차 시민으로

- **wasmCloud** — 분산 WASM 액터 모델

- **Kwasm** — kubelet에 WASM 런타임 주입

- 장점: 콜드 스타트 수 ms, 샌드박싱 강력, 언어 무관

AI/ML 워크로드

- **KubeRay** — Ray(분산 AI 프레임워크) K8s Operator

- **Kubeflow** — ML 파이프라인

- **Volcano** — 배치 + gang scheduling (GPU 공유)

- **NVIDIA GPU Operator** — GPU driver + 런타임 자동화

CRD as API

- **Crossplane** — AWS/GCP 리소스도 K8s manifest로

- **Terraform Controller**, **Atlas** — 선언형 클라우드 리소스

Confidential Containers

- TEE(Intel SGX, AMD SEV)로 암호화된 컨테이너

- 헬스케어, 금융 규제 대응

대안 — K8s가 과한 경우

| 도구 | 적합한 경우 |

|---|---|

| **Heroku** | 초기 스타트업, < 20 서비스 |

| **Fly.io** | Edge + 지역 배포, WebSocket 워크로드 |

| **Render** | Heroku 유사, Postgres 내장 |

| **Railway** | PaaS, 심플 |

| **Vercel/Netlify** | 프론트엔드 + Serverless |

| **AWS ECS/Fargate** | AWS 중심 + K8s 복잡도 피함 |

| **Cloud Run (GCP)** | 요청 기반 과금, HTTP만 |

| **Nomad** (HashiCorp) | 비컨테이너 + VM 워크로드 |

"**K8s가 과했다**"는 후기는 2023-2024년 여럿 — [37signals](https://37signals.com)의 HEY 탈 K8s 회자됨.

실전 운영 체크리스트 (2025)

1. **관리형 사용** — EKS, GKE, AKS 우선. 자체 운영은 팀 10명+일 때만

2. **버전 전략** — 최신 -1, -2 유지, 6개월마다 업그레이드

3. **RBAC 최소 권한** — `view`/`edit`/`admin` 기본 롤 활용

4. **NetworkPolicy 기본 deny** — 기본 egress 차단

5. **PodSecurityStandard** — `restricted` 프로필 기본

6. **Secret 관리** — External Secrets + Vault/AWS Secrets Manager

7. **Backup** — Velero + etcd snapshot

8. **GitOps** — ArgoCD 또는 Flux, `kubectl apply` 금지

9. **Monitoring** — Prometheus + Grafana + Loki

10. **Cost** — Kubecost/OpenCost + Karpenter + Spot

11. **Platform Eng.** — Backstage IDP 구축 (팀 50명+일 때)

12. **Disaster Recovery** — multi-region 또는 multi-cluster 훈련 분기별

10가지 흔한 안티패턴

1. **latest 태그** — 롤백 불가, 재현 불가

2. **리소스 requests 없음** — 스케줄러 오판, QoS BestEffort

3. **liveness에 DB 포함** — 폭주 재시작

4. **Node SSH 직접 변경** — drift, GitOps 원칙 파괴

5. **Namespace 없이 default에 모두** — 권한/격리 파괴

6. **ClusterRoleBinding 남발** — 권한 과도

7. **LoadBalancer Service 서비스마다** — 클라우드 LB 수십 개 = 비용 폭탄

8. **모든 것을 Operator로** — 오버엔지니어링, 유지보수 부담

9. **Service Mesh 먼저, 필요 확인 나중** — 복잡도 2-3배 증가

10. **CRD 난립** — CRD 50+ 되면 누구도 전체 이해 불가

다음 글 예고 — "관측 가능성(Observability)의 현재" — Prometheus, OpenTelemetry, eBPF, Continuous Profiling 심화

K8s를 다뤘으니 그 다음은 **"그래서 시스템이 지금 뭐 하고 있는지 어떻게 아는가"**다. 2024-2025년 관측 가능성(Observability)은 혁명의 한복판에 있다. **OpenTelemetry** 1.0 GA, **eBPF** 기반 agentless 프로파일링, **Continuous Profiling**의 주류화, **Datadog vs Grafana vs Honeycomb vs New Relic**의 경쟁 구도가 완전히 재편됐다.

다음 글에서는:

- **3 pillars + profiling** — Metrics, Logs, Traces, Continuous Profiling

- **Prometheus 깊이** — PromQL, cardinality 지옥, Thanos/Cortex/Mimir

- **OpenTelemetry 1.0** — 왜 de facto 표준이 됐나

- **분산 트레이싱** — span propagation, W3C trace-context

- **eBPF Observability** — Pixie, Parca, Pyroscope, Beyla

- **Structured Logging** — Loki, Elastic, Vector, Fluent Bit

- **SLO/SLI/Error Budget** — Google SRE의 대중화

- **Alerting 철학** — page-worthy vs dashboard

- **Chaos Engineering** — Litmus, Chaos Mesh, Gremlin

- **상업 SaaS 비교** — Datadog, Honeycomb, Grafana Cloud, New Relic 2025 시점

을 다룬다. '**모르는 것을 알게 되는 기술**', 현대 시스템 운영의 가장 중요한 역량을 원리부터 실전까지 추적한다.

현재 단락 (1/438)

2003년 Google은 **Borg**라는 자사 클러스터 관리 시스템으로 수십만 머신을 운영하고 있었다. 2014년, Borg 설계자 Joe Beda, Brendan Burns,...

작성 글자: 0원문 글자: 14,358작성 단락: 0/438