1. 程式人生 > >深入玩轉K8S之利用Label控制Pod位置

深入玩轉K8S之利用Label控制Pod位置

white fff size 利用 怎麽 oss 文件 cto yml

首先介紹下什麽是Label?

Label是Kubernetes系列中一個核心概念。是一組綁定到K8s資源對象上的key/value對。同一個對象的labels屬性的key必須唯一。label可以附加到各種資源對象上,如Node,Pod,Service,RC等。

通過給指定的資源對象捆綁一個或多個不用的label來實現多維度的資源分組管理功能,以便於靈活,方便地進行資源分配,調度,配置,部署等管理工作。

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

下面我們來實際的操作下,比如執行如下命令標註 k8s-node1 是配置了 SSD的節點。

kubectl label node k8snode1 disktype=ssd

然後通過 kubectl get node --show-labels 查看節點的 label。

技術分享圖片

可以看到disktype=ssd 已經成功添加到 k8snode1,除了 disktype,Node 還有幾個 Kubernetes 自己維護的 label。有了 disktype 這個自定義 label,接下來就可以指定將 Pod 部署到 k8snod1。比如我編輯nginx.yml,增加nodeSelector標簽,指定將此Pod部署到具有ssd屬性的Node上去。

技術分享圖片

最後通過kubectl get pod -o wide。


如果要刪除 label disktype,就執行如下命令刪除即可:

kubectl label node k8s-node1 disktype-


但是要註意已經部署的 Pod 並不會重新部署,依然在 k8snode1 上運行。可能會有人說了,那怎麽讓Pod變回原樣呢也就是分配到多個node上,那就需要一個笨方法了(至少在目前我學習的方法裏面只會這樣操作),就是在剛才編輯的那個nginx.yml文件裏面刪除nodeSelector標簽,然後在利用kubectl apply重新部署,Kubernetes 會刪除之前的 Pod 並調度和運行新的 Pod

技術分享圖片


好了本次的Label標簽的實踐討論到此結束,本文參考了Kubernetes 官網和每天5分鐘玩轉K8S。

深入玩轉K8S之利用Label控制Pod位置