Pod 关联性设置在我的部署中无法正常工作

Pod affinity settings is not working properly in my deployment

我尝试在 k3s 上部署 2 个副本 - 每个副本都部署到不同的节点。根据文档,这应该很容易。但是,我一定是犯了一些我找不到的愚蠢错误。当我应用部署文件时,我的两个 pods 都是 运行 同一个节点 (node1)。如果我关闭该节点,这些 pods 将在另外 2 个节点上启动(node2node3)。当我重新启动 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