소개

인프라를 추상화 함

클러스터1 에서 실행되는 운영 체제와 같은 존재이다.
Control plane2과 Workload plane3으로 구성된다.
쿠버네티스의 모든 것은 object로 작성된다.

어플리케이션 배포시 내부 작동 방식

  1. 애플리케이션 매니페스트를 Kubernetes API에 제출합니다.(일반적으로 kubectl4 사용) API 서버는 매니페스트에 정의된 객체를 etcd에 기록합니다.
  2. 컨트롤러는 새로 생성된 객체를 감지하고 각 애플리케이션 인스턴스에 대해 하나씩, 여러 개의 새 object를 생성합니다.
  3. 스케줄러는 각 인스턴스에 노드를 할당합니다.
  4. Kubelet4은 자신의 노드에 인스턴스가 할당되었음을 감지하고, 컨테이너 런타임을 통해 해당 애플리케이션 인스턴스를 실행합니다.
  5. Kube Proxy는 애플리케이션 인스턴스가 클라이언트로부터 연결을 수락할 준비가 되었음을 확인하고 이에 대한 로드 밸런서를 구성합니다.
  6. Kubelet과 Controllers는 시스템을 모니터링하고 애플리케이션이 계속 실행되도록 합니다.

대부분의 object 유형에는 연관된 컨트롤러5가 있다.

각각의 개념 확인
스케줄러,6 컨테이너 런타임,7 kubelet,8 kube proxy,9 etcd10

Footnotes

  1. 클러스터란 컨테이너화된 애플리케이션을 실행하기 위해 함께 작동하는 머신 그룹(노드 모음)입니다.

  2. Control plane은 하나 이상의 마스터 노드를 포함하며 클러스터의 두뇌 역할을 한다. 마스터 노드는 워커 노드에 대한 컨트롤을 한다.

  3. Workload plane은 어플리케이션들을 실행하는 여러개의 워커 노드를 가지고 있다. 어플리케이션을 호스팅하는 곳이다.

  4. Kubernetes API를 사용하는 CLI 툴 2

  5. 컨트롤러는 특정 object type을 보고 api 서버로부터 새 객체가 생성되었다는 알림을 받은 후 해당 object를 활성화하는 작업을 수행한다.

  6. 스케줄러는 특수한 유형의 컨트롤러로, 애플리케이션 인스턴스를 워커 노드에 스케줄링하는 역할만 수행합니다. 각 새 애플리케이션 인스턴스 객체에 가장 적합한 worker node를 선택하고 API를 통해 object를 수정하여 인스턴스에 할당한다.

  7. 컨테이너 런타임이란 각 node에 설치되어, 실제로 컨테이너를 생성하고 실행한다. (ex: docker)

  8. kubelet은 worker node에서 실행되는 컨트롤러이다. 애플리케이션 인스턴스가 자신이 위치한 노드에 할당될때까지 대기하다가 컨테이너 런타임를 실행시켜 애플리케이션을 실행한다.

  9. kube proxy: 애플리케이션 배포는 여러 애플리케이션 인스턴스로 구성될 수 있으므로, 단일 IP 주소에 이를 노출하기 위해 로드밸런서11가 필요하다. Kubelet과 함께 실행되는 또 다른 컨트롤러인 Kube Proxy가 로드 밸런서 설정을 담당한다.

  10. etcd는 모든 클러스터 데이터에 대한 Kubernetes의 백업 저장소로 사용되는 일관되고 가용성이 높은 키 값 저장소입니다.

  11. 로드밸런서는 분산 알고리즘(스케줄링)에 따라 부하를 분산시킨다. 외부 로드밸런서(클라우드 제공 업체)는 노드로 분산시킨다. 그리고 kube proxy에 의해 내부 pod로 트래픽을 분산시킨다.