728x90
Node Selectors
- 파드에 nodeSelector를 지정하기 위해서는 노드에 라벨링하는 작업이 우선되어야 한다.
- Cf. 노드에 라벨링하기
kubectl label node [node-name] [key]=[value]
apiVersion: v1
kind: Pod
metadata:
name: [pod-name]
spec:
containers
- name: [container-name]
image: [container-image]
nodeSelector:
[key]: [value]
이후 파드 생성(apply -f)
- 노드 셀렉터는 복잡한 요구사항을 충족시키기 어려움(NOT, OR과 같은 조건 충족 불가) → Node Affinity 등장
Node Affinity
주목적은 특정 파드가 특정 노드에 호스트되게 하는 것
- 스케쥴링될 때 selector에 일치하는 라벨(Node Selector)이 없으면 노드에 배치되지 못함
- → 이 때 노드 선호도(Node Affinity)의 영향을 받음
apiVersion: v1
kind: Pod
metadata:
name: [pod-name]
spec:
containers:
- name: [container-name]
image: [image-name]
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: [key1]
operator: [operator]
values:
- [value1]
- [value2]
- ..matchExpression.operator
- In: values 항목 중 하나라도 있으면 충족
- NotIn: values 항목들에 속하지 않으면 충족
- Exists: key가 존재하기만 하면 충족(values를 고려하지 않음)
- DoesNotExist: key가 존재하지만 않으면 충족(values를 고려하지 않음)
- 노드 선호도 유형
- requiredDuringSchedulingIgnoredDuringExecution: 필수 규칙을 정하고 이에 일치하는 노드에만 배치 될 수 있음 - 일치하는 노드가 없는 경우 배치 불가 (이미 실행중인 파드는 상관 X)
- preferredDuringSchedulingIgnoredDuringExecution: 스케쥴링될 때 selector에 일치하는 라벨이 없으면 모든 가능한 노드 중에서 배치함 - 배치보다 실행을 더 중요하다고 보는 관점 (이미 실행중인 파드는 상관 X)
- requireDuringSchedulingRequireDuringExecution: 실행중인 파드여도 선호도에 충족되지 않으면 퇴출
- Cf. 노드의 라이프사이클에는 크게 DuringScheduling(존재하지 않다가 처음 파드가 생성될 때)와 DuringExecution(실행중일 때)로 나뉜다. 처음 생성될 때 required인지 preferred인지로 나뉘고, 생성시(DuringScheduling) required인 경우 또 다시 실행 중(DuringExecution)일 때 ignored인지 required인지로 나뉜다.
반응형
'Kubernetes' 카테고리의 다른 글
k8s) Scheduling - 4. DaemonSet & Static Pod (1) | 2023.11.17 |
---|---|
k8s) Scheduling - 3. Requirements & Limits (1) | 2023.11.17 |
k8s) Scheduling - 1. Taints & Tolerations (0) | 2023.11.17 |
k8s) 명령형(Imperative) vs 선언형(Declarative) 관리 (1) | 2023.11.17 |
K8s) Kubernetes objects (0) | 2023.11.17 |