Node affinity 在概念上类似于nodeSelector,它允许您根据节点标签来限制Pod可以调度到哪些节点上。有两种类型的节点亲和性:
注意:在上述类型中,IgnoredDuringExecution表示如果在Kubernetes调度Pod之后节点标签发生变化,Pod将继续运行。
开发人员可以在Pod规范的.spec.affinity.nodeAffinity字段中指定Node 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
在Kubernetes集群中,Node affinity(节点亲和性)是一种机制,用于控制Pod在调度时所选取的节点。它允许您根据节点的属性和标签,指定Pod在哪些节点上可以调度和运行。
Node affinity可以用于多种场景,包括:
Node affinity的配置基于节点标签和Pod规范中的affinity字段。在Pod规范中,您可以使用.spec.affinity.nodeAffinity来指定节点亲和性的规则。Node affinity有两种类型:
需要注意的是,在这两种类型中,IgnoredDuringExecution表示一旦Pod被Kubernetes调度到节点上后,即使节点的标签发生变化,Pod也会继续在该节点上运行。
Node affinity的规则可以根据节点标签的匹配性和非匹配性来定义。例如,您可以使用类似于"matchExpressions"和"matchFields"的字段来指定节点标签的匹配规则,以决定Pod是否应该被调度到节点上。
使用Node affinity时,需要考虑以下几点:
使用nodeSelector可能更简单和直观。
总之,Node affinity是Kubernetes集群中用于控制Pod调度的重要机制之一。它通过使用节点标签和Pod规范中的affinity字段,允许您指定Pod应该调度到哪些节点上。这为您提供了更大的灵活性,以满足不同的调度需求,如硬件要求、数据局部性和资源隔离。