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) => 설정에 따라 파드가 삭제될 수 있다.
'IT > CKA' 카테고리의 다른 글
CKA 준비과정 - Scheduling (6) / DaemonSets, Static Pods (0) | 2023.05.20 |
---|---|
CKA 준비과정 - Scheduling (5) / 리소스 요구사항과 한도 (0) | 2023.05.20 |
CKA 준비과정 - Scheduling (3) / Taints and Tolerations (1) | 2023.05.14 |
CKA 준비과정 - Scheduling (2) / Labels and Selectors (0) | 2023.05.13 |
CKA 준비과정 - Scheduling (1) (0) | 2023.05.13 |