-
[K8S] ComponentKubernetes 2023. 8. 18. 16:09
클러스터(Cluster)
- 쿠버네티스를 배포하면 클러스터를 얻음
- 노드의 집합
- 모든 클러스터는 최소 한 개의 워커 노드를 가짐
컴포넌트(Component)
( 쿠버네티스를 이루는 구성 요소 )
컨트롤 플레인(Control Plane)
: 기능 제어를 전체적으로 담당
- kube-apiserver
- 쿠버네티스 컨트롤 플레인의 프론트 엔드
- 쿠버네티스 클러스터로 들어오는 요청을 가장 앞에서 접수하는 역할
- 예) kubectl을 사용해 각종 명령을 수행할 경우 kube-apiserver로 전송됨 전달된 요청에 대하여 kube-apiserver는 이 요청의 처리 흐름에 따라 적절한 컴포넌트로 요청을 전달하는 역할까지 맡고 있음
- etcd
- 쿠버네티스 클러스터가 동작하기 위해서는 클러스터 및 리소스의 구성 정보, 상태 정보 및 명세 정보 등이 필요. 이를 키-값(key-value) 형태로 저장하는 저장소
- = 워커 노드들에 대한 상태 정보 저장
- 안정적인 동작을 위해 자료를 분산해서 저장하는 구조를 채택
- 예) 회사 각종 중요 정보가 모두 모여있는 금고 매우 중요한 정보를 보관하는 금고이기 때문에 동일한 자료를 여러 금고에 나눠서 보관
- kube-scheduler
- 스케줄링을 담당
- 스케줄링 : 새로 생성된 파드를 감지하여 어떤 노드로 배치할지 결정하는 작업
- 스케줄링을 위해 노드 및 파드의 각종 요구사항과 제약사항을 종합적으로 판단
- 예) 인사 담당
- kube-controller-manager
- 다운된 노드가 없는지, 파드가 의도한 복제(Replicas) 숫자를 유지하고 있는지, 서비스와 파드는 적절하게 연결되어 있는지, 네임스페이스에 대한 기본 계정과 토큰이 생성되어 있는지 확인 및 적절한 수준을 유지하기 위해 조치하는 역할
- 예) 관리자
노드(Node)
: 컨트롤 플레인 컴포넌트의 요청을 받아 각 노드에서 동작을 담당
- kubelet
- 노드에서 컨테이너가 동작하도록 관리해 주는 핵심 요소
- 각 노드에서 파드를 생성하고 정상적으로 동작하는지 관리하는 역할을 담당
- 워크로드를 관리하기 위해 내려지는 명령은 kubelet을 통해 수행된다고 볼 수 있음
- YAML(파드를 관리하기 위해 작성하는 파일)을 클러스터에 적용하기 위해 kubectl 명령을 사용할 때 YAML → kube-apiserver로 전송 됨 → kubelet으로 전달 됨. YAML을 통해 전달된 파드를 생성 혹은 변경, 이후 컨테이너가 정상적으로 실행되고 있는지 확인
- 예) 지사에서 본사의 업무 요청을 받아 확인하는 역할을 수행
- container runtime
- 파드에 포함된 컨테이너 실행을 실질적으로 담당하는 애플리케이션
- 표준 규약인 CRI(컨테이너 런타임 인터페이스)를 준수하여 쿠버네티스와 함께 사용할 수 있는 외부 애플리케이션들을 의미 (쿠버네티스 구성 요소에 포함되어 있거나, 특정 소프트웨어를 지칭하는 것이 아님)
- 예) docker, containerd 등
- kube-proxy
- 쿠버네티스 클러스터 내부에서 네트워크 요청을 전달하는 역할
- 파드 IP는 파드가 배포될 때마다 매번 바뀜. 여기서 오는 어려움을 해결하기 위해 오브젝트를 통해 고정적으로 파드에 접근할 수 있도록 하는 방법을 제공
- 서비스로 들어온 요청이 파드에 실제로 접근할 수 있는 방법을 관리
- = 파드의 IP는 매번 변하지만 kube-proxy가 이 파드에 접근할 수 있는 방법을 그때마다 관리하고 갱신하며, 서비스 오브젝트는 이 정보를 사용하여 파드가 외부에서 접근할 수 있는 경로를 제공
Reference
'Kubernetes' 카테고리의 다른 글
[K8S] ETCD Backup & Restore (0) 2023.08.24 [K8S] K9S 설치하기 (0) 2023.08.23 [K8S] Ingress (0) 2023.08.22 [K8S] Kubeadm 이용해 설치하기 (+node 추가/삭제) (0) 2023.08.21 [K8S] Object (0) 2023.08.19