首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以设置topologySpreadConstraints以支持特定的区域?

是否可以设置topologySpreadConstraints以支持特定的区域?
EN

Stack Overflow用户
提问于 2022-10-24 14:15:32
回答 1查看 69关注 0票数 2

在kubernetes集群中有以下设置:

代码语言:javascript
复制
Node Name          Node Label
worker-zone-a-1    topology.kubernetes.io/zone=a
worker-zone-a-2    topology.kubernetes.io/zone=a
worker-zone-a-3    topology.kubernetes.io/zone=a
worker-zone-a-4    topology.kubernetes.io/zone=a
worker-zone-b-1    topology.kubernetes.io/zone=b
worker-zone-b-2    topology.kubernetes.io/zone=b
worker-zone-b-3    topology.kubernetes.io/zone=b

我有以下部署:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: topology.kubernetes.io/zone
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            app: nginx
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

使用topologySpreadConstraints的目的是以这样的方式分发部署--a将运行3 Pods,而区域b将运行2 Pods。

在多次应用部署时,有时a区为3,b区为2,而a区为3,b区为3。

是否有一种方法来设置部署的Pods分布,以便它总是在区域a中运行3个Pods,在区域-b中运行2个pods?

谢谢:-)

EN

回答 1

Stack Overflow用户

发布于 2022-10-25 12:47:53

有个解决办法。

首先,我要感谢@在另一个渠道中提供了解决方案。https://stackoverflow.com/users/16521581/yair-elmaliah

因此,我调整的设置如下。

Kubernetes集群中的节点具有以下标签:

代码语言:javascript
复制
Node Name        Node Labels 
worker-zone-a-1  topology.kubernetes.io/zone=a,topology.kubernetes.io/zone-a=true,node-role.kubernetes.io/data=data
worker-zone-a-2  topology.kubernetes.io/zone=a,topology.kubernetes.io/zone-a=true,node-role.kubernetes.io/data=data
worker-zone-a-3  topology.kubernetes.io/zone=a,topology.kubernetes.io/zone-a=true,node-role.kubernetes.io/data=data
worker-zone-a-4  topology.kubernetes.io/zone=a,topology.kubernetes.io/zone-a=true,node-role.kubernetes.io/data=data
worker-zone-b-1  topology.kubernetes.io/zone=b,topology.kubernetes.io/zone-b=true,node-role.kubernetes.io/data=data
worker-zone-b-2  topology.kubernetes.io/zone=b,topology.kubernetes.io/zone-b=true,node-role.kubernetes.io/data=data
worker-zone-b-3  topology.kubernetes.io/zone=b,topology.kubernetes.io/zone-b=true,node-role.kubernetes.io/data=data

这是调整后的部署:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        node-role.kubernetes.io/data: data
      topologySpreadConstraints:
      - topologyKey: topology.kubernetes.io/zone
        maxSkew: 1
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            app: nginx
      - topologyKey: topology.kubernetes.io/zone-a
        maxSkew: 1
        whenUnsatisfiable: ScheduleAnyway
        labelSelector:
          matchLabels:
            app: nginx
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

第一个约束(topologyKey: topology.kubernetes.io/zone)将使用3/2或2/3的比例在a区和b区之间分配5个豆荚。这是很好的,但我们不能控制在哪里分配3个吊舱。

第二个约束(topologyKey: topology.kubernetes.io/zone-a)将尝试在具有zone-a标签的节点上调度其中一个豆荚。

由于所有约束都是评估并组合在一起的,此设置将告诉调度程序根据区域名称部署4个吊舱,并根据区域类型部署第五个吊舱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74182473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档