Kubernetes Architecture: The Complete Beginner-to-Intermediate Guide
개요
Kubernetes의 아키텍처는 컨트롤 플레인과 워커 노드로 구성되며, API 서버, etcd, 스케줄러, 컨트롤러 매니저 등의 컴포넌트를 통해 클러스터를 관리하고 애플리케이션을 배포 및 운영합니다.
주요 내용
* Kubernetes의 필요성: 수백 개의 서버, 수천 개의 컨테이너, 지속적인 배포, 하드웨어 장애, 트래픽 급증 등을 수동으로 관리하는 것은 불가능하며, Kubernetes는 이러한 작업을 자동화합니다.
* 고수준 아키텍처: Kubernetes 클러스터는 클러스터를 관리하는 컨트롤 플레인과 애플리케이션을 실행하는 워커 노드로 구성됩니다.
* 컨트롤 플레인 구성 요소:
* API 서버: 클러스터에 대한 게이트웨이 역할을 하며, kubectl과 같은 모든 상호작용이 이를 통해 이루어집니다.
* etcd: Pods, Deployments, Services, ConfigMaps, Secrets, 클러스터 구성 등 모든 정보를 저장하는 분산 키-값 데이터베이스로, Kubernetes의 "단일 진실 공급원(single source of truth)"입니다.
* 스케줄러: "어떤 워커 노드에서 이 Pod를 실행해야 할까?"를 결정하며, 사용 가능한 CPU, 메모리, Affinity 규칙, Taints/Tolerations, 리소스 제약 등을 평가합니다.
* 컨트롤러 매니저: ReplicaSet Controller, Node Controller, Deployment Controller 등과 같이 클러스터 상태를 지속적으로 모니터링하고, 원하는 상태에서 벗어날 경우 이를 수정합니다.
* 클라우드 컨트롤러 매니저: AWS와 같은 클라우드 환경에서 로드 밸런서, 노드 생명주기 관리, 클라우드 네트워킹 통합 등을 담당합니다.
* 워커 노드 구성 요소:
* Kubelet: 노드 에이전트로, Pod를 생성하고 상태를 모니터링하는 등의 주요 책임을 가집니다.
* 컨테이너 런타임: containerd, CRI-O 등이 있으며, 컨테이너를 실행합니다. Docker 지원은 이제 컨테이너 런타임을 통해 이루어집니다.
* Kube-proxy: 서비스 네트워킹을 담당하며, 서비스 디스커버리, 트래픽 라우팅, 로드 밸런싱 기능을 제공합니다.
* Pods: Kubernetes에서 가장 작은 배포 단위이며, 애플리케이션은 궁극적으로 Pod 내에서 실행됩니다.
* 배포 과정: Deployment YAML이 적용되면 API 서버가 요청을 받고, etcd에 원하는 상태를 저장하며, 스케줄러가 노드를 선택하고, Kubelet이 Pod를 생성하며, 컨테이너 런타임이 컨테이너를 시작하고, Kube-proxy가 네트워킹을 활성화합니다.
* 핵심 철학: Desired State Management로, 사용자가 "3개의 복제본을 원한다"고 선언하면 Kubernetes는 지속적으로 3개의 복제본이 유지되도록 보장하며, 이는 자체 복구 기능을 가능하게 하는 강력한 기능입니다.
시사점
Kubernetes 아키텍처에 대한 이해는 CKA 인증, DevOps, SRE, Platform Engineering, Cloud Engineering 등의 분야에서 프로덕션 환경의 장애를 효과적으로 해결하는 데 필수적입니다.
댓글
GitHub Discussions