Kubernetes K8s吊舱拓扑展开后不受尊重?
我正在尝试扩展我的Kubernetes K8s吊舱拓扑展开后不受尊重?,kubernetes,Kubernetes,我正在尝试扩展我的ingress nginx控制器pod,以便: 每个可用性区域都有相同的吊舱(+-1) POD更喜欢当前运行最少POD的节点 以下是其他问题,我在Pod部署中设置了Pod拓扑分布约束: replicas: 4 topologySpreadConstraints: - labelSelector: matchLabels: app.kubernetes.io/name: ingress-nginx
ingress nginx控制器pod,以便:
- 每个可用性区域都有相同的吊舱(+-1)
- POD更喜欢当前运行最少POD的节点
以下是其他问题,我在Pod部署中设置了Pod拓扑分布约束:
replicas: 4
topologySpreadConstraints:
- labelSelector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
- labelSelector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
我目前有2个节点,每个节点位于不同的可用性区域:
$ kubectl get nodes --label-columns=topology.kubernetes.io/zone,kubernetes.io/hostname
NAME STATUS ROLES AGE VERSION ZONE HOSTNAME
ip-{{node1}}.compute.internal Ready node 136m v1.20.2 us-west-2a ip-{{node1}}.compute.internal
ip-{{node2}}.compute.internal Ready node 20h v1.20.2 us-west-2b ip-{{node2}}.compute.internal
在为该部署运行了kubectl卷展栏restart
之后,我在一个节点中得到了3个pod,在另一个节点中得到了1个pod,其倾斜度为2>1
:
$ kubectl describe pod ingress-nginx-controller -n ingress-nginx | grep 'Node:'
Node: ip-{{node1}}.compute.internal/{{node1}}
Node: ip-{{node2}}.compute.internal/{{node2}}
Node: ip-{{node1}}.compute.internal/{{node1}}
Node: ip-{{node1}}.compute.internal/{{node1}}
为什么不尊重我的约束?如何调试pod调度程序
我的kubectl版本:
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"21+", GitVersion:"v1.21.0-beta.0.607+269d62d895c297", GitCommit:"269d62d895c29743931bfaaec6e8d37ced43c35f", GitTreeState:"clean", BuildDate:"2021-03-05T22:28:02Z", GoVersion:"go1.16", Compiler:"gc", Platform:"darwin/arm64"}
Server Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:20:00Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}
让评论更具可视性:
守护进程运行起来非常简单。它不适用于每个节点有几个吊舱的部署,但是有一些缓解措施(descheduler),它应该随着集群的增长自行解决
<强>请考虑此解决方案作为解决方案< /强>:
守护程序集确保所有(或部分)节点都运行一个Pod副本。当节点添加到集群中时,Pod也会添加到集群中。当节点从集群中移除时,这些吊舱将被垃圾收集。删除守护程序将清理它创建的POD
--
例如:
apiVersion:apps/v1
种类:守护进程
元数据:
姓名:nginx
规格:
选择器:
火柴标签:
姓名:nginx
模板:
元数据:
标签:
姓名:nginx
规格:
#节点选择器:
#日程安排:这里
容忍:
#这种容忍是让守护程序在主节点上运行
#如果你的主人不能运行吊舱,移除它
-关键字:node-role.kubernetes.io/master
影响:无时间表
容器:
-姓名:nginx
图片:nginx
此定义将在集群中的每个节点上生成Pod
。通过指定节点选择器
,可以进一步限制Pod
调度
假设您有一些控制器/逻辑负责用特定标签标记节点,您可以在特定节点上调度Pods
。在上述清单中注释掉了负责该零件的零件:
nodeSelector:
schedule: here
节点(raven sgdm
和raven xvvw
已标记):
额外资源:
让评论更具可视性:
守护进程运行起来非常简单。它不适用于每个节点有几个吊舱的部署,但是有一些缓解措施(descheduler),它应该随着集群的增长自行解决
<强>请考虑此解决方案作为解决方案< /强>:
守护程序集确保所有(或部分)节点都运行一个Pod副本。当节点添加到集群中时,Pod也会添加到集群中。当节点从集群中移除时,这些吊舱将被垃圾收集。删除守护程序将清理它创建的POD
--
例如:
apiVersion:apps/v1
种类:守护进程
元数据:
姓名:nginx
规格:
选择器:
火柴标签:
姓名:nginx
模板:
元数据:
标签:
姓名:nginx
规格:
#节点选择器:
#日程安排:这里
容忍:
#这种容忍是让守护程序在主节点上运行
#如果你的主人不能运行吊舱,移除它
-关键字:node-role.kubernetes.io/master
影响:无时间表
容器:
-姓名:nginx
图片:nginx
此定义将在集群中的每个节点上生成Pod
。通过指定节点选择器
,可以进一步限制Pod
调度
假设您有一些控制器/逻辑负责用特定标签标记节点,您可以在特定节点上调度Pods
。在上述清单中注释掉了负责该零件的零件:
nodeSelector:
schedule: here
节点(raven sgdm
和raven xvvw
已标记):
额外资源:
我目前的理论是,吊舱扩展拓扑也可以解释上一次推出的吊舱。在所有新的吊舱运行后,k8s将终止一些可能导致不平衡的先前的卷展吊舱。您能提供您的吊舱yaml吗?或者更好,如果部署yaml@SahadatHossain在这里,这是一个amazon nginx入口清单,编辑很少:我确实发现其他人描述了相同的问题:我能够通过将部署扩展到1个副本,然后再扩展到4个副本来获得正确的拓扑。如果推出后的不良拓扑确实是根本原因,我可能会将kubernetes descheduler作为一种缓解措施。@roim您能告诉我您的集群是如何创建的吗?它是一个自我管理的解决方案还是一个供应商管理的解决方案(amazon nginx ingress
是否有可能表明这是EKS
?另外,作为一种解决方法,您是否考虑过使用守护程序集
?不同之处在于,每个节点上都会有Pod
,而不是区域中的Pod
。@DawidKruk集群是自托管的,由KOP创建,我安装了nginx入口,并带有AWS的官方清单()。我将看一看守护程序,这听起来很有前景。我目前的理论是,Pod扩展拓扑也考虑了以前推出的Pod。在所有新的吊舱运行后,k8s将终止一些可能导致不平衡的先前的卷展吊舱。您能提供您的吊舱yaml吗?或者更好,如果部署yaml@SahadatHossain在这里,这是一个amazon nginx入口清单,编辑很少:我确实发现其他人描述了相同的问题:我能够通过将部署扩展到1个副本,然后再扩展到4个副本来获得正确的拓扑。如果推出后糟糕的拓扑结构真的很糟糕,我可能会将kubernetes descheduler作为一种缓解措施
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
nginx 2 2 2 2 2 schedule=here 99m