Pod AntiAffinity:它可以容忍不同的pod版本吗?

时间:2017-10-19 18:24:24

标签: kubernetes

这是我的设置:

  • 2个节点
  • 相同应用的2个广告
  • 部署设置允许激增1个pod

我的问题:我不希望同一个应用程序/版本的2个pod在同一节点上运行。这可以通过AntiAffinity完成,但是当我部署新版本时,它会尝试添加第3个pod(浪涌吊舱),但由于AntiAffinity设置而失败,因为只有2个节点。

问题:我可以微调AntiAffinity以允许相同应用但不同版本的pod在同一节点上运行吗?

以下是反映我的设置的规范。

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: my-app
 spec:
   replicas: 2
   minReadySeconds: 10
   strategy:
     rollingUpdate:
       maxUnavailable: 0
       maxSurge: 1
   template:
     metadata:
       labels:
         app: my-app
...
    affinity:
      podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - my-app
              topologyKey: "kubernetes.io/hostname"

1 个答案:

答案 0 :(得分:0)

您可以,但它需要修改标签作为“新版本”的一部分:

  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
        pod-version-anti-affinity: my-app-v1
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchLabels:
                pod-version-anti-affinity: my-app-v1
            topologyKey: kubernetes.io/hostname

这意味着部署的选择器仅查看“my-app”,它将在您的应用程序的所有“版本”中保持一致。

但是,pod本身还包含另一个特定于其“版本”的标签。这意味着反关联性规则可以仅针对该特定标签,这将允许同一应用程序的不同版本在滚动升级期间共同位于节点上。

您只需要知道在部署新版本时,您需要修改模板中的标签。亲和力(例如“-v2”)。