IT/CKA

CKA 준비과정 - Kubernetes 개념 (2)

Primes 2023. 4. 22. 15:37
728x90

kube-api server

- 클러스터에서 업데이트가 이루어질 때, 모든 작업의 중심점이 된다.

- ETCD Cluster와 통신하는 유일한 리소스

- kubectl 명령을 실행 시 정보 응답 과정

> [kubectl 명령 실행] -> [kube-apiserver] -> [kube 관리자 인증] -> [ETCD cluster 에서 데이터 응답]

> kubectl 명령어가 아닌, POST request를 통해 API 호출도 가능하다.

- Pods 생성 예시

1. Authenticate User : 유저 인증

2. Validate Request : 요청 검증

3. Retrieve data : Pod를 노드에 할당하지 않고 생성

4. Update ETCD : etcd cluster에 "Pod 생성 사용자" 정보 업데이트

5. Scheduler : kube-apiserver를 지속적으로 모니터링, 노드가 할당되지 않는 신규 Pod 발견 => 신규 파드 배치를 위해 적절한 노드를 선정하고 kube-apiserver에 정보 전달. kube-apiserver는 etcd 클러스터 정보를 업데이트

6. kubelet : kube-apiserver는 업데이트된 정보를 워커 노드의 kubelet에 전달. kubelet은 자신이 속한 노드에 파드를 배치하고 Container Runtime Engine에 어플리케이션 이미지 배포 지시, 이 과정이 모두 완료되면 kubelet은 kube-apiserver로 상태 업데이트 전달, apiserver는 ETCD Cluster의 데이터를 업데이트함

 

 

Kube Controller Manager

- 쿠버네티스 내 다양한 컨트롤러를 관리한다. => 상태 모니터링, 오류 발생 시 필요한 조치 취함

- Watch Status : Controller Manager는 kube-apiserver 를 통해 각 노드들의 상태를 모니터링한다.

- Remediate Situation : 조치 필요할 시 해결 진행

- Node Monitor Period = 5s : 5초마다 노드의 상태를 모니터링

- Node Monitor Grace Period = 40s : 노드에 접근할 수 없는 경우 40초의 시간을 가지고 대기한다.

- POD Eviction Timeout = 5m : 노드의 회복 시간을 5분으로 설정, 초과할 경우 파드를 제거하고 신규 노드를 생성하여 배치한다.

NKS의 노드 상태를 확인

 

기타 다른 컨트롤러들도 많이 존재하며, 해당 컨트롤러들이 모두 모여 쿠버네티스의 핵심 부분을 담당하게 된다.

해당 컨트롤러들은 Kubernetes Controller Manager를 설치하면 한꺼번에 같이 설치된다.

 

 

Kube Scheduler

- 어떤 Pod를 어떤 노드에 배치할 지 결정한다. 이 때, 실질적으로 파드를 노드에 배치하는 작업은 kubelet이 진행한다. (스케줄러가 하지 않음을 유의)

스케줄러는 기준에 따라 파드가 배치될 노드를 결정한다.

Filter Nodes : 노드들을 필터링한다.

Rank Nodes : 적합한 노드의 순위를 결정한다. 어떤 노드가 적합한지 점수를 매기고, 가장 점수가 높은 노드에 파드를 배치한다.

사진을 예로 들자면, cpu 16개 서버와 12개 서버가 있을 때, cpu가 많은 쪽이 우선순위가 높아진다.

이는 사용자 지정, 고유 스케줄러 작성도 가능하다.

 

kubelet

- kubelet 은 노드의 "선장" 역할을 담당한다.

- 마스터 노드의 kube-scheduler 를 따라 지시를 이행하고, 노드와 컨테이너의 상태를 주기적으로 마스터에 회신한다.

- 컨테이너 런타임 엔진에 컨테이너, pod를 로드하라는 지시를 받으면 실행한다.

 

kube-proxy

- 쿠버네티스 클러스터 내 모든 파드들은 파드끼리 통신이 가능하다.

- 파드들은 내부 가상 네트워크(POD Network)를 통해 통신한다. 

- 파드 내 각 서비스들끼리 통신을 할 수 있도록 만들어주는 프로세스 -> kube-proxy

- 새로운 서비스가 생성될 때마다 각 노드에 해당 서비스에 대한 트래픽을 백엔드(ex. db)로 전달해준다.

 

반응형