記一次k8s集羣的調度調整

集羣信息

  1. master節點:3臺,slaver節點:9臺
  2. etcd運行在三臺master節點上

遇到的問題

  1. 在每天pod的啓動時,發現pod從Pending --> CreateContainer --> Running所花費的時間很長,一般會用到6-10Min。
  2. 刪除節點的時候也是需要花費3-5分鐘才能完成一個pod的刪除。
  3. 在master節點上面啓動或者刪除一個pod都會花費更長的時間。

排查

統計pod在節點的分配情況

我把

kubectl describe pod -n namespace | grep Node:

的輸出重定向到一個文件裏面,再對文件進行簡單的k-v統計之後,發現所有節點的調度都集中在三個節點上[可能有master節點,可能都不是master節點]。

查看yaml文件

查看yaml文件之後,發現:

  1. 在containers裏面,對於每一個container都沒有聲明資源相關的配置。
  2. 沒有對於pod的親和性設置。

解決問題

對於遇到的問題中的前兩個,我感覺應該是pod集中分配到幾個節點上面,造成那幾個節點壓力太大。一方面需要不能讓pod分配到master節點上面,另一方面需要把pod均分到其他節點。

不讓pod分配到master節點

這個可以在yaml文件裏面設置node親和性:

spec:
  affinity:
    nodeAffinity:
       requiredDuringSchedulingIgnoredDuringExecution:
         nodeSelectorTerms:
         - matchExpressions:
           - key: kubernetes.io/hostname
             operator: NotIn
             values:
             - master01
             - master02
             - master03

這個親和性的設置,可以在官方文檔上面看到詳細的設置方法。這個親和性可以避免pod分配到相關的節點上面。

均分pod到非master節點

這個需要設置一下資源的使用,讓master節點自己去選取合適的節點放置pod:

containers:
- name: container_first_name
  ...
  ...
  ...
  resources:
    requests:
      memory: xxx
      cpu: xxx
    limits:
      memory: xxx
      cpu: xxx

相關的文檔在:官方文檔

結果

添加這兩個配置之後,發現現在的pod會均分到非master節點上面了,並且啓動時間縮短到了1分鐘之內,節省了很多的時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章