16.9.2. 配置 Pod 关联性和反关联性
您可以通过 pod 规格文件来配置 pod 的关联性/反关联性。您可以指定 必要规则(required rule)或 偏好规则(preferred rule) ,或同时指定两者。如果您同时指定,节点必须首先满足必要规则,然后尝试满足偏好规则。
以下示例显示配置了 pod 关联性和反关联性的 pod 规格。
在本例中,pod 关联性规则指明,只有当节点至少有一个已在运行且具有键 security
和值 S1
的标签的 pod 时,pod 才可以调度到这个节点上。pod 反关联性则表示,如果节点已在运行带有键 security
和值 S2
.的标签的 pod,则 pod 将偏向于不调度到该节点上。
设有 pod 关联性的 pod 配置文件示例
apiVersion: v1 kind: Pod metadata: name: with-pod-affinity spec: affinity: podAffinity: 1 requiredDuringSchedulingIgnoredDuringExecution: 2 - labelSelector: matchExpressions: - key: security 3 operator: In 4 values: - S1 5 topologyKey: failure-domain.beta.kubernetes.io/zone containers: - name: with-pod-affinity image: docker.io/ocpqe/hello-pod
设有 pod 反关联性的 pod 配置文件示例
apiVersion: v1 kind: Pod metadata: name: with-pod-antiaffinity spec: affinity: podAntiAffinity: 1 preferredDuringSchedulingIgnoredDuringExecution: 2 - weight: 100 3 podAffinityTerm: labelSelector: matchExpressions: - key: security 4 operator: In 5 values: - S2 topologyKey: kubernetes.io/hostname containers: - name: with-pod-affinity image: docker.io/ocpqe/hello-pod
如果节点标签在运行时改变,使得不再满足 pod 上的关联性规则,pod 会继续在该节点上运行。
16.9.2.1. 配置关联性规则
以下步骤演示了一个简单的双 pod 配置,它创建一个带有某标签的 pod,以及一个使用关联性来允许随着该 pod 一起调度的 pod。
创建 pod 规格中具有特定标签的 pod:
$ cat team4.yaml apiVersion: v1 kind: Pod metadata: name: security-s1 labels: security: S1 spec: containers: - name: security-s1 image: docker.io/ocpqe/hello-pod
在创建其他 pod 时,请按下方所示编辑 pod 规格:
-
使用
podAffinity
小节配置requiredDuringSchedulingIgnoredDuringExecution
参数或preferredDuringSchedulingIgnoredDuringExecution
参数: 指定必须满足的键和值。如果您希望新 pod 与另一个 pod 一起调度,请使用与第一个 pod 上标签相同的
key
和value
参数。podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: security operator: In values: - S1 topologyKey: failure-domain.beta.kubernetes.io/zone
-
指定一个
operator
。运算符可以是In
、NotIn
、Exists
或DoesNotExist
。例如,使用运算符In
来要求节点上存在该标签。 -
指定
topologyKey
,这是一个预填充的 Kubernetes 标签,供系统用于表示这样的拓扑域。
-
使用
创建 pod。
$ oc create -f <pod-spec>.yaml