[Kubernetes] kube-apiserver


서론

kube-apiserver는 Kubernetes의 주요 관리 컴포넌트이다.

우리가 kubectl 명령어를 실행하면 실제로는 kube-apiserver에게 요청을 보내는 것이다.

kube-api에 대해서 자세히 알아보자

Kube-api server

  1. 사용자가 파드 생성 요청을 보내면 요청에 대한 인증과 스키마를 검증한다.
  2. 저 파드 객체를 생성한다.
  3. etcd에 파드 정보를 업데이트 하고 사용자에게 파드가 생성되었음을 알린다.
  4. 스케줄러는 kube-apiserver를 지속적으로 감시하다 노드가 할당되지 않는 새 파드를 발견한다.
  5. 스케줄러는 새 파드를 배치할 적합한 노드를 찾아 kube-apiserver에 전달한다.
  6. kube-apiserver는 해당 정보를 etcd클러스터에 업데이트 한다.
  7. kube-apiserver는 이 정보를 해당 워커 노드의 Kubelet으로 전달한다.
  8. kubelet은 노드에 파드를 생성하고 컨테이너 런타임에게 애플리케이션 이미지를 배포하도록 지시한다.
  9. 작업이 끝나면 Kubelet은 상태를 API서버에 보고하고, API 서버는 다시 etcd클러스터에 데이터를 업데이트 한다.
  • kube-apiserver는 etcd 데이터 저장소와 직접 상호작용하는 유일한 컴포넌트이다.
  • 스케줄러, kube-controller-manager, kubelet과 같은 다른 컴포넌트들은 각자의 영역에서 클러스터를 업데이트하기 위해 API 서버를 사용한다.
  • 설치
    • kubeadm 구축시 kube-system의 kube-api 파드를 마스터 노드에 배포한다
    • /etc/kubernetes/manifests/kube-apiserver.yaml을 통해 위 파드의 옵션들을 볼 수 있다.