본문은 인프런의 [쉽게 시작하는 쿠버네티스]를 수강하고 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다.
쿠버네티스 구성
1) 컨트롤 플레인 컴포넌트
- 컨트롤 플레인 컴포넌트는 쿠버네티스 기능 제어를 전체적으로 담당하고, 노드 컴포넌트는 컨트롤 플레인 컴포넌트의 요청을 받아 각 노드에서 동작을 담당한다
- 컴포넌트라는 용어가 헷갈렸는데 하위 요소 정도로 이해했다
- 컨트롤 플레인은 컨트롤 플레인 컴포넌트로 구성, 노드는 노드 컴포넌트로 구성
- kube-apiserver
- 공식 문서에서는 kube-apiserver를 '쿠버네티스 컨트롤 플레인의 프론트 엔드'라고 소개하고 있다
- kube-apiserver는 쿠버네티스 클러스터로 들어오는 요청을 가장 앞에서 접수하는 역할을 한다
- etcd
- etcd는 쿠버네티스 내 클러스터 및 리소스의 구성 정보, 상태 정보 및 명세 정보 등을 key-value 형태로 저장하는 저장소이다
- etcd는 안정적인 동작을 위해 자료를 분산해서 저장하는 구조를 채택하고 있다
- kube-scheduler
- 새롭게 생성된 파드를 감지하여 어떤 노드로 배치할지 결정하는 작업을 스케줄링이라고 하며, 이런 스케줄링을 담당하는 컴포넌트가 kube-scheduler이다
- kube-controller-manager
- kube-controller-manager는 말 그대로 관리자의 역할을 수행한다(스케줄러가 하지 않는 세부 조정을 담당한다고 한다)
- 즉, 다운된 노드가 없는지, 파드가 의도한 복제(Replicas) 숫자를 유지하고 있는지, 서비스와 파드는 적절하게 연결되어 있는지, 네임스페이스에 대한 기본 계정과 토큰이 생성되어 있는지를 확인하고 적절하지 않다면 적절한 수준을 유지하기 위해 조치하는 역할을 한다
2) 노드 컴포넌트
- kubelet
- kubelet은 노드에서 컨테이너가 동작하도록 관리해주는 핵심 요소
- 각 노드에서 파드를 생성하고 정상적으로 동작하는지 관리하는 역할을 담당하고 있으며, 실제로 쿠버네티스의 워크로드를 관리하기 위해 내려지는 명령은 kubelet을 통해 수행된다
- container runtime
- 컨테이너 런타임은 파드에 포함된 컨테이너 실행을 실질적으로 담당하는 애플리케이션을 의미한다
- 단,컨테이너 런타임은 쿠버네티스 구성 요소에 기본적으로 포함되어 있거나 특정 소프트웨어를 지칭하는 것은 아니다
- kube-proxy
- kube-proxy는 쿠버네티스 클러스터 내부에서 네트워크 요청을 전달하는 역할을 한다
- 파드 IP는 파드가 배포될 때마다 매번 바뀌기 때문에 쿠버네티스 오브젝트를 통해 고정적으로 파드에 접근할 수 있도록 하는 방법을 제공하고, 서비스로 들어온 요청이 파드에 실제로 접근할 수 있는 방법을 관리한다
- 이때 이 관리를 담당하는 컴포넌트가 kube-proxy이다
참고
'인프라 > Kubernetes' 카테고리의 다른 글
[쉽게 시작하는 쿠버네티스] 4. 쿠버네티스 오브젝트 (0) | 2022.08.30 |
---|---|
[쉽게 시작하는 쿠버네티스] 2. 배포를 통한 쿠버네티스 체험 (0) | 2022.08.17 |
[쉽게 시작하는 쿠버네티스] 1. 쿠버네티스 환경 구성 (0) | 2022.08.16 |