Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

전공공부

Node Selectors & Node Affinity 본문

Study/K8S

Node Selectors & Node Affinity

monitor 2023. 3. 22. 00:23

1. Node Selector


Label Nodes

노드에 라벨을 붙이는 방법

 

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

 

kubectl label nodes node-1 size=Large

 

pod-definition.yaml

apiVersion:
kind: Pod
metadata: 
  name: myapp-pod
spec:
  containers:
    - name: data-processor
      image: data-processor
  nodeSelector:
    size: Large # Node에 할당된 Label(key,value)을 통해서 Large Node 인지 알아봄

 

하지만, 위와 같이 nodeSelector로 모든 노드에 붙일 수는 없다 size middle과 같이 여러 다른 상황이라면 일일이 nodeSelector를 붙여야 할까? 그건 아니다.

 

2. Node Affinity - Pods to Nodes


pod-definiton.yaml

apiVersion:
kind: Pod
metadata: 
  name: myapp-pod
spec:
  containers:
    - name: data-processor
      image: data-processor
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
            - key: size
              operator: In
              values: #위 키에 대한 값들을 In으로 가질 수 있다.
              - Large
              - Medium

 

위의 예시는 아래와도 같은 역할을 수행한다.

 

apiVersion:
kind: Pod
metadata: 
  name: myapp-pod
spec:
  containers:
    - name: data-processor
      image: data-processor
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
            - key: size
              operator: NotIn
              values: #위 키에 대한 값들을 In으로 가질 수 있다.
              - Small

 

구체적인 operator는 공식 문서를 참조하자

 

근데, 위와 같이 Node를 설정해두고 Pod를 모두 연결했다면 추후 해당 Node를 삭제하면 Pod도 영원히 종료가 되어질까?

당연히 아니다.

 

requiredDuringSchedulingIgnoredDuringExecution
preferredDuringSchedulingIgnoredDuringExecution

위의 두 설정은 nodeAffinity 하부에서 설정되는 키이다.

 

1) required의 경우 스케줄링 도중에 노드 친화성 규칙을 준수하여서 Node가 없으면 Pod를 두지 못한다. 허나 이미 두었는데 Node 삭제와 같은 예외 발생시에는 무시한다.

 

2) preferred의 경우 스케줄링 도중에 Node가 없을 때는 노드 친화성 규칙을 무시하고 노드 배치후 작업을 진행한다. 허나 이미 두었는데 Node 삭제와 같은 예외 발생시에는 무시한다.

 

requiredDuringSchedulingRequiredDuringExecution

3) 위 명령어의 경우 노드에서 라벨이 제거가 되면 Pod가 퇴출된다. 언제든지

 

'Study > K8S' 카테고리의 다른 글

Readiness & Liveness Probe  (0) 2023.03.26
Multi-Container PODs  (0) 2023.03.26
Taints And Tolerations  (0) 2023.03.19
Resource Requirements  (0) 2023.03.19
Service Account  (2) 2023.03.19