Pod AntiAffinity 在我的 Kubernetes 集群中不起作用

问题描述 投票:0回答:1

大家!有谁知道我在哪里做错了吗?我想使用 DeploymentAntiNodeAffinity 模拟 DaemonSet 行为,将每个 pod 放置在不同的节点上。如果我使用

topologyKey
设置为每个节点上存在的标签
kubernetes.io/hostname
,它工作正常。我有
1 master
1 worker
,使用3个副本,最后一个将处于待定状态。

NAME                                   READY   STATUS    RESTARTS   AGE
nginx-anti-affinity-5dbbbb9b9d-7jxhq   1/1     Running   0          5m38s
nginx-anti-affinity-5dbbbb9b9d-jgjs9   1/1     Running   0          5m38s
nginx-anti-affinity-5dbbbb9b9d-xv6cx   0/1     Pending   0          5m38s

但是,如果我只想将 Pod 放置在工作节点上,我只在我的工作节点上分配了一个新标签

type=worker
。因此,它现在应该只运行 1 个副本,并使 2 个 pod 处于挂起状态。最后,它不起作用并在我的节点上运行所有 pod。当我将
topologyKey
更改为任何其他预定义标签(如
kubernetes.io/os
)时,它也会停止正常工作......

k get nodes --show-labels | grep type 
                                                                                          
minikube-m02   Ready    <none>          24m   v1.24.3   beta.kubernetes.io/arch=arm64,beta.kubernetes.io/os=linux,kubernetes.io/arch=arm64,kubernetes.io/hostname=minikube-m02,kubernetes.io/os=linux,type=worker
NAME                                   READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
nginx-anti-affinity-8595847fd8-4zlv4   1/1     Running   0          68s   172.17.0.4   minikube       <none>           <none>
nginx-anti-affinity-8595847fd8-95nrb   1/1     Running   0          68s   172.17.0.3   minikube       <none>           <none>
nginx-anti-affinity-8595847fd8-q598k   1/1     Running   0          68s   172.17.0.2   minikube-m02
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    id: nginx-anti-affinity
  name: nginx-anti-affinity
spec:
  replicas: 3
  selector:
    matchLabels:
      id: nginx-anti-affinity
  strategy: {}
  template:
    metadata:
      labels:
        id: nginx-anti-affinity
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: id
                operator: In
                values:
                - nginx-anti-affinity
            topologyKey: "type"
      containers:
      - image: nginx
        name: nginx
        resources: {}
status: {}

我正在尝试使用 DeploymentAntiNodeAffinity 来模拟 DaemonSet 行为,以将每个 pod 放置在不同的节点上。

kubernetes deployment minikube
1个回答
0
投票

我在k8s文档中找到了合适的答案。所有节点都应该被标记,否则,它会以意想不到的方式工作。

注意: Pod反亲和性要求节点的标签一致,换句话说,集群中的每个节点都必须有一个合适的标签匹配

topologyKey
。如果部分或所有节点缺少指定的
topologyKey
标签,可能会导致意外行为。

© www.soinside.com 2019 - 2024. All rights reserved.