nodeSelector 不能可靠地将 pods 放置在正确的 EKS 工作节点上

nodeSelector does not reliably place pods on the correct EKS worker nodes

我是 运行 EKS 中的 Kubernetes 集群,但由于某些原因,并不总是遵循部署中的 nodeSelector 属性。

三个部署: 1 - 卡桑德拉:

kind: StatefulSet
metadata:
  name: cassandra
  labels:
    app: cassandra
spec:
  serviceName: cassandra
  replicas: 3
...
    spec:
      terminationGracePeriodSeconds: 1800
      containers:
      - name: cassandra
        image: gcr.io/google-samples/cassandra:v13
...
      nodeSelector:
        layer: "backend"

2 - 卡夫卡

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    service: kafka
...
    spec:
      containers:
        image: strimzi/kafka:0.11.3-kafka-2.1.0
...
      nodeSelector:
        layer: "backend"
...

3 - 动物园管理员

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    service: zookeeper
...
    spec:
      containers:
        image: strimzi/kafka:0.11.3-kafka-2.1.0
...
      nodeSelector:
        layer: "backend"
...

注意 - 所有三个在容器规范上都有 nodeSelector "layer=backend"。我只有 2 "backend" pods,但是,当我查看 pods 时,我看到:

% kubectl get all -o wide
NAME                             READY   STATUS    RESTARTS   AGE     IP             NODE                                         NOMINATED NODE   READINESS GATES
pod/cassandra-0                  1/1     Running   0          9m32s   10.1.150.39    ip-...-27.us-west-2.compute.internal    <none>           <none>
pod/cassandra-1                  1/1     Running   0          7m56s   10.1.100.7     ip-...-252.us-west-2.compute.internal   <none>           <none>
pod/cassandra-2                  1/1     Running   0          6m46s   10.1.150.254   ip-...-27.us-west-2.compute.internal    <none>           <none>
pod/kafka-56dcd8665d-hfvz4       1/1     Running   0          9m32s   10.1.100.247   ip-...-252.us-west-2.compute.internal   <none>           <none>
pod/zookeeper-7f74f96f56-xwjjt   1/1     Running   0          9m32s   10.1.100.128   ip-...-154.us-west-2.compute.internal   <none>           <none>

它们被放置在三个不同的节点上 - 27、252 和 154。查看每个节点上的 "layer" 标签:

> kubectl describe node ip-...-27.us-west-2.compute.internal | grep layer
                    layer=backend
> kubectl describe node ip-...-252.us-west-2.compute.internal | grep layer
                    layer=backend
> kubectl describe node ip-...-154.us-west-2.compute.internal | grep layer
                    layer=perf

154节点的标签是"perf",不是"backend"。所以根据我对 nodeSelector 的理解,zookeeper pod 不应该放在那里。我已经删除了所有内容(包括节点本身)并尝试了几次 - 有时是 kafka 被放在那里,有时是 zookeeper,但可靠的是有些东西被放在不应该放的地方。

据我所知,我确实想要的节点有足够的容量,即使它们没有,我也希望出现无法调度 pod 的错误,而不是忽略 nodeSelector。

我错过了什么? nodeSelector 不是 100% 可靠吗?还有另一种方法可以强制 pods 仅放置在具有特定标签的节点上吗?

因用户错误而关闭。

一个单独的进程恢复了我的 git 更改,我在 IDE 中查看的部署已经过时。