Fairy ' s

[K8s] Kube Controller Manager & Kube API Server 본문

Study/K8s

[K8s] Kube Controller Manager & Kube API Server

berafairy 2023. 7. 12. 13:41

 

kube-api server : 쿠버네티스의 주요 관리 구성 요소

kube-api server는 클러스터에서 변경을 위해 수행해야 하는 모든 작업의 중심에 있다. 또한, ETCD data store과 직접 소통하는 유일한 컴포넌트로, 인증과 요청 검증을 담당하며, ETCD data store의 데이터를 받아오고 업데이트 한다. Scheduler, kube-controller-manager, kubelet과 같은 다른 컴포넌트들은 클러스터 내의 각자 영역에서 api server를 사용하여 업데이트를 수행한다.

kubectl 명령을 실행하면, kubectl 유틸리티는 kube-api server에 접근하게 되고, kube-api server는 요청을 인증하고 검증한다. 그 후 ETCD 클러스터로부터 데이터를 받아서 다시 요청한 정보와 함께 응답한다. kubectl 명령을 사용하지 않을 경우, POST request를 보내서 API를 직접 호출할 수도 있다.

파드를 생성하는 경우 발생하는 패턴

  1. 요청이 인증된 후 검증되며, api server는 파드 객체를 노드에 할당하지 않고 생성한다. 
  2. ETCD 서버에 있는 '파드를 생성한 사용자' 정보를 업데이트 한다.
  3. Scheduler는 api server를 지속적으로 모니털이하며 노드가 할당되지 않은 새로운 파드가 있는 것을 확인한다.
  4. Scheduler는 새 파드를 배치하기 위해 알맞는 노드를 골라 이를 kube-api server에 전달한다. 
  5. api server는 ETCD 클러스터의 정보를 업데이트 한다. 
  6. api server는 업데이트된 정보를 적절한 Worker Nodes의 kubelet에 전달한다.
  7. kubelet은 해당 노드에서 파드를 생성하고 Container Runtime Engine에 지시해 애플리케이션 이미지를 배포한다.
  8. 완료되면 kubelet api server로 상태를 업데이트하고 api  server는 ETCD 클러스터의 데이터를 업데이트 한다.

Install kube-api server

kubeadmin 도구를 이용해 클러스터를 부트스트랩 한 경우에는 Install을 할 필요 없지만, 하드웨어를 세팅했다면 쿠버네티스 릴리즈 페이지의 바이너리를 통해 kube-api server를 사용할 수 있다. 바이너리를 다운로드하고 쿠버네티스 마스터 노드에서 서비스로 실행되도록 구성하면 된다.  

쿠버네티스 아키텍처는 여러 방법으로 서로 소통하는 다양한 컴포너트로 이루어져 있다. 인증, 승인, 암호화, 보안에는 다양한 방식이 있고, 옵션들도 많다. 옵션 중 대부분은 다른 컴포넌트 간의 연결을 보호하는 인증서와 관련된 것이다. 인증서 부분은 다른 세션에서 더 알아보도록 할 예정이다.

## set up with kubeadmin tool

# view kube-api server
kubectl get pods -n kube-system

# view kube-api server options
cat /etc/kubernetes/manifests/kube-apiserver.yaml
## set up Manual

# view kube-api server options
cat /etc/systemd/system/kube-apiserver.service

기존 클러스터에서 kube-api server 옵션과 파드 definition file에서 옵션들을 볼 수 있다. kubeadmin으로 셋업한 경우와 그렇지 않은 경우의 옵션 검사 방법은 위와 같이 차이가 있다. 

# view running process effective options
ps -aux | grep kube-apiserver

Kube Controller Manager

Controller는 마스터쉽에 있는 오피스라고 생각하면 쉽다. 컨트롤러의 역할은 다음과 같다.

  • 지속적으로 시스템 내 다양한 컴포넌트들의 상태를 모니터링
  • 상황을 개선하기 위해 필요한 조치를 취함
  • 전체 시스템이 의도된 기능과 상태로 작동되게 하는 프로세스

 예를 들어 Node Controller는 애플리케이션이 계속 실행될 수 있도록 노드의 상태를 모니터링하고 필요한 조치를 취할 책임이 있다. Node Controller는 이 책임을 kube-api server를 통해 수행한다. Node Controller는 5초마다 노드의 상태를 테스트하며 모니터링한다. 만약 노드의 심장 박동이 멈추면, 40초동안 대기를 마친 뒤 노드는 접근할 수 없다고 표시되며, 회복할 수 있는 5분의 시간이 주어진다. 5분안에 회복이 안될 경우, 노드에 할당된 파드들을 제거하거나, 다른 정상 노드에 재할당한다.


Replication Controller 

 replica sets의 상태를 모니터링하고, replica set 내의 정해진 파드 수를 항상 보장하는 역할을 한다. 만약 특정 파드가 죽으면 또 다른 파드를 만들어 낸다.


Other Controller 

 지금까지 쿠버네티스에서 본 어떤 개념이든 이러한 구조에 어떤 intelligence가 들어있든, 이 모든 것들은 다양한 컨트롤러를 통해 구현된다. 이러한 컨테이너들은 쿠버네티스 뒤에서 작동하는 뇌의 역할을 한다.

 이러한 컨트롤러는 어떻게 봐야하고, 어느 곳에 위치할까? 이 모든 것들은 Kubernetes Controller Manager라는 하나의 프로세스로 패키지화 되어 있다. Kubernetes Controller Manager를 설치하면 다른 컨트롤러도 설치된다.


Install Kube Controller Manager

다운로드 진행 후 kube-controller-manager.service에서 컨트롤러를 커스터마이징하거나, 원하는 컨트롤러만 활성화할 수 있다.

wget https://storage.googleapis.com/kubernetes-release/release/v1.13.0/bin/linux/amd64/kube-controller-manager

 

# view kube controller manager set up with kubeadm
kubectl get pods -n kube-system

# view kube controller manager options set up with kubeadm
cat /etc/kubernetes/manifest/kube-controller-manager.yaml

# view kube controller manager options Manual
cat /etc/systemd/system/kube-controller-manager.service

# view running process #effective options by listing the process on the master node 
# searching for kube controller manager
ps -aux | grep kube-controller-manager

 

'Study > K8s' 카테고리의 다른 글

[K8s] Pods  (0) 2023.07.28
[K8s] Kube Scheduler & Kublet & Kube Proxy  (0) 2023.07.12
[K8s] CLI  (0) 2023.07.12
[K8s] ETCD  (0) 2023.07.11
[K8s] Cluster Architecture  (0) 2023.07.11
Comments