본문 바로가기

DevOps/쿠버네티스(Kubernetes)

[CKA] Kube Controller-Manager

Kube Controller-Manager

Kube Controller-Manager 쿠버네티스에서 다양한 컨트롤러를 관리한다. 컨트롤러는 마스터 선박 내의 사무실이나 부서들은 각자의 책임을 가지고 있다. 선박 사무실은 선박을 모니터링하고 필요한 조치를 취한다.
새로운 배가 도착하거나 배가 떠나거나 제거될 때마다 어떤 사무실은 손상되거나 가득 찬 컨테이너를 관리한다.

 

1. Watch Status

2. Remediate Situation

 

그 어떤 사무실은 계속해서 선박의 상태를 주시하고 있으며,  상황을 개선하기 위해 필요한 조치를 취한다. 
kubernetes 용어로 Controller는 시스템 내의 다양한 구성 요소의 상태를 지속적으로 모니터링하여 전체 시스템을 원하는 작동 상태로 만드는 프로세스이다.

 

$ kubectl get nodes
    NAME      STATUS   ROLES   AGE  VERSION
    worker-1  Ready    <none>  8d   v1.13.0
    worker-2  NotReady <none>  8d   v1.13.0


예를 들어 Node-Controller는 노드 상태를 모니터링하고 애플리케이션을 계속 실행하는 데 필요한 작업을 수행해야 한다. kube-apiserver를 통해 수행한다.

 

  • Node Monitor Period = 5s
  • Node Monitor Grace Period = 40s
  • POD Eviction Timeout = 5m

Node-Controller는 5초마다 노드 상태를 확인한다. Node-Controller가 하트비트 수신을 중지할 경우 노드 상태를 모니터링할 수 있다. 노드가 도달할 수 없는 것으로 표시되지만 노드가 도달 불가능한 것으로 표시되기 전에 40초 동안 기다린다.  40초 후 노드는 연결할 수 없는 것으로 표시되며 연결되지 않은 경우 다시 복구하는 데 5분을 준다. 연결되지 않으면 노드를 제거 한 후 해당 노드에 할당된 POD를 정상 노드에 프로비저닝한다.

POD가 replicaset 의 일부인 경우 다음 컨트롤러인 Replication-Contoller 를 살펴보면
replicaset 상태를 모니터링하고 replicaset 내에서 원하는 수의 POD를 항상 사용할 수 있는지 확인하는 역할을 한다. Pod 가 죽으면 새로운 다른 Pod 를 생성한다.

이것들은 단지 컨트롤러의 두 가지 예에 불과하다. 쿠버네티스 내에서 사용할 수 있는 컨트롤러가 훨씬 더 많다.

 

  • Deployment-Controller
  • Namespace-Controller
  • Service-Account-Controller
  • Endpoint-Controller
  • Job-Controller
  • PV-BinderController
  • PV-Protection-Controller
  • Replication-Controller

구축, 서비스, 네임스페이스, 영구 볼륨, 그리고 이러한 구조에 내장된 인텔리전스와 같은 kubelet에서 지금까지 본 개념이 무엇이든 이러한 다양한 컨트롤러를 통해 구현된다. 이것은 kubernetes 의 많은 것들의 뒤에 있는 일종의 두뇌이다.

이제 이러한 컨트롤러가 어떻게 표시되고 클러스터에서 어디에 위치할까? 그것들은 모두 kubernetes Controller-Manager라고 하는 단일 프로세스에 패키지되어 있다. kubernetes Controller-Manager를 설치하면 다른 Controller도 설치된다.

 

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

ExecStart=/usr/local/bin/kube-controller-manager \\
    --address=0.0.0.0 \\
    --cluster-cidr=10.200.0.0/16 \\
    --cluster-name=kubernetes \\
    --cluster-signing-cert-file=/var/lib/kubernetes/ca.pem \\
    --cluster-signing-key-file=/var/lib/kubernetes/ca-key.pem \\
    --kubeconfig=/var/lib/kubernetes/kube-controller-manager.kubeconfig \\
    --leader-elect=true \\
    --root-ca-file=/var/lib/kubernetes/ca.pem \\
    --service-account-private-key-file=/var/lib/kubernetes/service-account-key.pem \\
    --service-cluster-ip-range=10.32.0.0/24 \\
    --use-service-account-credentials=true \\
    --v=2


kubernetes controller-manager는 kubernetes 릴리스 페이지에서 kube-controller-manager를 다운로드하여 설치할 수 있다.

 

--node-monitor-period = 5s
--node-monitor-grace-period = 40s
--pod-eviction-timeout = 5m

 

컨트롤러를 사용자 지정할 수 있는 추가 옵션이 제공되는 옵션 목록이 있다. 앞에서 설명한 노드 모니터링 기간 유예 및 제거 시간 초과와 같은 노드 컨트롤러에 대한 기본 설정이 있다.


kubectl get pods -n kube-system
  
    NAMESPACE   NAME                           READY STATUS RESTARTS AGE
    kube-system kube-controller-manager-master  1/1   Running   0     15m


그렇다면 Kube-controller-manager 서버 옵션을 어떻게 볼까?
클러스터 설정 방법에 따라 달라진다. kubeadm 도구를 사용하여 설정하는 경우 kube-controller-manager는 마스터 노드의 kube-system 네임스페이스에 Pod로 배포됩니다. 포드 정의 파일인 etc/kubernetes/manifests 확인하여 옵션을 볼 수 있다. kubeadm 도구를 사용하지 않는 경우 /etc/systemd/system/kube-controller-manager.service 확인하여 옵션을 볼 수 있다.

 

 

 

 

 

출처:

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/learn/lecture/14298428#content