[Master Node] kube-api-server

squareBird·2022년 4월 5일
0

Kubernetes

목록 보기
6/17
post-thumbnail

kube-api-server

Kuernetes의 구성도를 보면 Control Plane(Master Node) 내부의 모든 컴포넌트들의 중간에는 api가 존재하며, api를 제외한 다른 컴포넌트들은 서로 상호작용하고 있지 않습니다.

Kubernetes에 대해 자세히 모르는 상태로 이 그림만 보아도 Kubernetes에서 kube-api-server가 얼마나 중요한 역할을 하고 있는지는 쉽게 알 수 있을 것 같습니다.

Kubernetes 구조에서 설명드렸다시피 api-serverKubernetes 클러스터에서 중심 역할을 하는 통로라고 볼 수 있습니다. 모든 컴포넌트들은 api-server를 중심으로 동작하고, 사용자가 클러스터에 명령을 내릴 때 그 명령을 전달받고 수행하는것도 api-server이며, 클러스터 내부에 존재하는 컴포넌트들 중 유일하게 etcd와 상호작용 하는 컴포넌트입니다.

kube-api-server를 제외한 Scheduler, controller 등 다른 컴포넌트들은 자신들의 역할을 수행하기 위한 정보를 etcd에서 직접 가져오는 것이 아닌 api-server를 통해 전달받습니다.


Kubernetes 동작 방식

그렇다면 이 api-server를 중심으로 Kubernetes가 어떻게 동작하는지 알아보겠습니다.

Kubernetes의 동작방식은 위의 다이어그램과 같습니다.
자세한 순서를 설명하면 이렇습니다.

  1. User가 Deployment 생성 명령어 수행(kubectl 사용 또는 API 요청 전달)
  2. api-serveretcd에 요청된 정보 저장
  3. controllerapi-server를 주시(Watch)하고 있다가 생성되지 않은 Deployment가 있다는 사실을 인지
  4. controllerReplicaSet을 만들어서 정보를 api-server에 전달
  5. api-serverReplicaSet의 정보를 etcd에 저장
  6. controllerapi-server를 주시하고 있다가 비어있는 ReplicaSet이 있다는 사실을 인지
  7. Deployment 명세에 따라 pod 생성 후 정보를 api-server에 전달
  8. api-server는 해당 정보를 etcd에 저장
  9. Schedulerapi-server를 주시하고 있다가 배치되지 않은 pod이 있다는 사실을 인지
  10. Schedulerpod을 Bind할 노드를 선정해서 api-server에 전달
  11. api-serverScheduler에서 받은 pod와 Bind 노드 정보를 etcd에 저장
  12. api-serverkubeletpod을 생성하라고 전달
  13. kubeletWorker Nodecontainer runtime(Docker 등)을 통해 pod 명세에 따른 컨테이너 생성
  14. 생성한 pod 정보를 api-server에 전달
  15. api-server는 전달받은 pod 정보를 etcd에 저장

추가적으로 Kubernetes에서 오브젝트를 생성하는 것은 Action이 아닙니다.

Docker에서는 docker run {image}를 통해 특정 image를 통한 컨테이너를 실행시키라는 Action을 수행합니다.

하지만 Kubernetes는 오브젝트를 생성하라는 Action을 수행하는 것이 아닌, 오브젝트의 정보를 Kubernetes에 선언하면 그 선언한 상태(desired state)와 동일하게 클러스터를 유지시키기 위해 현재 상태(current state)를 끊임없이 모니터링하고 원하는 상태(desired state)현재 상태(current state)에 차이가 있으면 이를 일치하도록 만드는 형태로 동작합니다.

profile
DevOps...

0개의 댓글

관련 채용 정보