DevOps/Kubernetes
[Kubernetes] 쿠버네티스 컴포넌트
TTOII
2023. 2. 7. 02:20
728x90
쿠버네티스 클러스터의 컴포넌트
- 마스터 컴포넌트
- etcd
- 쿠버네티스 클러스터 구성을 유지하는 분산 KVS. 데이터를 Key-Value형으로 관리한다.
- 어떤 파드를 어떻게 배치할지와 같은 정보를 갖고 있어서 API Server가 이를 참조한다.
- 매니페스트의 내용이 저장되어 있다고 생각하면 좋을 것이다.
- 분산 시스템에서 노드 사이의 상태를 공유하는 합의 알고리즘 중 하나인 raft 알고리즘을 구현한 것.
- 쿠버네티스에서는 필요한 모든 데이터를 저장하는 데이터베이스 역할을 한다.
- 마스터 서버에서 분리시킬 수도 있다.
- kube-apiserver
- 쿠버네티스 클러스터의 API를 사용할 수 있도록 하는 컴포넌트
- 쿠버네티스의 리소스 정보를 관리하기 위한 프런트엔드 REST API. 각 컴포넌트로부터 리소스 정보를 받아 데이터스토어(etcd)에 저장하는 역할을 갖고 있다.
- 클러스터로의 요청이 유효한지 검증한다.
- API Server에 액세스 하려면 kubectl 명령을 사용한다. 또 애플리케이션 안에서 API Server를 호출할 수도 있다.
- 수평적으로 확장할 수 있도록 설계했으므로 서버 여러 대에 여러 개의 kube-apiserver를 실행해 사용할 수 있다.
- kube-scheduler
- 현재 클러스터 안에서 자원 할당이 가능한 노드 중 알맞은 노드를 선택해 새롭게 만든 파드를 실행한다.
- kube-controller-manger(cm)
- 쿠버네티스 클러스터의 상태를 감시하고 본래 되어야 할 상태를 유지하는 백엔드 컴포넌트.
- 정의 파일에서 정의한 것과 실제 노드나 컨테이너에서 작동하고 있는 상태를 모아서 관리한다.
- 스케일아웃을 관리한다.
- cloud-controller-manger(ccm)
- 쿠버네티스의 컨트롤러들을 클라우드 서비스와 연결해 관리하는 컴포넌트
- 자신의 사내 또는 PC 내부의 학습 환경에서 쿠버네티스를 실행 중인 경우 ccm이 존재하지 않는다.
- 노드 컨트롤러 : 노드가 응답을 멈춘 후 클라우드 상에서 삭제되었는지 판별하기 위해 클라우드 제공 사업자에게 확인하는 것
- 라우트 컨트롤러 : 기본 클라우드 인프라에 경로를 구성하는 것
- 서비스 컨트롤러 : 클라우드 제공 사업자 로드밸런서를 생성, 업데이트 그리고 삭제하는 것
- etcd
- 노드 컴포넌트
- kubelet
- 모든 노드에서 실행되는 에이전트
- 파드 정의 파일에 따라 컨테이너를 실행하거나 스토리지를 마운트 하는 기능을 갖고 있다.
- 노드의 Status를 정기적으로 감시하는 기능을 갖고 있어 정기적으로 API Server에게 통지한다.
- 파드 컨테이너들의 실행을 직접 관리한다.
- kube-proxy
- 쿠버네티스는 클러스터 안에 별도의 가상 네트워크를 설정하고 관리한다.
- 호스트의 네트워크 규칙을 관리하거나 연결을 전달할 수도 있다.
- Container Runtime
- 실제로 컨테이너를 실행시킨다.
- docker, contianerd, cri-o 등
- kubelet
kubelet이란
Kubelet
이란 각 노드에서 실행되는 기본 Node Agent이다.
아키텍처에 보이는 것 처럼 api-server와 통신하며, PodSpec을 사용해 PodSpec에 기술된 컨테이너들이 정상적으로 작동되도록 돕는다.
Worker Node가 배라면 Kubelet은 선장이라고 할 수 있다.
관리자가 Pod을 배포하려고 할 경우,
1) api-server를 비롯한 컨트롤 플레인의 컴포넌트들은 명령에 대한 인가 및 인증을 수행하고,
2) 선언된 상태와 일치하지 않는 Pod가 있는지 확인하고,
3) 어떤 Node에 Pod를 배치하면 좋을지 결정한다.
어디에 배치할지는 Master Node의 컴포넌트들 정확히는 Scheduler
가 결정하지만 실제로 Container runtime(Docker 등)에 배치를 명령하는 것은 Kubelet
의 역할이다.
만약, Worker Node에서 동작중인 Kubelet
이 정지되면 컨테이너 런타임에 요청을 보내는 역할을 수행해주는 컴포넌트가 정지되었으므로 Pod 생성, 삭제 등이 해당 Node에서 정상적으로 수행되지 않는다.
📌 참고
728x90