전공공부
Node Selectors & Node Affinity 본문
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 |