kubernetes - nodeAffinity & nodeAntiAffinity 被忽略
问题描述
我遇到了一个问题,我试图限制部署以避开 特定的节点池,并且 nodeAffinity 和 nodeAntiAffinity 似乎不起作用。
- 我们正在运行 DOKS (Digital Ocean Managed Kubernetes) v1.19.3
- 我们有两个节点池:基础设施和客户端,两者上的节点都标记为这样
- 在这种情况下,我们希望避免部署到标记为“infra”的节点
无论出于何种原因,似乎无论我使用什么配置,Kubernetes 似乎都会在两个节点池中随机调度。
见下面的配置,以及调度的结果
deployment.yaml 片段
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
namespace: "test"
labels:
app: wordpress
client: "test"
product: hosted-wordpress
version: v1
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
selector:
matchLabels:
app: wordpress
client: "test"
template:
metadata:
labels:
app: wordpress
client: "test"
product: hosted-wordpress
version: v1
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: doks.digitalocean.com/node-pool
operator: NotIn
values:
- infra
节点描述片段 注意标签,'doks.digitalocean.com/node-pool=infra'
kubectl describe node infra-3dmga
Name: infra-3dmga
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/instance-type=s-2vcpu-4gb
beta.kubernetes.io/os=linux
doks.digitalocean.com/node-id=67d84a52-8d08-4b19-87fe-1d837ba46eb6
doks.digitalocean.com/node-pool=infra
doks.digitalocean.com/node-pool-id=2e0f2a1d-fbfa-47e9-9136-c897e51c014a
doks.digitalocean.com/version=1.19.3-do.2
failure-domain.beta.kubernetes.io/region=tor1
kubernetes.io/arch=amd64
kubernetes.io/hostname=infra-3dmga
kubernetes.io/os=linux
node.kubernetes.io/instance-type=s-2vcpu-4gb
region=tor1
topology.kubernetes.io/region=tor1
Annotations: alpha.kubernetes.io/provided-node-ip: 10.137.0.230
csi.volume.kubernetes.io/nodeid: {"dobs.csi.digitalocean.com":"222551559"}
io.cilium.network.ipv4-cilium-host: 10.244.0.139
io.cilium.network.ipv4-health-ip: 10.244.0.209
io.cilium.network.ipv4-pod-cidr: 10.244.0.128/25
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Sun, 20 Dec 2020 20:17:20 -0800
Taints: <none>
Unschedulable: false
Lease:
HolderIdentity: infra-3dmga
AcquireTime: <unset>
RenewTime: Fri, 12 Feb 2021 08:04:09 -0800
有时会导致
kubectl get po -n test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wordpress-5bfcb6f44b-2j7kv 5/5 Running 0 1h 10.244.0.107 infra-3dmga <none> <none>
其他时候导致
kubectl get po -n test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wordpress-5bfcb6f44b-b42wj 5/5 Running 0 5m 10.244.0.107 clients-3dmem <none> <none>
我尝试过使用 nodeAntiAffinity 来达到类似的效果。
最后,我什至尝试创建测试标签,而不是使用 Digital Ocean 的内置标签,我得到了同样的效果(Affinity 似乎根本不适合我)。
我希望有人可以帮助我解决甚至指出我的配置中的一个愚蠢错误,因为这个问题一直让我疯狂地试图解决它(它也是一个有用的功能,当它工作时)。
谢谢,
解决方案
好消息!
我终于解决了这个问题。
问题当然是“用户错误”。
Spec
配置中还有一条非常隐藏的额外行。
最初,在切换到 StatefulSets 之前,我们使用的是 Deployment,我有一个 pod Spec 主机名条目,它覆盖Spec
了文件顶部的 。
感谢@WytrzymałyWiktor和@Manjul的建议!
推荐阅读
- javascript - 如何一个接一个地显示视频列表?
- javascript - 如何检查具有类的元素之一的高度是否超过阈值?
- python-3.x - Outlook 使用 python win32com 仅从特定日期范围迭代邮件
- javascript - 如何生成多个
- c++ - 如何在 QT 中读取多个 .txt* 文件?
- elasticsearch - 如何创建不应匹配多个类别中的任何一个的 ElasticSearch 查询
- google-app-maker - 我正在尝试从客户端脚本更新字段的值
- shell - awk 命令后删除文件
- tensorflow - keras - `sample_weight` 在通过零时导致 NaN - 对于不平衡的数据也无效
- android - 我的应用在较旧/较小的手机中看起来很糟糕