소개
인프라를 추상화 함
클러스터1 에서 실행되는 운영 체제와 같은 존재이다.
Control plane2과 Workload plane3으로 구성된다.
쿠버네티스의 모든 것은 object로 작성된다.
어플리케이션 배포시 내부 작동 방식
- 애플리케이션 매니페스트를 Kubernetes API에 제출합니다.(일반적으로 kubectl4 사용) API 서버는 매니페스트에 정의된 객체를 etcd에 기록합니다.
- 컨트롤러는 새로 생성된 객체를 감지하고 각 애플리케이션 인스턴스에 대해 하나씩, 여러 개의 새 object를 생성합니다.
- 스케줄러는 각 인스턴스에 노드를 할당합니다.
- Kubelet4은 자신의 노드에 인스턴스가 할당되었음을 감지하고, 컨테이너 런타임을 통해 해당 애플리케이션 인스턴스를 실행합니다.
- Kube Proxy는 애플리케이션 인스턴스가 클라이언트로부터 연결을 수락할 준비가 되었음을 확인하고 이에 대한 로드 밸런서를 구성합니다.
- Kubelet과 Controllers는 시스템을 모니터링하고 애플리케이션이 계속 실행되도록 합니다.
대부분의 object 유형에는 연관된 컨트롤러5가 있다.
각각의 개념 확인
스케줄러,6 컨테이너 런타임,7 kubelet,8 kube proxy,9 etcd10
Footnotes
-
클러스터란 컨테이너화된 애플리케이션을 실행하기 위해 함께 작동하는 머신 그룹(노드 모음)입니다. ↩
-
Control plane은 하나 이상의 마스터 노드를 포함하며 클러스터의 두뇌 역할을 한다. 마스터 노드는 워커 노드에 대한 컨트롤을 한다. ↩
-
Workload plane은 어플리케이션들을 실행하는 여러개의 워커 노드를 가지고 있다. 어플리케이션을 호스팅하는 곳이다. ↩
-
컨트롤러는 특정 object type을 보고 api 서버로부터 새 객체가 생성되었다는 알림을 받은 후 해당 object를 활성화하는 작업을 수행한다. ↩
-
스케줄러는 특수한 유형의 컨트롤러로, 애플리케이션 인스턴스를 워커 노드에 스케줄링하는 역할만 수행합니다. 각 새 애플리케이션 인스턴스 객체에 가장 적합한 worker node를 선택하고 API를 통해 object를 수정하여 인스턴스에 할당한다. ↩
-
컨테이너 런타임이란 각 node에 설치되어, 실제로 컨테이너를 생성하고 실행한다. (ex: docker) ↩
-
kubelet은 worker node에서 실행되는 컨트롤러이다. 애플리케이션 인스턴스가 자신이 위치한 노드에 할당될때까지 대기하다가 컨테이너 런타임를 실행시켜 애플리케이션을 실행한다. ↩
-
kube proxy: 애플리케이션 배포는 여러 애플리케이션 인스턴스로 구성될 수 있으므로, 단일 IP 주소에 이를 노출하기 위해 로드밸런서11가 필요하다. Kubelet과 함께 실행되는 또 다른 컨트롤러인 Kube Proxy가 로드 밸런서 설정을 담당한다. ↩
-
etcd는 모든 클러스터 데이터에 대한 Kubernetes의 백업 저장소로 사용되는 일관되고 가용성이 높은 키 값 저장소입니다. ↩
-
로드밸런서는 분산 알고리즘(스케줄링)에 따라 부하를 분산시킨다. 외부 로드밸런서(클라우드 제공 업체)는 노드로 분산시킨다. 그리고 kube proxy에 의해 내부 pod로 트래픽을 분산시킨다. ↩