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 中查看的部署已经过时。
我是 运行 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 中查看的部署已经过时。