-
Kubernetes) Kubernetes cluster 이해Cloud/Kubernetes 2022. 10. 11. 00:12
학습 목표 : kubernetes의 cluster 구성요소와 Kubernetes 동작에대해 알아본다.
cluster 구성요소
- Master node (Control plane)
- 대규모 container를 운영하기위해 worker node의 가용리소스 현황을 고려하여, 최적의 container 배치 및 모니터링을하고 container에 대한 효율적인 추적관리를 수행한다.
- Master node가 수행하는 container 및 worker node관리는 Control Plane Component를 통해 수행한다.
- Worker node
- 각기 다른 목적과 기능으로 세분화된 컨테이너들이 실제로 배치되는 노드
- 각 node에서 Pod와 container를 구동시키고 관리하기위해 Node Component가 필요하다.
- Control Plane Component
- etcd
- cluster 안의 구성요소에대한 정보가 key-value 형태로 저장된 Database다.
- cluster의 모든 핵심 데이터가 저장되어있다.
- kubectl 명령으로 조회 할수있는 정보는 etcd를 거쳐 조회된다.
- 제어명령을 통해 cluster에 변화가 생기면 etcd에 업데이트 된다.
- Scheduler (kube-scheduler)
- Pod를 어느노드에 배치할지 결정하는 프로세스
- 실제 해당노드에 Pod를 배치하는 작업은 kubelet에 의해 수행한다.
- kube-scheduler는 kube-system 네임스페이스에 kube-controller-scheduler-master Pod로 존재한다.
- kube-scheduler Pod 정의 파일 위치 : /etc/Kubernetes/manifests/kube-scheduler.yaml
- API 서버 (kube-apiserver)
- cluster 각 요소들을 모니터링하며 작업수행을 하는 중앙접근 포인트 역할을 한다.
- 유저인증, 요청사항검증, 데이터 수신, etcd 업데이트, 스케쥴링, kubelet 통신등 다영한 역할을 담당한다.
- API 서버에 대한 client가 kubectl 명령을 내린다.
- API는 kube-system 네임스페이스에 kube-controller-scheduler-master Pod로 존재한다.
- kube-apiserver Pod 정의 파일 위치 : /etc/Kubernetes/manifests/kube-apiserver.yaml
- controller manager (kube-controller-manager)
- cluster 안에서 구동되는 다양한 리소스들을 모니터링하고, 원활하게 동작하도록 관리하는 프로세스다.
- Node, Pod, ReplicaSet, Deployment, StatefulSet, DaemonSet, Service Account, Cronjob, Namespace 등 각 구성요소들을 관리하는 control들이 하나로 packaging되는 형태를 갖는다.
- API는 kube-system 네임스페이스에 kube-controller-manager-master Pod로 존재한다.
- Kube-apiserver Pod 정의 파일 위치 : /etc/Kubernetes/manifests/kube-controller-manager.yaml
- etcd
- Node Component
- Kubelet
- node의 Pod안에있는 container들이 정상구동되도록 조율하는 agent 라고함.
- master node의 scheduler가 Pod를 node에 할당하면 kubelet이 해당 Pod에 container를 배치시킨다.
- Pod와 container 상태를 주기적으로 체크하고 결과를 API 서버에 전송하는 역할을 한다.
- kubeadm으로 cluster 구축시, kubelet은 포함되지 않아 별도 kubeadm, kubectl과 함께 버전을 일치하여 설치한다.
- Kube-proxy
- node에서 구동되는 Kubernetes network proxy
- Service 객체로 들어오는 내/외부 트래픽을 어느 Pod로 포워딩 할것인지에 대한 규칙을 생성하고 관리하는 역할을 한다.
- kubeadm은 모든 node에 kube-proxy Pod를 하나씩 daemonset으로 배포한다.
- Container runtime
- cluster 내부에 container 이미지를 가져오고 구동시키는 엔진
- 여러 종류의 container runtime을 지원하기 위해 OCI의 CRI스펙을 지원하는 container runtime 사용이 가능하게 구성한다.
- Kubernetes 1.24버전 이후로 Docker 지원을 중단하였다. 하지만 container와 다른 대체수단을 지원하고 Docker container는 OCI의 CRI 스펙을 준수함으로 동작에는 문제가 없다.
- Kubelet
Kubernetes 동작방식
- 개발자/운영자가 Nginx Image 생성한다.
- Nginx Image를 public 또는 private registry에 저장한다.
- 개발자/운영자는 kubernetes명령을 통해 container 생성을 요청한다.
- 요청한 명령은 control plane의 API server에 전달된다. (scheduler에 container 생성 요청)
- scheduler는 node들의 상태를 확인하고 실행 가능한 worker node에 Pod 생성을 요청한다.
- 해당 node의 kubelet이 scheduler의 요청 정보를 수신한다.
- 요청 수신정보에 따라 Pod를 생성한다.
- container를 생성한다. (현재 node에 image가 없는 경우, registry로부터 image를 다운로드한다.)
- 생성된 container를 이용하여 Pod를 생성한다.
'Cloud > Kubernetes' 카테고리의 다른 글
Kubernetes) Kubernetes namespace 알아보기 (0) 2022.10.12 Kubernetes) kubectl 명령어를 알아보기 (0) 2022.10.12 Kubernetes) KubeAdm 으로 Kubernetes 구성해보기 2편 (0) 2022.10.08 Kubernetes) KubeAdm 으로 Kubernetes 구성해보기 1편 (0) 2022.10.07 Kubernetes) CNI 란? (0) 2022.10.07 - Master node (Control plane)