Cloud 스터디 잼 코리아 Kubernetes Intm

3주차 - 02. Kubernetes 제어 영역

ziwookim 2022. 9. 6. 23:52

'Cluster'(클러스터)에는 컴퓨터가 필요하고 Cluster를 구성하는 컴퓨터는 일반적으로 가상 머신이다. 이 가상 머신은 항상 GKE 이기도 하지만, 실제 컴퓨터일 수도 있다.

한 컴퓨터를 'Control plane'(제어 영역)이라고 하고, 다른 컴퓨터를 간단히 'Node'(노드)라고 한다.

Node는 'Pod를 실행하는 역할', Control plane은 '전체 클러스터를 조정하는 역할' 을 한다.

 

Control plane에서 실행되는 중요한 Kubernetes 구성 요소

Cooperating processes make a Kubernetes cluster work

  • 'kube-APIserver'
    • 사용자가 직접 상호작용하는 단일 구성요소는 'kube-APIserver'이며, 'kube-APIserver'의 역할은 클러스터의 상태를 보거나 변경하는 명령어를 수락하는 것으로 여기에는 Pod 실행이 포함된다.

 

  • 'kubectl'
    • 특화 과정에서 'kubectl' 명령어를 자주 사용했다. 'kubectl'의 역할은 'kube-APIserver'에 연결하고 Kubernetes API를 사용하여 통신하는 것이다. 'kube-APIserver'는 또한 수신된 요청을 인증하고 요청의 승인 여부와 유효성을 확인하며 허용 제어를 관리한다.

 

  • 'etcd'
    • 하지만 'kube-APIserver'와 통신하는 것은 'kubectl'만이 아니다.
    • 실제로 클러스터 상태에 대한 모든 쿼리 또는 변경은 'kube-APIserver'로 보내져야 한다.
    • 'etcd'는 클러스터의 데이터베이스이다. 'etcd'는 클러스터의 상태를 안정적으로 저장하는 역할은 한다. 여기에는 모든 클러스터 구성 데이터와 많은 동적 정보(클러스터의 일부인 노드, 실행해야 하는 Pod, 실행 위치)가 포함된다.
    • 사용자는 'etcd'와 직접 상호작용하지 않는다.

 

  • 'kube-scheduler'
    • 'kube-APIserver'가 시스템의 나머지 부분을 대신하여 데이터베이스와 상호작용한다.
    • 'kube-scheduler'는 Pod를 Node에 예약하는 역할을 한다. 이를 위해 각 개별 Pod의 요구사항을 평가하고 가장 적합한 Node를 선택한다.
    • 'kube-scheduler'는 모든 Node의 상태를 파악하고 하드웨어, 소프트웨어, 정책을 기반으로 Pod가 실행될 수 있는 위치에 대해 사용자가 정의한 제약조건도 준수한다.

 

  •  'kube-controller-manager'
    • 'kube-APIserver'를 통해 Cluster의 현재 상태가 원하는 상태와 일치하지 않을 때마다 상태를 달성하기 위해 변경을 시도하며,  Cluster를 지속적으로 모니터링 한다.

 

  • 'kube-cloud-manager'
    • 'kube-cloud-manager'는 기본 클라우드 제공업체와 상호작용하는 컨트롤러를 관리한다.
    • 예를 들어, Kubernetes 클러스터를 Google Compute Engine에서 수동으로 시작하면 'kube-cloud-manager'는 필요할 때 loadbalancer(부하 분산기) 및 스토리지 볼륨과 같은 Google Cloud 기능을 가져오는 역할을 한다.

 

하지만 실제 Node에서 Pod를 시작하는 작업은 수행하지않는다.

대신에 Node에 아직 할당되지 않은 Pod 객체를 발견할 때마다 노드를 선택하고 해당 Node의 이름을 Pod 객체에 작성한다.

그러고나면 시스템의 또 다른 구성요소가 Pod를 시작하는 역할을 한다.

 

  • Node
    • Kubelet(각 Node에 있는 Kubernetes의 에이전트와 유사)을 실행한다.
    • 'kube-APIserver'가 Node에서 Pod를 시작하려고 하면 해당 Node의 'Kubelet'에 연결된다. 'Kubelet'은 컨테이너 런타임(Container Runtime: 컨테이너 이미지에서 컨테이너를 시작하는 방법을 아는 소프트웨어)을 사용하여 Pod를 시작하고 'kube-APIserver'에게 보고하며 readiness and liveliness probes(준비 활성 프로브)를 포함한 life cycle을 모니터링 한다.

 

  • 'Kube-proxy'
    • 클러스터에서 Pod 간 네트워크 연결을 유지한다.

 

Kubernetes는 여러 가지 컨테이너 런타임을 제공하지만, GKE가 노드에 사용하는 Linux 배포판은 컨테이너를 시작할 때 containerd를 사용하는데, 이 Linux 배포판은 Docker의 런타임 구성요소이다.

오픈소스 Kubernetes에서는 iptables의 방화벽 기능을 사용하며, 이는 Linux 커널에 내장되어 있다.