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

首先介紹下什麼是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。

博客01.png

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

博客02.png

最後通過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

博客03.png


好了本次的Label標籤的實踐討論到此結束,本文參考了Kubernetes 官網和Cloud Man博文。

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