profile image

L o a d i n g . . .

Kubelet 작업

Kubelet은 워커 노드에서 실행하는 모든 것을 담당한다. 

  • Kubelet은 실행 중인 노드를 노드 리소스로 만들어서 API 서버에 등록한다. 

  • 실행 중인 노드를 모니터링하고 상태를 API 서버에 보고한다. 
  • API 서버를 지속적으로 모니터링해서 해당 노드에 파드가 스케줄링되면, 파드의 컨테이너를 실행한다. 설정된 컨테이너 런타임(도커, rkt 등) 에 지정된 컨테이너 이미지로 컨테이너를 실행함으로써 이 작업을 수행한다.

  • Kubelet은 실행 중인 컨테이너를 계속 모니터링 하면서 상태, 이벤트, 리소스 사용량을 API 서버에 보고한다.
     컨테이너가 제대로 실행되지 못하면, 컨테이너를 다시 시작한다.

  • 컨테이너가 제대로 실행되지 못하면, 컨테이너를 다시 시작한다.

  • API 서버에서 파드가 삭제되면 컨테이너를 정지하고 파드가 종료된 것을 서버에 통보한다. 

  • Static Pod
    보통 Kubelet은 쿠버네티스 API 서버와 통신해 파드 매니페스트를 가져온다. 하지만 특정 로컬 디렉토리 안(/etc/kubernetes/manifest 디렉토리 안에 있는 yaml 파일) 에 있는 메니페스트 파일을 기반으로 파드를 실행할 수 있다. 
    (Kubelet 설정으로 이 static Pod path 는 수정이 가능하다.)

 

Kubelet 동작

보통 마스터 노드 /etc/kubernetes/manifest 디렉토리 안에 apiserver.yaml, contoller-manager.yaml, etcd.yaml 의 설정 파일이 있다. api server, 컨트롤러 매니저, etcd 다 kubelet이 static pod로 실행하는 서비스들이다.

그래서 우리는 api server, 컨트롤러 매니저, etcd 바이너리 파일 다운로드 받고, 설정하고 이럴 필요가 없는 것이다. 혹시나 서비스가 crash되더라도, static pod이기 때문에 kubelet이 상태를 주시하며 자동적으로 restart 한다. 

정리하자면,

* kubelet은 요청을 받고 pod을 생성하고 관리한다.
* kubelet은 두 가지 형태로 요청 입력을 체크한다. 
    1. static pod 폴더에 있는 pod definition file 을 통해
    2. http api endpoint를 통해 (Kube api-server가 Kubelet으로 요청을 하는 방식)

참고로, Kubelet이 static pod를 생성할 때, api-server에 해당 Pod의 mirror pod를 등록한다. 따라서 kubectl을 통해 pod 의 상태는 알 수 있지만, 수정/삭제 등의 행위는 못한다. 오직 node의 static pod 폴더에 있는 pod definition file 수정을 통해 가능하다. 


참고
쿠버네티스 인 액션(마르코 룩샤) 11장

복사했습니다!