공대생 정리노트

11장 쿠버네티스 내부 이해(1) 본문

Kubernetes/Kubernetes in ACTION

11장 쿠버네티스 내부 이해(1)

woojinger 2021. 5. 15. 15:45

참고자료

쿠버네티스 인 액션


컨트롤 플레인과 워커 노드

구성 요소가 서로 통신하는 방법

쿠버네티스 시스템 구성 요소는 오직 API 서버하고만 통신한다.

API 서버는 etcd와 통신하는 유일한 구성 요소. 다른 구성 요소는 API 서버를 통해 클러스터 상태를 변경한다.

쿠버네티스가 etcd를 사용하는 방법

모든 오브젝트는 API 서버가 다시 시작되거나 실패하더라도 유지하기 위해 매니페스트가 영구적으로 저장될 필요가 있다.

이룰 위해 쿠버네티스는 빠르고, 분산해서 저장되며, 일관된 key-value 저장소를 제공하는 etcd를 사용한다.

분산돼 있기 때문에 etcd 인스턴스를 실행해 고가용성과 우수한 성능을 제공할 수 있다.

구성 요소들이 API 서버를 통해 간접적으로 데이터를 읽고 쓰면서 동시성 제어와 유효성 검사 등에 이점을 얻을 수 있다.

클러스터링된 etcd의 일관성 보장

고가용성을 보장하기 위해 두 개 이상의 etcd 인스턴스를 실행하는 것이 일반적. 여러 etcd 인스턴스는 일관성을 유지해야 한다.

etcd는 합의 알고리즘을 사용해 어느 순간이든 각 노드 상태가 대다수의 노드가 동의하는 현재 상태이거나 이전에 동의된 상태 중에 하나임을 보장

 

API 서버의 스케줄러 이해

일반적으로 파드를 실행할 때 클러스터 노드를 지정하지 않음. 이는 스케줄러가 하는 일

스케줄러는 선택된 노드에 파드를 실행하도록 지시하는 것이 아니라 API 서버로 파드 정의를 갱신.

API 서버는 Kubectl에 파드가 스케줄링된 것을 통보

대상 노드의 Kubelet은 파드가 해당 노드에 스케줄링된 것을 확인하자마자 파드의 컨테이너를 생성하고 실행

컨트롤러 매니저에서 실행되는 컨트롤러

컨트롤러 목록 : 레플리케이션 매니저, 레플리카셋, 데몬셋, 디플로이먼트 컨트롤러, 서비스 컨트롤러 등등..

 

컨트롤러의 역할과 동작 방식 이해

API 서버에서 리소스(디플로이먼트, 서비스 등)가 변경되는 것을 감시하고 각 변경 작업(새로운 오브젝트을 생성하거나 이미 있는 오브젝트의 갱신 혹은 삭제)를 수행.

일반적으로 조정 루플를 실행해, 실제 상태를 원하는 상태로 조정하고 새로운 상태를 리소스의 status 섹션에 기록.

감시 메커니즘을 이용해 변경 사항을 통보받지만 누락 가능성이 있어 정기적으로 목록을 가져오는 작업을 수행

 

Kubelet이 하는 일

kubelet은 다른 컨트롤러와 달리 워커 노드에서 실행

kubelet은 워커 노드에서 실행하는 모든 것을 담당하는 구성 요소

1) 실행 중인 노드를 노드 리소스로 만들어서 API 서버로 등록

2) API 서버를 지속적으로 모니터링해 해당 노드에 파드가 스케줄링되면, 파드의 컨테이너 시작

3) 실행 중인 컨테이너 모니터링 하면서 상태, 이벤트, 리소스 사용량을 API 서버에 보고

쿠버네티스 서비스 프록시의 역할

kube-proxy : 클라이언트가 쿠버네티스 API로 정의한 서비스에 연결할 수 있도록 해줌

 

Comments