본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 16: Kube Controller Manager

by 공부하는 무니 2023. 1. 1.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests  강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


이번 강의에서는 Kube Controller Manager에 대해 배워보겠습니다.

앞에서 얘기한 것과 같이 Kube controller manager는 Kubernetes에서 다양한 컨트롤러를 관리합니다. 컨트롤러는 마스터쉽에 있는 오피스라고 생각하면 됩니다. 오피스는 새로운 배가 도착하거나 배가 떠나거나 파괴될 때, 필요한 조치를 취하기 위해 배들을 모니터링하는 책임이 있습니다. 또 다른 오피스는 배의 컨테이너를 관리할 수 있습니다. 해당 오피스는 손상되거나 배에서 떨어진 컨테이너들을 살핍니다.

이러한 오피스들은 1. 지속적으로 배의 상태에 대해 모니터링하고 2. 상황을 개선하기 위해 필요한 조치를 취합니다. 쿠버네티스 용어로, 컨트롤러란 지속적으로 시스템 내 다양한 컴포넌트들의 상태를 모니터링하고, 전체 시스템이 의도된 기능과 상태로 작동하게 하는 프로세스 입니다.

Node Controller

예를 들어, node controller는 애플리케이션이 계속 실행될 수 있도록 노드의 상태를 모니터링하고 필요한 조치를 취할 책임이 있습니다. 노드 컨트롤러는 이 책임을 Kube API server를 통해 수행합니다.

노드 컨트롤러는 5초마다 노드의 상태를 테스트합니다. 이렇게 노드 컨트롤러가 노드의 health를 모니터링하는 것입니다. 만약 노드의 심장박동이 멈추면, 노드는 접근할 수 없는 것으로 표시됩니다. 그러나 바로 표시하지는 않고 표시하기 전에 40초 동안 기다립니다. 노드가 접근할 수 없는 것으로 표시되었다면 회복할 수 있는 5분의 시간을 줍니다. 5분 안에 회복이 안될 경우, 노드에 할당된 파드들을 제거하고 파드가 replica set의 일부인 경우, 건강한 그것 노드를 제공합니다.

Replication Controller

다음 컨트롤러는 replication controller입니다. replica sets의 상태를 모니터링하고 replica set 내의 정해진 파드 수를 항상 보장하는 역할을 합니다. 파드가 죽으면 또다른 파드를 만들어냅니다.

 

Other Controllers

예로 든 node controller와 replication controller는 컨트롤러의 두 가지 예시일 뿐이고, 쿠버네티스 안에서 더 많은 컨트롤러를 사용할 수 있습니다. 배포, 서비스, 네임스페이스, persistent 볼륨 등 지금까지 쿠버네티스에서 본 어떤 개념이든, 그리고 이러한 구조에 어떤 intelligence가 들어있든, 이 모든 것들은 다양한 컨트롤러를 통해 구현됩니다. 이러한 컨테이너들은 쿠버네티스 뒤에서 작동하는 뇌의 역할을 합니다.

이러한 컨트롤러들을 어떻게 볼 수 있을까요? 클러스터에서 어디에 위치하고 있을까요? 컨트롤러들은 'Kubernetes Controller Manager'라는 단일 프로세스로 패키징되어있습니다.

Kubernetes Controller Manager를 설치하면 다른 컨트롤러도 설치됩니다.

Installing Kube-Controller-Manager

그렇다면 Kubernetes Controller Manager는 어떻게 설치하고 확인할 수 있을까요? kubernetes 릴리즈 페이지에서 kube-control-manager를 다운로드 받고 extract하고, 서비스로 실행하세요.

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

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

$ cat /etc/systemd/system/kube-controller-manager.service

컨트롤러를 커스터마이징하기 위한 추가 옵션을 제공하는 것을 확인할 수 있습니다. --node-monitor-period=5s, --node-monitor-grace-period=40s, --pod-eviction-timeout=5m0s와 같이 이전에 우리가 먼저 다루었던 노드 컨트롤러의 몇몇 디폴트 세팅들이 여기에 옵션으로 들어갑니다. --controllers 라는 추가 옵션이 있습니다. 활성화할 컨트롤러를 지정하는데 사용할 수 있습니다. 디폴트는 모두 활성화되어 있는 것입니다. 만약 컨트롤러가 잘 작동하지 않거나 존재하지 않는 케이스가 있다면 --controllers 옵션은 가장 먼저 보기 좋습니다.

View kube-controller-manager - kubeadm

kube-controller-manager는 어떻게 확인할까요? 만약 kubeadmin 툴로 셋업했다면 kube admin 이 kube controller manager를 마스터 노드에 있는 kube-system namespace에 파드로 배포합니다.

kubectl get pods -n kube-system

View kube-controller-manager options - kubeadm

kube-controller-manager 서버 옵션들은 어떻게 볼까요? 다시 말하지만 클러스터를 설정하는 방법에 따라 다릅니다. kubeadmin 툴로 셋업했다면, etc/kubernetes/manifests폴더 안에 있는 파드 definition file 에서 옵션들을 볼 수 있습니다.

$ cat /etc/kubernetes/manifests/kube-controller-manager.yaml

View kube-controller-manager options - Manual

kubeadm 으로 셋업하지 않았다면,  kube-controller-manager.service파일을 확인하여 option들을 볼 수 있습니다.

$ cat /etc/systemd/system/kube-controller-manager.service

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

$ ps -aux | grep kube-controller-manager

 

반응형

댓글