k8s通過label來控制pod的位置


默認情況下,scheduler會將pod調度到所有可用的Node,不過有些情況我們希望將 Pod 部署到指定的 Node,比如將有大量磁盤 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 需要 GPU,需要運行在配置了 GPU 的節點上。

kubernetes通過label來實現這個功能

label 是 key-value 對,各種資源都可以設置 label,靈活添加各種自定義屬性。比如執行如下命令標注 k8s-node1 是配置了 SSD 的節點

首先我們給k8s-node1節點打上一個ssd的標簽

kubectl label node k8s-node1 disktype=ssd

通過 kubectl get node --show-labels

disktype=ssd 已經成功添加到 k8s-node1,除了 disktype,Node 還有幾個 Kubernetes 自己維護的 label。

 

有了自定義的disktype=ssd 這個標簽,只需要在配置文件中定義 nodeselector 為這個自定義標簽,就可以指定pod在k8s-node1中運行

 

 

部署deployment驗證

 

全部 6 個副本都運行在 k8s-node1 上,符合我們的預期。

 

 

要刪除 label disktype,執行如下命令:

kubectl label node k8s-node1 disktype-

 node/k8s-node1 labeled

不過刪除標簽 並不會重新部署,所以pod依舊是在k8s-node1上。

要想讓k8s-node2也參與到工作負載,則必須刪掉當前的deployment,並刪除或注釋掉配置文件中的 nodeSelector配置。

 

 我們看到之前的pod會被全部刪除掉,並重新調度到不同的k8s節點上。

 


免責聲明!

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



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