天天看點

用 label 控制 Pod 的位置 - 每天5分鐘玩轉 Docker 容器技術(128)

預設配置下,Scheduler 會将 Pod 排程到所有可用的 Node。不過有些情況我們希望将 Pod 部署到指定的 Node,比如将有大量磁盤 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 需要 GPU,需要運作在配置了 GPU 的節點上。

Kubernetes 是通過 label 來實作這個功能的。

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

kubectl label node k8s-node1 disktype=ssd      

然後通過 ​

​kubectl get node --show-labels​

​ 檢視節點的 label。

用 label 控制 Pod 的位置 - 每天5分鐘玩轉 Docker 容器技術(128)

​disktype=ssd​

​ 已經成功添加到 k8s-node1,除了 ​

​disktype​

​,Node 還有幾個 Kubernetes 自己維護的 label。

有了 ​

​disktype​

​ 這個自定義 label,接下來就可以指定将 Pod 部署到 k8s-node1。編輯 nginx.yml:

用 label 控制 Pod 的位置 - 每天5分鐘玩轉 Docker 容器技術(128)

在 Pod 模闆的 ​

​spec​

​ 裡通過 ​

​nodeSelector​

​ 指定将此 Pod 部署到具有 label ​

​disktype=ssd​

​ 的 Node 上。

部署 Deployment 并檢視 Pod 的運作節點:

用 label 控制 Pod 的位置 - 每天5分鐘玩轉 Docker 容器技術(128)

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

要删除 label ​

​disktype​

​,執行如下指令:

kubectl label node k8s-node1 disktype-      

 - 即删除。

用 label 控制 Pod 的位置 - 每天5分鐘玩轉 Docker 容器技術(128)

不過此時 Pod 并不會重新部署,依然在 k8s-node1 上運作。

用 label 控制 Pod 的位置 - 每天5分鐘玩轉 Docker 容器技術(128)

除非在 nginx.yml 中删除 ​

​nodeSelector​

​ 設定,然後通過 ​

​kubectl apply​

​ 重新部署。

用 label 控制 Pod 的位置 - 每天5分鐘玩轉 Docker 容器技術(128)

繼續閱讀