kubernetes(AKS)将所有pod调度到同一节点

rn0zuynd  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(2)|浏览(279)

我有一组属于不同部署的pod。所有pod都配置为作为单个副本运行。此外,我的群集中有2个节点。现在,当我尝试调度我的pod时,所有pod都部署到同一个节点。我很少看到我的pod部署到另一个节点。
由于这个原因,我的一个节点总是处于内存压力下,利用率接近90%,而其他节点的利用率接近30%。由于这个原因,如果我的pod试图消耗超过其限制的80%,它们会被k8杀死,说节点没有足够的资源。
如何在节点间均匀分布pod?或者我的集群可能出了什么问题?我已经通读了拓扑分布约束,但它们只讨论了分布属于一个部署的pod。

ncecgwcz

ncecgwcz1#

你是对的拓扑扩展约束对于一个部署是好的。Kubernetes的行为背后可能有很多原因。
一个可能是你已经设置了资源请求**&限制,K8认为在单个节点上运行这两个pod是很好的,所以它在同一个节点上调度这两个pod。或者你根本没有设置任何东西,这也可能是另一个原因。
请尝试增加
部署请求和限制**,否则将出现调度差异。
同时,您还可以使用**关联性
***(节点/POD关联性)污染**&宽容也是一个很好的选项,可用于区分不同可用节点上的POD。关联性也适用于跨部署。
参考:https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: topology.kubernetes.io/zone
            operator: In
            values:
            - zone-east1
  containers:
  - name: with-node-affinity
    image: registry.k8s.io/pause:2.0
dgjrabp2

dgjrabp22#

您可以将descheduler与LowNodeUtilization策略一起使用,以尝试平衡pod:https://github.com/kubernetes-sigs/descheduler#lownodeutilization
或者你可以尝试使用pod反亲和性,让所有的pod彼此“讨厌”,这将有助于更均匀地调度。

相关问题