brief.ing.gg

WIKI

Kubernetes

Kubernetes

컨테이너 오케스트레이션 시스템의 핵심 추상화는 무엇인가.

Scope

핵심 질문

Kubernetes는 컨테이너화된 워크로드의 원하는 상태를 어떻게 선언하고 유지하는가?

Research

핵심 근거

  • Kubernetes는 desired state를 API object로 저장하고 controller가 실제 상태를 계속 조정하는 reconciliation 모델을 사용한다.
  • Pod는 기본 실행단위이고 Deployment, Service, StatefulSet 등 상위 객체가 배포와 네트워크, 상태를 관리한다.
  • 강력한 확장성과 생태계의 대가로 control plane과 수많은 추상화의 운영복잡도가 생긴다.

참고 자료

  • Kubernetes docs: https://kubernetes.io/docs/

Draft

Kubernetes는 여러 노드에 컨테이너 워크로드를 배치하고 원하는 상태를 지속적으로 유지하는 컨테이너 오케스트레이션 시스템이다.

원하는 상태를 선언한다

사용자는 '이 컨테이너를 세 개 실행해라', '이 이름으로 네트워크 서비스를 노출해라'처럼 원하는 상태를 API object로 제출한다.

Controller는 현재 상태와 원하는 상태를 비교하고 차이가 있으면 새 Pod를 만들거나 제거하면서 계속 조정한다. 이 reconciliation loop가 Kubernetes의 핵심이다.

주요 추상화

Pod는 하나 이상의 컨테이너가 함께 실행되는 기본 단위다. Deployment는 stateless Pod의 replica와 rolling update를 관리한다. StatefulSet은 안정적인 identity와 storage가 필요한 workload에 사용된다. Service는 변하는 Pod 집합에 안정적인 네트워크 접근점을 제공한다.

Scheduler와 Control Plane

Scheduler는 아직 배치되지 않은 Pod를 어느 node에서 실행할지 결정한다. API server와 etcd, controller manager 등 control plane 구성요소가 cluster state를 관리한다.

강점과 비용

Kubernetes는 self-healing, declarative rollout, autoscaling, service discovery와 확장성이 강점이다. 동시에 networking, storage, RBAC, ingress, observability 등 많은 하위시스템을 이해해야 한다.

핵심

Kubernetes의 본질은 '컨테이너를 실행하는 도구'보다 선언한 desired state를 cluster가 계속 만족하도록 조정하는 분산 제어시스템에 가깝다.