개요
CKA 공부를 하며 필요한 내용을 간단히 정리할 예정
1. ETCD
key-value 형식으로 저장하는 DB.
2379 Port 사용.
version3 사용.
2. kubelet
클러스터의 각 노드에서 실행되는 에이전트.
kube-api 서버의 명령을 듣고 노드에서 컨테이너를 배포하거나 지운다.
kube-api 서버는 주기적으로 kubelet으로부터 상태를 보고 받는다.
3. Control Plane
ETCD
클러스터의 정보 저장.
Kube-API-Server
클러스터 내 모든 작업 관장.
Kube-Controller-manager
노드 / replica 컨트롤러 관장.
Kube-Scheduler
노드에 스케줄링 담당.
4. Worker Node
kubelet
API 서버의 지시를 듣고 컨테이너와 kube-proxy 관리.
kube-proxy
클러스터 내부에서 통신이 가능하게 함.
5. crictl
crictl 커맨드는 모든 container runtime에서 사용 가능하다.
6. Pod 생성 과정
- API가 ETCD에 정보 전달(Pod 생성에 대한)
- Scheduler가 API 모니터링. 새로운 파드가 스케줄링 되지 않음을 인식.
- Scheduler가 어느 노드에 파드를 생성할지 정하고 API와 통신.
- API가 ETCD에 정보 업데이트
- API가 새로운 정보를 Worker노드의 kubelet에 전달.
- kubelet이 Pod를 생성하고 Container Runtime에 컨테이너 생성을 명령.
- 이미지 배포
- kubelet은 상태를 API로 전달.
- API는 ETCD에 상태 업데이트
7. Kube-API의 역할
- 요청의 인증과 유효성 검사
- update된 data를 ETCD에 저장
- ETCD와 통신하는 유일한 리소스
- Scheduler, Controller, Kubelet과 통신
8. Controller의 역할
Node Controller
- 노드의 상태를 파악.
- 노드의 응용프로그램이 계속 실행될 수 있도록 함. (kube-api서버를 통해)
- node monitor period는 기본 5초,
node monitor grace period는 기본 40초,
node eviction time은 기본 5분.
Replication Controller
- 원하는 수의 Pod가 Cluster 내에서 항상 사용 가능하도록 함.
그 외 Deployment Controller, Namespace Controller 등 다양한 Controller가 존재한다.
이 모든걸 Controller manager라는 프로세스로 패키징 되어 있다.
9. Scheduller의 역할
- Pod를 어떤 Node로 할당할지 결정.
- 실제로 Pod를 Node에 띄우는건 아니다. (kubelet의 역할)
스케줄링 과정
-
해당 Pod가 뜨기 알맞지 않은 Node를 걸러낸다.
ex) resource가 필요한 것 보다 부족한 Node
-
가능한 Node 중 Pod를 띄운 후 여유가 더 많은 Node를 선택해 할당한다.
이 과정에서 resource limit / request, taints /tolerations, node selector/ affinity등을 고려.
10. kubelet의 역할
- Worker 노드를 클러스터에 등록
- Container 생성
- Pod와 Container를 모니터링하고 API서버에 보고.
화이팅입니닷