2017-10-19 24 views
0

这里是我的设置:Pod AntiAffinity:它可以容忍不同的pod版本吗?

  • 2节点
  • 2个豆荚相同的应用程序
  • 部署设置允许的1个荚一股

我的问题:我不想2要在同一个节点上运行相同应用/版本的Pod。这可以使用AntiAffinity完成,但是当我部署新版本时,它会尝试添加第3个吊舱(电涌吊舱),并且由于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" 

回答

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 

这意味着,对于部署选择是只盯着“我的应用程序内”,这将在您的应用程序的所有“版本”中保持一致。

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

您只需要知道,当您部署新版本时,可以修改模板&关联性中的标签(例如修改为“-v2”)。

+0

我更喜欢寻找一种设置,而不是以合乎逻辑的方式来解决我的问题,但是,您的解决方案是有效的。谢谢! –

相关问题