본문 바로가기

Computer Science/Kubernetes 정리

Kubernetes 정리 2 : Kube-API Server

1. Kube API Server

  • Kube API Server는 주요 관리 컴포넌트이다.
  • Kubectl 명령을 실행하면, kubectl 유틸리티는 kube-apiserver에 접근한다.
  • kube-apiserver는 가장 먼저 요청을 인증하고 검증한다.
  • 그리고 etcd 클러스터로부터 데이터를 받아 다시 요청한 정보와 함께 응답한다.

반드시 kubectl 명령어를 사용할 필요는 없다. 대신 POST 리퀘스트를 보내서 API를 직접 호출할 수 있다.


<POD 생성 예>

1. Authenticate User: 먼저 요청이 인증된 다음,

2. Validate Request: 검증됩니다. (이 경우, API서버는 POD객체를 노드에 할당하지 않고 생성됩니다.)

3. Retrieve Data

4. Update ETCD: ETCD 서버에 있는 'POD를 생성한 사용자' 정보를 업데이트합니다.

5. Scheduler: 스케쥴러는 API 서버를 지속적으로 모니터링하다가 노드가 할당되지 않은 새로운 POD가 있는 것을 발견합니다. 스케쥴러는 새 POD를 배치하기 위해 좋은 노드를 골라내고 이를 다시 kube-apiserver에 전달합니다. 그러면 API 서버가 etcd 클러스터의 정보를 업데이트합니다.

6. Kubelet: API서버는 업데이트된 정보를 적정한 Worker node에 전달합니다. 그러면 Kubelet이 해당 노드에서 POD를 생성하고 컨테이너 런타임 엔진에 어플리케이션 이미지를 배포하라고 지시합니다.
완료되면 kubelet이 API 서버로 상태를 업데이트하고 API서버는 ETCD 클러스터의 데이터를 업데이트합니다.

 

요약

  • kube-apiserver는 인증과 요청 검증을 담당하며, etcd data 저장소의 데이터를 받아오고 업데이트한다.
  • kube-apiserver는 etcd data store와 직접 소통하는 유일한 컴포넌트이다.
  • 스케줄러, kube-controller-manager, kublet과 같은 다른 컴포넌트들은 클러스터 내의 각자 영역에서 api server를 사용해 업데이트한다.

2. Installing kube-apiserver

하드웨어를 세팅한 경우, Kubernetes 릴리지 페이지의 바이너리를 통해 kube-apiserver사용 가능하다.
바이너리를 다운로드하고 Kubernetes 마스터 노드에서 서비스로 실핼되도록 구성한다.

wget https://storage.googleapis.com/kubernetes-realease/realease/v1.13.0/bin/linux/amd64/kube-apiserver

위와 같이 kube-apiserver는 많은 파라미터로 실행되며, Kubernetes 아키텍처는 여러 방법으로 서로 소통하는 다양한 컴포넌트로 이루어져 있다. 따라서 컴포넌트들 모두 다른 컴포넌트가 어디에 있는지 알아야한다.

옵션 중 대부부은 인증서와 관련된 것들이다.

 

kube-apiserver.service

  • -etcd-servers 옵션은 etcd서버의 위치를 지정한다.
  • kube-apiserver는 etcd 서버 옵션을 통해 etcd서버와 연결된다.

3. View kube-apiserver - Kubeadm

기존 클러스터에서 kube-apiserver 옵션을 확인하는 방법은 클러스터를 설정하는 방법에 따라 다르다.

kubeadmin툴로 세팅했다면, kubeadmin은 마스터노드에 있는 kube-system namespace의 POD로 kubeadmin-apiserver를 배포한다.

kubectl get pods -n kube-system

 

4. View kube-apiserver options -kubeadm

POD definition file에서 옵셜들을 찾아볼 수 있다. POD definition file은 etc/kubernetes/manifests 폴더에 있다.

cat /etc/kubernetes/manifests/kube-apiserver.yaml

 

4.1 View kube-apiserver options - Manual

kubeadmin으로 셋업하지 않았다면, etc/systemd/system/kube-apiserver.service에 위치한 kube-apiserver 서비스를 왁인하여 옵션을 검사한다.

 

또한, 마스터 노드에 있는 프로세스를 리스트로 보여주고, kube-apiserver를 살펴봄으로써 실행중인 프로세스와 옵션들을 확인할 수 있다.