본문 바로가기
K8S

포드의 스케줄링 구조

by Rainbound-IT 2021. 7. 22.
반응형

쿠버네티스에서 포드가 어떻게 배치되는지 알아보자

 

포드의 생성 방식

스케줄링 : 컨테이너 애플리케이션을 구체적으로 어떤 노드에서 움직이게 할지를 알고리즘에 기초하여 배치한다.

 

마스터 노드안에는 API server가 있는데 이것은 C,R,U,D를 하기위해 RESTful 인터페이스를 가지고 있다.

 

etcd(클러스터의 상태데이터 소유)에 대한 액세스하기위해 APIserver를 사용하고 이때 동시 갱신이 발생할 경우 오버라이딩이 발생하지 않도록 API server가 제어한다.

 

1. 만들 포드를 매니페스트 파일에 기술하고 kubctl -f [매니페스트파일] 실행하면 API server로 정보송신

2. 클러스터 구성 정보의 갱신 - 수신받은 데이터를 etcd에 저장

3. 클러스터 구성 변경의 통지 - 구성정보에 변경내용이 있으면 API server에 통지한다.

4. 포드의 생성 - API server는 클러스터 안에서 움직이는 새로운 포드의 명령을 송신한다. 여기서 컨테이너 어플리케이션은 kubelet에 의해실행이 된다.

 

포드의 노드 배치 방식

위 3번까지는 같다.

4. 포드를 할당할 노드를 정한다 - 포드가 작성되면 스케줄러는 어떤노드에 포드를 배치할지 정한다.

5. 포드의 할당 위치 갱신 - 스케줄러가 포드를 배치할 노드 정하면 API server(Pod API)를 호출하고 etcd 상의 포드 정보에 배치노드를 갱신한다. 그리고 스케줄러는 여기서 일이 모두 끝난다.

6. 포드 정보의 변경 감지 - API server를 항상 감시하는 kubelet이 변경을 감지한다.

7. 포드의 생성 - kublet은 컨테이너 런타임(Docker)에 포드 생성을 지시한다. 

 

노드의 필터링 - 설정된 리소스가 노드에 있는지 보고 포드 배치(NodeSelector에 의해 배치)

노드의 스코어링 - 우선순위에 따라 배치

 

 

포드를 노드에 명시적으로 할당하기

해당포드에 라벨을 붙임 - 포드 매니페스트파일의 spec에 nodeselect값에 해당포드 라벨을 입력

그리고 kubectl create -f [YAML] 실행 하면 해당노드에 포드가 실행된다.

 

 

노드에 포드 배치제어

방식은 두가지 pod affinity/ Anti Affinity 가 있다.

 

 

pod Affinity는 한 노드에 지정된 포드를 배치하고 싶어질때 사용

이방식에는 두가지 required 와 preferred 방식이 있는데

required는 반드시 요건에 만족해야만 실행 가능하고,

preferred는 요건에 만족하지 않으면 다른 노드에 배치하는 방식이다.

 

 

https://kubernetes.io/ko/docs/concepts/scheduling-eviction/assign-pod-node/

 

노드에 파드 할당하기

특정한 노드(들) 집합에서만 동작하도록 파드를 제한할 수 있다. 이를 수행하는 방법에는 여러 가지가 있으며 권장되는 접근 방식은 모두 레이블 셀렉터를 사용하여 선택을 용이하게 한다. 보통

kubernetes.io

 

 

Anti Affinity는 특정 노드에 포드를 스케줄링 하지 않도록 하는 방식

이때 Taints와 Tolerations를 사용한다.

Taints에 NoSchedule로 지정하면 해당노드에 포드를 스케줄하지 않으며

PreferNoSchedule로 지정하면 미리 용인된 포드외에는 스케줄 하지 않는다.(화이트리스트같음)

Taints가 지정된 노드에 배치하고 싶으면 Tolerations를 설정하면된다.

 

https://kubernetes.io/ko/docs/concepts/scheduling-eviction/taint-and-toleration/

 

테인트(Taints)와 톨러레이션(Tolerations)

노드 어피니티는 노드 셋을 (기본 설정 또는 어려운 요구 사항으로) 끌어들이는 파드의 속성이다. 테인트 는 그 반대로, 노드가 파드 셋을 제외할 수 있다. 톨러레이션 은 파드에 적용되며, 파드

kubernetes.io

 

반응형

'K8S' 카테고리의 다른 글

노드의 리소스 관리  (0) 2021.07.28
관리 ID  (0) 2021.07.28
포드를 사용한 컨테이너 애플리케이션의 관리  (0) 2021.07.22
매니페스트 파일  (0) 2021.07.22
쿠버네티스의 리소스  (0) 2021.07.22

댓글