IT/CKA

CKA 준비과정 - Scheduling (4) / Node selectors, Node Affinity

Primes 2023. 5. 14. 15:47
728x90

Node Selectors

리소스 가용량이 큰 Node1과, 가용량이 적은 Node 2/3이 있다고 가정한다.

많은 자원을 요구하는 애플리케이션을 Node1 에 할당하여야 할 때, Node Selector를 활용한다.

 

pod 생성 시, nodeselector 필드를 추가하여 원하는 node에 할당될 수 있도록 설정한다.

위의 이미지에서는 Large 태그를 부여하고, Node1 도 large 속성을 가지도록 한다.

 

Node1에 large 속성을 부여할 때는 아래와 같은 명령어를 사용한다.

# kubectl label nodes <node-name> <label-key>=<label-value>

==> kubectl label nodes Node1 size=Large

 

이렇게, Node Selector를 통해 원하는 조건에 맞는 노드에 파드를 할당할 수 있다.

하지만 더 복잡한 요구사항이 들어간다면, Node Selector로는 부족해진다. 이 때에는 우선순위 설정이 들어간다.

 

이것이 바로 Node Affinity 이다.

 

Node Affinity

 

node selector 와 node affinity 의 정의값을 비교해보면 많은 차이가 나는 것을 알 수 있다.

selector의 경우에는 단순히 label 만 기재하였지만, affinity 는 좀 더 세세하고 다양한 필드값이 있는 것을 볼 수 있다.

 

필드값에 대해서 좀 더 자세히 알아보자.

 

 

위 이미지는 필드 옵션의 문법과 같다.

DuringScheduling => 스케줄링 하는 동안

DuringExecution => 실행하는 동안

required / DuringScheduling / Ignored / DuringExecution => 스케줄링 하는 동안(DuringScheduling), 해당 Affinity 설정을 가진 노드가 없다면 파드를 생성하지 않는다(required). 또한, 파드가 이미 실행중인 상태라면(DuringExecution) Affinity 설정이 바뀌어도 무시한다. (Ignored)

preferred / DuringScheduling / Ignored / DuringExecution => 스케줄링 하는 동안(DuringScheduling), 해당 Affinity 설정을 가진 노드가 없다면 차순위로 선호되는 노드에 파드를 생성한다.(preffered) 또한, 파드가 이미 실행중인 상태라면(DuringExecution), Affinity 설정이 바뀌어도 무시한다.(Ignored)

required / DuringScheduling / Requred / DuringExecution => 스케줄링 하는 동안(DuringScheduling), 해당 Affinity 설정을 가진 노드가 없다면 파드를 생성하지 않는다(required). 또한, 파드가 이미 실행중인 상태이어도(DuringExecution) Affinity 설정을 반영한다.(required) => 설정에 따라 파드가 삭제될 수 있다.

 

 

반응형