우노
[K8S] Control Plane, Data Plane이란? 본문
들어가기 앞서,
- 쿠버네티스 클러스터는 노드들의 집합이며, 노드는 두가지 종류로 이루어져있습니다.
- Master Node - Control Plane(컨트롤 플레인)
- 워커 노드 및 클러스터 내 파드들을 관리하고 제어합니다.
- Worker Node - Data Plane(데이터 플레인)
- 실제로 애플리케이션을 실행하는 파드들을 호스팅합니다.
- Master Node - Control Plane(컨트롤 플레인)
Control Plane(컨트롤 플레인)
- Control Plane은 실제 애플리케이션의 실행과는 무관하며, 클러스터의 상태를 관리하고 조정하는 데 초점을 맞춥니다.
- Control Plane의 구성 요소는 클러스터 전반의 안정성과 일관성을 유지하는 데 필수적입니다.
- 구성 요소
- API Server
- Kubernetes의 프론트엔드 역할을 하며, RESTful API 및
kubectl
명령어 등을 통해 클러스터에 대한 요청을 처리합니다. - 모든 인증 및 인가 절차를 처리하고, 클러스터의 상태를 클라이언트에게 제공합니다.
- Kubernetes의 프론트엔드 역할을 하며, RESTful API 및
- Controller Manager
- 다양한 컨트롤러를 실행하여 클러스터의 리소스를 지속적으로 모니터링하고 관리합니다.
- 클러스터의 현재 상태와 사용자가 원하는 상태(예: Deployment, ReplicaSet 등)가 동일해지도록 조정하는 역할을 합니다.
- Scheduler
- 어떤 워커 노드에 파드를 배정할지를 결정합니다.
- 파드의 리소스 요구 사항(CPU, 메모리 등)과 노드의 현재 상태를 기반으로 파드의 배치를 결정합니다.
- 실제로 파드를 실행하는 것은 워커 노드의 kubelet입니다.
- etcd
- 클러스터의 상태 정보를 저장하는 분산 키-값 저장소입니다.
- 클러스터의 모든 구성 및 상태 정보가 저장되며, 고가용성과 일관성을 보장합니다.
- API Server
Data Plane(데이터 플레인)
- Data Plane은 실제 사용자 애플리케이션이 실행되는 부분으로, 파드가 워커 노드에서 구체적인 작업을 수행합니다.
- 이는 실제 비즈니스 로직이 실행되는 곳입니다.
- 구성 요소
- kubelet
- 각 노드에서 실행되는 에이전트로, Master Node와 통신하여 할당된 파드를 실행하고 관리합니다.
- 스케줄러가 특정 노드에 파드를 할당하면, kubelet이 해당 파드에서 컨테이너를 실행합니다.
- 컨테이너의 라이프사이클을 관리하고, Pod의 상태를 주기적으로 API 서버에 보고합니다.
- kube-proxy
- 각 노드에서 실행되며, 네트워크 프록시 역할을 수행합니다.
- IP 변환 및 네트워크 통신을 관리하며, 클러스터 내 서비스 간의 네트워크 트래픽을 라우팅합니다.
- Kubernetes 서비스의 가상 IP를 유지하고, 트래픽이 올바른 파드로 전달되도록 합니다.
- Container Runtime
- 컨테이너를 실행하고 관리하는 엔진입니다.
- Docker, containerd, CRI-O 등 다양한 런타임이 사용될 수 있습니다.
- kubelet
Pod 생성 과정
kubectl
사용자는
kubectl
CLI를 사용하여 Kubernetes 클러스터에 Pod 생성 요청을 보냅니다.명령어 예시:
kubectl apply -f my-pod.yaml
kubectl
은 사용자로부터 명령을 받아서 Kubernetes API 서버에 RESTful API 요청을 보냅니다.
kube-apiserver
kubectl
로부터 받은 API 요청을 수신합니다.- 요청을 인증 및 인가한 후, 요청의 유효성을 검증합니다.
- 요청에 따라
etcd
에 변경 사항을 기록하거나, 필요한 다른 Control Plane 구성 요소에게 작업을 전달합니다.
etcd
- 클러스터의 상태를 저장하는 분산 저장소로, API 서버로부터 받은 상태 변경 요청(예: 새로운 Pod 추가)을 저장합니다.
- 모든 상태 정보는
etcd
에 저장되며, Control Plane 구성 요소들은 이를 참조하여 클러스터의 현재 상태를 확인합니다.
kube-controller-manager
etcd
를 통해 클러스터의 상태 변화를 감지하고, 클러스터의 실제 상태와 사용자가 원하는 상태(desired state)가 일치하도록 조정합니다.- Pod가 생성되었음을 감지하고, ReplicaSet 및 Deployment와 같은 컨트롤러가 이를 적절히 관리하도록 합니다.
kube-scheduler
- 스케줄러는 새로운 Pod가 할당되지 않은 상태로 대기하고 있음을 감지합니다.
- 클러스터 내의 모든 노드의 자원 상황을 평가하고, 새로운 Pod를 실행할 최적의 노드를 결정합니다.
- Pod의 스케줄링 정보를
etcd
에 기록합니다.
kubelet
- 각 노드에서 실행되며, 스케줄러가 지정한 Pod가 자신이 관리하는 노드에 할당되었음을 인식합니다.
- 컨테이너 런타임(Docker, containerd 등)을 사용하여 Pod의 컨테이너를 실제로 실행합니다.
- Pod의 상태를 지속적으로 모니터링하고, 필요한 경우 재시작 등의 작업을 수행합니다.
- 실행 상태를 주기적으로 API 서버에 보고합니다.
Pod 생성 과정 요약
- 사용자가
kubectl
명령어를 통해 클러스터에 요청을 보냅니다. - kube-apiserver가 요청을 처리하고 인증/인가 후, etcd에 상태를 기록합니다.
- kube-controller-manager가 상태 변경을 감지하고, 클러스터의 상태를 조정합니다.
- kube-scheduler가 Pod의 실행 위치를 결정합니다.
- kubelet이 노드에서 Pod의 컨테이너를 실행하고 상태를 모니터링합니다.
참고
- https://medium.com/coinone/좌충우돌-kubernetes-익히기-2-36e17a75d36c
- https://fisache.tistory.com/15
- https://awskrug.github.io/eks-workshop/introduction/basics/concepts_nodes/
- https://seongjin.me/kubernetes-cluster-components/
- https://catalog.us-east-1.prod.workshops.aws/workshops/9c0aa9ab-90a9-44a6-abe1-8dff360ae428/ko-KR/10-intro/100-k8s
- https://www.samsungsds.com/kr/insights/kubernetes-3.html
- https://dev.classmethod.jp/articles/summit-korea-report-eks/
- https://fisache.tistory.com/14
- https://www.redhat.com/ko/topics/containers/kubernetes-architecture
- https://velog.io/@koo8624/번역-쿠버네티스-아키텍처-Kubernetes-Architecture-Explained
- https://kb.novaordis.com/index.php/Kubernetes_Control_Plane_and_Data_Plane_Concepts
- https://carltsuis-blog.readthedocs.io/en/latest/kubernetes/Architecture of a Kubernetes cluster/
'DevOps > Kubernetes' 카테고리의 다른 글
[K8S] kubectl secret 명령어 (0) | 2023.06.10 |
---|---|
[K8S] Service - ClusterIP, NodePort, LoadBalancer (0) | 2023.03.26 |
[K8S] Label, Selector, Annotation (0) | 2023.03.01 |
[K8S] Nodeport, Port, Targetport 정리 (0) | 2023.03.01 |
[Kubernetes] MacOS 에서 VirtualBox 로 Kubernetes Cluster 구성하기 (0) | 2022.02.21 |
Comments