쿠버네티스(k8s)의 구성요소 및 작동원리
이번엔 쿠버네티스(k8s)의 구성요소와 작동원리를 정리하는 블로그를 작성 해보려 합니다.
여기서 쿠버네티스란 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 플랫폼입니다.
쿠버네티스의 구성 요소 및 작동 원리
마스터 노드(Master Node)
클러스터의 제어와 관리를 담당하는 중앙 노드이다. 마스터 노드는 쿠버네티스 API 서버, 컨트롤러 매니저, 스케줄러, etcd 등으로 구성되며 사용자의 명령을 받아 처리하고, 클러스터의 상태를 모니터링하며, 필요에 따라 변경 작업을 수행합니다.
워커 노드(Worker Node)
실제 컨테이너화된 애플리케이션을 실행하는 노드입니다. 각 워커 노드는 컨테이너 런타임(예: Docker)와 Kubelet이라는 에이전트를 포함하고 있으며. Kubelet은 마스터 노드의 지시를 받아 컨테이너를 생성, 시작, 중지하는 등의 작업을 수행합니다.
파드(Pod)
쿠버네티스에서 배포 단위로서, 하나 이상의 컨테이너와 저장소, 네트워크 IP, 컨테이너가 어떻게 동작해야 하는지에 대한 옵션 등을 포함하고 있습니다. Pod는 워커 노드에 분산 배치되며, 한 개 이상의 컨테이너를 포함할 수 있지만, 일반적으로 하나의 메인 컨테이너와 그 메인 컨테이너를 지원하는 '사이드카' 컨테이너로 구성됩니다.
클러스터(Cluster)
쿠버네티스의 전체 시스템을 의미하며, 여러 노드(마스터 노드와 워커 노드들)로 구성됩니다. 클러스터는 애플리케이션의 확장성과 고가용성을 지원하며, 필요에 따라 리소스를 자동으로 조정합니다.
- 이런 구조를 통해 k8s는 애플리케이션의 배포, 스케일링, 업데이트, 장애 복구 등을 자동으로 처리하며, 개발자와 운영팀은 애플리케이션 자체에 집중할 수 있게 해줍니다.
쿠버네티스의 핵심 구성 요소 정리
etcd
쿠버네티스 클러스터의 모든 데이터를 저장하는 분산 키-값 저장소입니다. 클러스터의 상태 정보나 설정 값 등을 저장하며, 클러스터의 노드간 일관성을 보장합니다. etcd는 분산 시스템에서 중요한 CP(Consistency, Partition Tolerance) 특성을 만족하는 데이터베이스로, 쿠버네티스 클러스터의 신뢰성을 보장하는 역할을 합니다.
API Server
쿠버네티스의 핵심 컴포넌트로, 사용자와 클러스터 간의 인터페이스 역할을 합니다. 모든 관리적인 작업은 API 서버를 통해 수행되며, 이 서버는 RESTful API를 제공합니다. API 서버는 클러스터에 대한 모든 요청을 처리하고, 요청된 작업을 수행하거나 etcd에 저장합니다.
Controller Manager
여러 종류의 컨트롤러를 실행하는 데몬입니다. 노드 컨트롤러, 레플리케이션 컨트롤러, 엔드포인트 컨트롤러 등이 있으며, 이들 컨트롤러는 클러스터의 상태를 관찰하고, 필요한 경우 상태를 변경하기 위해 작업을 수행합니다.
Scheduler
새로 생성된 Pod를 클러스터의 워커 노드에 스케줄링하는 역할을 합니다. 스케줄러는 Pod의 요구사항과 노드의 리소스를 고려하여 가장 적합한 노드를 선택하고, 선택된 노드에서 Pod를 실행하도록 지시합니다.
- 이렇게 k8s는 여러 컴포넌트가 서로 협력하여 클러스터를 관리하고, 애플리케이션의 운영을 자동화 합니다. 각 컴포넌트는 특정한 역할을 가지고 있으며, 이들이 잘 조화되어 동작함으로써 k8s의 강력한 기능을 제공합니다.