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

默認配置下,Scheduler 會將 Pod 調度到全部可用的 Node。不過有些狀況咱們但願將 Pod 部署到指定的 Node,好比將有大量磁盤 I/O 的 Pod 部署到配置了 SSD 的 Node;或者 Pod 須要 GPU,須要運行在配置了 GPU 的節點上。html

Kubernetes 是經過 label 來實現這個功能的。node

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

kubectl label node k8s-node1 disktype=ssd

而後經過 kubectl get node --show-labels 查看節點的 label。app

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

有了 disktype 這個自定義 label,接下來就能夠指定將 Pod 部署到 k8s-node1。編輯 nginx.yml:code

在 Pod 模板的 spec 裏經過 nodeSelector 指定將此 Pod 部署到具備 label disktype=ssd 的 Node 上。htm

部署 Deployment 並查看 Pod 的運行節點:資源

所有 6 個副本都運行在 k8s-node1 上,符合咱們的預期。部署

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

kubectl label node k8s-node1 disktype-

 - 即刪除。

不過此時 Pod 並不會從新部署,依然在 k8s-node1 上運行。

除非在 nginx.yml 中刪除 nodeSelector 設置,而後經過 kubectl apply 從新部署。

Kubernetes 會刪除以前的 Pod 並調度和運行新的 Pod。

Deployment 相關操做就討論到這裏,下一節咱們學習 DaemonSet。

書籍:

1.《天天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html

2.《天天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html

相關文章
相關標籤/搜索