쿠버네티스를 실행하면 클러스터를 갖는다. 클러스터는 노드라 불리는 워커 머신의 셋으로 구성되는데 이는 컨테이너화된 애플리케이션이다.
워커 노드는 PODS으로 구성되며 Control plane이 워커 노드와 클러스터를 관리한다.
Control Plane Components
kube-apiserver
API Server는 쿠버네티스 Control plane의 프론트엔드이며 API 를 노출하는 컴포넌트이다.
여러개의 kube-apiserver를 가동하여 트래픽을 조절할 수 있다.
etcd
key value로 구성된 저장소이다.
kube-scheduler
새로 생성된 PODS를 노드에 할당하고 스케줄링 내용에는 개별 자원 할당과 제한 등이 있다.
kube-controller-manager
각각의 컨트롤러들은 단일 바이너리로 컴파일되며 단일 프로세스로 구동된다.
- Node controller : 노드가 내려갔을 때 알려주고 반응하는 역할
- Replication controller : 현재 pods 갯수를 유지하는 역할
- Endpoints controller : services와 pods 같은 Endpoints 객체를 채우는 역할
- Service Account & Token controllers : 새로운 namespaces들에 default 계정과 API 접속 토큰을 발행하는 역할
cloud-controller-manager
클러스터를 cloud provider API로 연결 , own premises의 경우 없음.
clound provider 의존성을 갖을 수 있는 controller들
- Node controlelr : cloud 내 node가 지워졌는지 체크
- route controller : cloud infrastructure에 routes 설정
- service controller : cloud provider load balancer의 생성, 업데이트 삭제
Node Components
kubelet
클러스터내에 모든 node에서 실행하는 agent. container들이 pod에서 실행중인지 확인한다.
kubelet은 PodSpecs를 갖고 해당 PodSpecs으로 표현한 container들이 잘 실행 중인지 체크하며 Kubernetes로 만들지 않은 container들은 관리하지 않는다.
kube-proxy
모든 node에 있는 network proxy로 쿠버네티스 service 컨셉의 도구이다.
kube-proxy는 node에서 network rules을 유지한다. 클러스터 내/외부의 network session으로 부터 pods로 network communication을 허용한다.
kube-proxy는 가능하면 O/S의 packet filtering layer를 사용하고 아닌경우 자체적으로 traffic을 forward한다.
Container runtime
container runtime은 container 구동의 책임있는 software이다.
쿠버네티스는 다양한 container runtime들을 지원한다. Docker, containerd, CRI-O, Kubernetes CRI
Addons
Addons들은 쿠버네티스 리소스(DaemonSet, Deployment)들을 가지고 클러스터 요소들을 표현한다.
DNS
Kubernetes services의 DNS 기록을하는 역할
WEB UI(Dashboard)
Kubernetes cluster의 웹 기반 UI. troubleshooting과 관리를 위한 역할
Container Resource Monitoring
중앙 데이터베이스에서의 컨테이너들의 generic time-series metrics를 기록
Cluster-level Logging
continer logs들을 central log 저장소에 저장하는 역할
출처