k8s通過label來控制pod的位置

2022-02-26 21:31:34 字數 1307 閱讀 4990

預設情況下,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 上,符合我們的預期。

要刪除 labeldisktype,執行如下命令:

kubectl label node k8s-node1 disktype-
node/k8s-node1 labeled

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

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

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

K8s部署prometheus監控K8s細節

prometheus 一些配置檔案可以再github上找到。部署 root kube prometheus manifests 目錄下所有檔案 部署 root kube prometheus manifests setup 目錄下所有檔案 要注意的是自己要建立乙個工作空間 如果報錯執行下面語句 部署...

K8s通過reflect實現多型

轉子 關於reflect包使用可以參考 我們知道在golang中可以把函式賦值給乙個變數,然後通過函式名呼叫函式。下面的問題是我們如何實現callfunc 的內容來完成所要的功能呢。目前已知的辦法好像是不行的,無法從全域性域中通過名字獲取乙個函式的物件。對於變數也一樣,無法從全域性域中通過名字獲取乙...

k8s查詢所有pod K8S基本操作及POD介紹

一 基本操作 kubectl是apiserver的客戶端工具,工作在命令列下,能夠連線apiserver上實現各種增刪改查等各種操作 我們可以使用 kubectl 來檢視一些 kubectl 命令。kubectl命令.png 檢視集群目標節點資訊 kubectl describe node iz2z...