我在 k8s 上进行了一系列部署,部署相同的服务器二进制文件,但规格不同,例如内存限制等。每个部署仅运行 1 个 pod,并且希望为这些部署安排 pod,以便每个虚拟机仅安排单个 pod。
由于某些部署需要比其他部署更大的内存,因此我们结合nodeAffinity和podAntiAffinity来满足以下要求。
pod_group_affinity==的 podper_node下面是我的配置。
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node.kubernetes.io/instance-type
operator: In
values:
- ${INSTANCE_TYPE}
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: pod_group_affinity
operator: In
values:
- per_node
topologyKey: "kubernetes.io/hostname"
Run Code Online (Sandbox Code Playgroud)
我首先尝试使用本地 minikube 作为单个虚拟机(并提供正确的 node.kubernetes.io/instance-type 值),但所有部署的 pod 均已安排。它不应该发生,因为所有 pod 都有 pod_group_affinity == per_node 标签。即使我删除了nodeAffinity部分,podAntiAffinity似乎仍然不起作用。
我错过了什么吗?例如,podAntiAffinity 不适用于多个部署中的 pod 间?但只要我读了这篇文章https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#more-practical-use-cases,podAntiAffinity就可以引用另一个部署中的pod标签。
问候,
编辑:由于@confused Genius的建议,我添加了更多信息来调查原因。
kubectl get nodes --show-labes$ kubectl get nodes --show-labels
NAME …Run Code Online (Sandbox Code Playgroud) kubernetes ×1