[英]How to fix “pods is not balanced” in Kubernetes cluster
Pod在節點池中不平衡。 為什么不傳播到每個節點?
我在1個節點池中有9個實例。 過去,我嘗試添加到12個實例。 豆莢不平衡。
這里的形象描述想知道是否有任何解決方案,可以幫助解決這個問題,並在1個節點池所使用9實例?
Pod由kube-scheduler安排在節點上運行。 並且一旦安排好它們,除非將其刪除,否則不會重新安排它們的時間。
因此,如果添加更多節點,已經運行的Pod不會重新安排。
孵化器中有一個項目可以完全解決這個問題。
https://github.com/kubernetes-incubator/descheduler
Kubernetes中的調度是將掛起的Pod綁定到節點的過程,由Kubernetes的一個稱為kube-scheduler的組件執行。 調度程序的決定(是否可以在Pod上調度或在何處調度調度)由其可配置策略指導,該策略由稱為謂詞和優先級的一組規則組成。 當新的Pod首次出現以進行調度時,調度程序的決定會受到其對Kubernetes集群的看法的影響。 由於Kubernetes集群非常動態,並且其狀態會隨着時間而變化,因此出於各種原因,可能希望將已經運行的Pod移動到其他一些節點:
- 一些節點利用率不足或過度使用。
- 最初的調度決策不再成立,因為污點或標簽已添加到節點(pod /節點)或從節點中刪除
親和力要求不再得到滿足。- 一些節點發生故障,並且其pod移至其他節點。
- 新節點將添加到群集。
您應該研究Pod間反親和性 。 通過此功能,您可以根據在節點上運行的容器的標簽來限制不應將容器調度的位置。 在您的情況下,鑒於您的應用程序具有標簽app-label
,則可以使用它來確保未在具有標簽為app-label
容器的節點上調度容器。 例如:
apiVersion: apps/v1
kind: Deployment
...
spec:
selector:
matchLabels:
label-key: label-value
template:
metadata:
labels:
label-key: label-value
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: label-key
operator: In
values:
- label-value
topologyKey: "kubernetes.io/hostname"
...
PS:如果使用requiredDuringSchedulingIgnoredDuringExecution
,則最多可以具有與節點一樣多的Pod。 如果您期望可用的Pod數量超過可用節點的數量,則必須使用preferredDuringSchedulingIgnoredDuringExecution
,這會使反親和性成為優先選擇,而不是義務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.