Pod 关联性设置在我的部署中无法正常工作
Pod affinity settings is not working properly in my deployment
我尝试在 k3s 上部署 2 个副本 - 每个副本都部署到不同的节点。根据文档,这应该很容易。但是,我一定是犯了一些我找不到的愚蠢错误。当我应用部署文件时,我的两个 pods 都是 运行 同一个节点 (node1)。如果我关闭该节点,这些 pods 将在另外 2 个节点上启动(node2、node3)。当我重新启动 node1 并重新部署应用程序时,它再次 运行s 在同一个 node1 上。
如果有人可以告诉我我的配置有什么问题,我将不胜感激。
(我 运行 在具有相同硬件配置的 3 台服务器上使用全新的 k3s)
apiVersion: apps/v1
kind: Deployment
metadata:
name: tbd-node-js-runner
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: tbd-node-js-runner
template:
metadata:
labels:
app: tbd-node-js-runner
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- tbd-node-js-runner
topologyKey: topology.kubernetes.io/hostname
containers:
- name: tbd-node-js-runner
image: tabidoo/nodejs-runner:latest
ports:
- containerPort:
env:
- name: CONNECTION_STRING
value: "..."
...
imagePullPolicy: Always
imagePullSecrets:
- name: regcred
是topologyKey不正确导致的,应该是'kubernetes.io/hostname'而不是'topology.kubernetes.io/hostname'。
所以它会像下面这样:
apiVersion: apps/v1
kind: Deployment
metadata:
name: tbd-node-js-runner
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: tbd-node-js-runner
template:
metadata:
labels:
app: tbd-node-js-runner
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- tbd-node-js-runner
topologyKey: "kubernetes.io/hostname"
containers:
- name: tbd-node-js-runner
image: tabidoo/nodejs-runner:latest
我尝试在 k3s 上部署 2 个副本 - 每个副本都部署到不同的节点。根据文档,这应该很容易。但是,我一定是犯了一些我找不到的愚蠢错误。当我应用部署文件时,我的两个 pods 都是 运行 同一个节点 (node1)。如果我关闭该节点,这些 pods 将在另外 2 个节点上启动(node2、node3)。当我重新启动 node1 并重新部署应用程序时,它再次 运行s 在同一个 node1 上。 如果有人可以告诉我我的配置有什么问题,我将不胜感激。 (我 运行 在具有相同硬件配置的 3 台服务器上使用全新的 k3s)
apiVersion: apps/v1
kind: Deployment
metadata:
name: tbd-node-js-runner
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: tbd-node-js-runner
template:
metadata:
labels:
app: tbd-node-js-runner
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- tbd-node-js-runner
topologyKey: topology.kubernetes.io/hostname
containers:
- name: tbd-node-js-runner
image: tabidoo/nodejs-runner:latest
ports:
- containerPort:
env:
- name: CONNECTION_STRING
value: "..."
...
imagePullPolicy: Always
imagePullSecrets:
- name: regcred
是topologyKey不正确导致的,应该是'kubernetes.io/hostname'而不是'topology.kubernetes.io/hostname'。
所以它会像下面这样:
apiVersion: apps/v1
kind: Deployment
metadata:
name: tbd-node-js-runner
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: tbd-node-js-runner
template:
metadata:
labels:
app: tbd-node-js-runner
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- tbd-node-js-runner
topologyKey: "kubernetes.io/hostname"
containers:
- name: tbd-node-js-runner
image: tabidoo/nodejs-runner:latest