k8s集群調度方案


  Scheduler是k8s集群的調度器,主要的任務是把定義好的pod分配到集群節點上

有以下特征:

1  公平   保證每一個節點都能被合理分配資源或者能被分配資源

2  資源高效利用   集群所有資源最大化被利用

3  效率  調度的性能好,能夠對大批量pod進行調度

4  靈活  允許用戶根據自己的需求控制調取的邏輯

工作原理:

Scheduler是單獨運行的程序,啟動之后會一直連接API Server,獲取值:PodSpec.NodeName為空的pod,也就是對沒有標記namespace的pod都會創建一個binding,表明該pod放到哪個節點上。

首先過濾掉不滿足條件的節點,這個過程稱為:predicate

再通過節點按照優先級排序,這個稱為:priority

最后選擇優先級最好的節點

若這個期間有一步出錯,直接返回錯誤。若在predicate過程中沒有合適的節點,pod會一直處於pending狀態,不斷重試調度,直到有節點滿足為止。如果有多個節點滿足條件,就繼續priority過程,選擇最優node節點

 

調度過程中,會有一些因素影響調度

1.資源限制

 

 

 

 2.節點選擇器標簽

給node添加標簽

[root@k8s-master gisserver]# kubectl label node k8s-node1 node1=iserver
node/k8s-node1 labeled
[root@k8s-master gisserver]# kubectl  get node --show-labels
NAME         STATUS   ROLES    AGE   VERSION   LABELS
k8s-master   Ready    master   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node1    Ready    <none>   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,node1=iserver
k8s-node2    Ready    <none>   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,node2=gisserver

查看一個指定node標簽

[root@k8s-master gisserver]# kubectl get node -l "node1=iserver"
NAME        STATUS   ROLES    AGE   VERSION
k8s-node1   Ready    <none>   22d   v1.17.3

刪除一個node的標簽

[root@k8s-master gisserver]# kubectl label node k8s-node1 node1-
node/k8s-node1 labeled
[root@k8s-master gisserver]# kubectl  get node --show-labels
NAME         STATUS   ROLES    AGE   VERSION   LABELS
k8s-master   Ready    master   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node1    Ready    <none>   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux
k8s-node2    Ready    <none>   22d   v1.17.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,node2=gisserver

 

3. 節點的親和性

 

 

 4.污點和污點容忍

查看污點

[root@k8s-master gisserver]# kubectl describe node k8s-node1 |grep Taints
Taints:             <none>
[root@k8s-master gisserver]# kubectl describe node k8s-node2 |grep Taints
Taints:             <none>
[root@k8s-master gisserver]# kubectl describe node k8s-master |grep Taints
Taints:             node-role.kubernetes.io/master:NoSchedule

 

 

 添加節點污點:

[root@k8s-master gisserver]# kubectl taint node k8s-node1 node1=yes:NoSchedule
node/k8s-node1 tainted
[root@k8s-master gisserver]# kubectl describe node k8s-node1 |grep Taints
Taints:             node1=yes:NoSchedule

刪除污點:

[root@k8s-master gisserver]# kubectl taint node k8s-node1 node1=yes:NoSchedule-
node/k8s-node1 untainted
[root@k8s-master gisserver]# kubectl describe node k8s-node1 |grep Taints
Taints:             <none>

污點容忍與軟親和性類似


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM