Kubernetes의 구성요소
-
Pod
-
어플리케이션 배포를 위한 최소 단위
-
기존의 Docker Cluster 환경은 아래 그림과 같이 각 호스트별로 컨테이너를 할당하여, 서비스를 진행하였다. 이를 위해서는 각 컨테이너간 통신을 위해 라우팅이 필수적으로 이루어졌다.
이는 호스트의 리소스를 크게 소모하게 되어 불필요한 자원들을 소모하게 되었다.
-
위와 같은 문제를 해결하기 위해 K8S에서는 한 쌍의 서비스를 한개의 Pod로 만들게 되어, Pod 한개 당 IP를 한개 부여하게 되었다.
-
-
Controller
- Scheduler에 의해 선택된 노드에 Pod를 배치
- 배치된 Pod에 대한 상태를 확인
- Pod의 상태를 etcd에 등록
- 토큰 발행, Service Account 등 인증
-
Scheduler
- API-server를 통해 전달된 노드의 상태를 점수로 매겨, Pod를 배치할 가장 적절한 노드를 결정한다.
-
Add-on
- Calico
- 클러스터 환경 내 Pod간 통신에 관여하는 네트워크 플러그인
- CoreDNS
- K8S에서 제공되는 DNS서비스
- Calico
-
kube-proxy
- Pod에 대한 통신을 제어하여, 사용자가 Pod로 접근시 NAT 및 라우팅을 진행해준다.
-
api-server
- 각 wokrer node의 kubelet과 상호작용하여, Pod에 대한 상태, 노드의 리소스 등을 확인한다.
-
etcd
- 클러스터 환경 정보를 저장하는 데이터 파일로 클러스터의 모든 정보는 etcd에 저장된다. 이는 API와 함께 동작하게 된다.