K8s Cluster는 Master node ( = Control Plane ) 와 Worker Node로 나뉨
그 중 오늘은 Master Node에 대해 알아봄
Master Node 구성요소
1. kube-controller-manager
- 파드가 죽거나 손상되었을 때 새로 생성하거나 재시작.
- 컨트롤러 각각은 개별 프로세스지만, 복잡도를 줄이기 위해 바이너리 하나로 컴파일하여 단일 프로세스로 실행됨.
> 복잡하니까 하나로 묶어 실행한다 ex) node controller + replication controller
2. kube-scheduler
- 어떤 워커 노드에 파드를 할당할 것인지 정하는 녀석.
- 하드웨어 리소스를 고려, 한 노드에서 함께 실행되어야 하는 파드들에 대해 어피니티 룰이나 그 반대인 안티 어피니티 룰 등을 확인하여 파드를 할당한다.
3. kube-apiserver
- 요청이 오면 해당 요청에 대한 권한을 검증후, 권한이 있으면 요청에 대한 처리를 한다.
- 6443 포트 사용, 죽으면 노답
ex) kubectl -n moon get deployment
> 이 요청에 사용된 토큰이 moon 네임스페이스와 자원 조회에 대한 권한이 있는지 확인
> 있다면 디플로이먼트 목록 조회하여 리턴.
4. etcd
- 키-값 형태의 K8s DB로, K8s에서 필요한 모든 데이터를 저장
> Nodes, Pods, Configs, Secrets, Accounts, Roles, Bindings, Others
- raft 알고리즘 ( 노드 간 상태 공유 알고리즘이라고 한다 )
- 서버 하나당 프로세스 1개만 사용.
- kubeadm을 사용하여 etcd를 배포할 경우 pod로 배포
- 고가용성을 보장하기 위해 여러 마스터 노드에 etcd 인스턴스 분산하여 배포함
- 2739 포트 사용