apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
# 여기부터
nodeName: $NODE_NAME
# 여기까지 추가한다.
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
# 여기부터
nodeSelector:
lable: first
# 여기까지 추가한다.
Affinity 종류
NodeAffinity[2]
NodeAntiAffinity
PodAffinity[3]
PodAntiAffinity
정책 종류
requiredDuringSchedulingIgnoredDuringExecution -> required, 반드시 규칙에 맞게 Pod 배치
preferredDuringSchedulingIgnoredDuringExecution -> preferred, 우선 순위 부여, 반드시 해당 규칙에 맞게 Pod를 배치하지는 않음
Operator[4]
In -> 설정 중 하나라도 일치하면 적용된다.
NotIn -> 설정 중 하나라도 일치하면 적용되지 않는다.
Exists -> key만 살펴봄(values 값 넣으면 안됨), 모든 설정이 일치하면 적용한다.
DoesNotExists -> key만 살펴봄(values 값 넣으면 안됨), 모든 설정이 일치하면 적용 되지않는다.
Gt -> greater than, value가 정수값이어야 함. value보다 큰 값이 적용된다.
Lt -> less than, value가 정수값이어야 함. value보다 작은 값이 적용된다.
전략...
spec:
affinity:
podAntiAffinity:
# 아래 조건의 해당하는 Pod 있으면 Pod를 배치 하지 않는다.
requiredDuringSchedulingIgnoredDuringExecution:
# 반드시 아래 조건에 맞게 Pod 배치
- labelSelector:
matchExpressions:
# [key:app, value:consumer-sedam-master]를 label로 가지는 Pod를 피해서 배치
- key: app
operator: In
values:
- consumer-sedam-master
# Node의 hostname 정보 기준으로 Pod 배치
topologyKey: kubernetes.io/hostname
...후략
apiVersion: v1
kind: Pod
metadata:
name: example-pod
consumer-type: consumer-detail
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
consumer-type: consumer-detail