我有一个包含 6 个节点的多专区(3 个专区)GKE 集群(1.10.7-gke.1),并且希望每个专区至少拥有我的应用程序的一个副本。
所以我尝试了首选的 podAntiAffinity:
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 100
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: component
              operator: In
              values:
              - app
          topologyKey: failure-domain.beta.kubernetes.io/zone
我第一次安装(从 1 到 3 个副本)我的应用程序时,一切看起来都很好。在下一次滚动更新之后,一切都会变得混乱,我可以在一个区域中拥有 3 个应用程序副本。因为额外的副本被创建,旧的副本被终止。
当我尝试与requiredDuringSchedulingIgnoredDuringExecution相同的术语时,一切看起来都不错,但滚动更新不起作用,因为无法安排新的副本(每个区域中已经存在带有“component”=“app”的 pod)。
如何配置我的部署以确保我在每个可用区都有副本?
更新:
我现在的解决方法是在滚动更新期间进行严格的反关联并拒绝额外的 pod(超过 3 个):
  replicaCount: 3 
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: component
            operator: In
            values:
            - app
        topologyKey: failure-domain.beta.kubernetes.io/zone
  deploymentStrategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 0
      maxUnavailable: 1
| 归档时间: | 
 | 
| 查看次数: | 1465 次 | 
| 最近记录: |