在kubernetes集群中有以下设置:
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我有以下部署:
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?
谢谢:-)
发布于 2022-10-25 12:47:53
有个解决办法。
首先,我要感谢@在另一个渠道中提供了解决方案。https://stackoverflow.com/users/16521581/yair-elmaliah
因此,我调整的设置如下。
Kubernetes集群中的节点具有以下标签:
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这是调整后的部署:
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个吊舱,并根据区域类型部署第五个吊舱。
https://stackoverflow.com/questions/74182473
复制相似问题