Affinity 는 파드가 어떤 노드에 스케줄링되어야 하는지 또는 특정 노드에 스케줄링되지 않아야 하는지를 지정하는 메커니즘입니다. 어피니티는 파드와 노드 간의 관계를 정의하여 파드를 특정 노드에 더 자주 또는 덜 자주 스케줄링할 수 있게 해줍니다.
apiVersion: v1
kind: Pod
metadata:
name: with-node-affinity
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- antarctica-east1
- antarctica-west1
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
containers:
- name: with-node-affinity
image: registry.k8s.io/pause:2.0
apiVersion: v1
kind: Pod
metadata:
name: with-pod-affinity
spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S1
topologyKey: topology.kubernetes.io/zone
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: security
operator: In
values:
- S2
topologyKey: topology.kubernetes.io/zone
containers:
- name: with-pod-affinity
image: registry.k8s.io/pause:2.0
어피니티를 사용하면 특정 노드에 특정 타입의 워크로드를 할당하거나, 특정 파드가 같은 노드에 스케줄링되도록 할 수 있습니다. 이는 성능 최적화, 데이터 로컬리티, 네트워크 토폴로지 고려 등과 관련된 다양한 시나리오에서 유용합니다.