Node Affinity
label을 통해서 특정 노드에 pod가 스케쥴링 될수 있도록 주는 옵션이다.
조건에 따라서 조금 더 유연한 스케쥴링이 가능하며, 더불어서 운영중에 변경값이 적용되면 무시할지 아니면 재기동 시킬지를 결정한다.
- node에 라벨링을 해준후에, node Affinity 룰을 통해서 해당 노드에 배포가 될수 있게 스케쥴링 합니다.
$ kubectl label nodes node1 disktype=ssd
## 다음과 같이 노드에 라벨링을 해준다.
$ kubectl get nodes --show-labels
## 다음과 같이 노드에 라벨링이 된지 확인한다.
- 노드 어피니티를 통해서 특정 노드에 pod가 스케쥴링 될수 있게 하는 configuration file 이다.
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disk-type
operator: In
values:
- ssd
containers:
- name: nginx
image: nginx:latest
- 4가지 종류의 조건이 있는데 4가지 조건을 명시 할 수 있다.
- requiredDuringSchedulingIgnoredDuringExecution - preferredDuringSchedulingIgnoredDuringExecution - requiredDuringSchedulingRequiredDuringExecution - preferredDuringSchedulingRequiredDuringExecution |
앞의 빨간색 preferred & Required는 hard와 soft 즉, 반드시 포함해야 하는지 또는 우선시하되 필수는 아닌지를 결정하는 조건이며
중간의 파란색 Ignored & Required는 운영 중(Runtime) Node의 Label이 변경되면 무시할 것인지(Ignore) 또는 즉시 Eviction 처리(Required)하여 재기동을 수행할 것인지를 결정합니다.
pod Affinity
- pod Affinity rule도 존재하는데, 이는 node Affinity rule과 같이 적용 가능하며
- podAffinity는 위와 같이 작성됩니다. 내용을 살펴보자면 pod와 node와 affinity rule을 다 만족시키면 해당 노드에 스케쥴링함
topologyKey는 node의 고유한 값으로 label 형태로 등록되어 있음.
kubectl describe node | grep topology
apiVersion: v1
kind: Pod
metadata:
name: with-pod-affinity
labels:
disktype: ssd
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: disktype
operator: In
values:
- ssd
topologyKey: topology.kubernetes.io/region
containers:
- name: with-pod-affinity
image: nginx:latest
'컨테이너 > Kubernetes' 카테고리의 다른 글
[Kubernetes] (16). Static Pods (0) | 2021.08.31 |
---|---|
[Kubernetes] (17). DaemonSets (0) | 2021.08.30 |
[Kubernetes] (14) Taints and Tolerations (0) | 2021.08.30 |
[Kubernetes] (13) Lables & Selectors (0) | 2021.08.29 |
[Kubernetes] (12) Scheduling 개요 (0) | 2021.08.29 |