Kubernetes CKA課程筆記 59

Scheduling Pods — NodeName & Node Selector,Assigning Pods to Nodes

ZONGRU Li
Nov 20, 2021

開發者team:

接下來的專案需要佈署的應用程式是資料處理與CPU要求較高的!

我們要求佈署分裂兩個Pod在兩個不同的Node上,並且Node不能有其他Pod

也就是這兩個應用程式Pod分別完全獨佔了整個NodeResource!

並且要確保這兩個Pod不會同時長在同一個Node上!

其中一位開發team菜鳥:

為什麼Pod不會長到master node上? 不能長嗎?

在一般情況下,Pod的自動佈署分配是由master上的"Scheduler"判斷並決定

變為:

但是有時候我們就是想要自己來分配Pod的佈署!

例如我們要決定一個Pod佈署到我們指定的Node

我們要指揮Scheduler,告訴它,請把這個Pod佈署到指定的Node上!

這時候可以透過一個屬性(attribute) — nodeName

簡單範例的nodeName使用:

首先簡單確認各個Node名稱:

同剛剛範例,建立一個Pod Configuration File:

使用nodeName指定到worker1,儲存!

執行建立:

並確認是否真的被指定長到worker1上:

Scheduler依據定義的nodeName attribute來分配這個Podworker1

考慮到一種狀況,如果node name是動態(dynamic)的

無法預先知道名稱,並且這種配置在雲端其實很常見! →動態node名稱!

又或者指定佈署的Node現在Resource使用率99%,已經沒辦法再長Pod!

此時亦即須要能動態地指定可以佈署的Node,讓可以佈署的Node更多

這時候可以使用另一個屬性(attribute) — nodeSelector

使用nodeSelector再加以選擇特定的labels

在事前我們可以將各個Node上定義我們要定義的labels

比如某個nodelabel=> disktype : ssd

比如nodelabel=> env : dev

範例指定該Pod要找到特定label的node來佈署!

實際演練nodeSelector的使用:

首先確認node上現有的labels,執行:

kubectl get node --show-labels

看到一些既有自動長出的labels

接著當然就是自己指定一個label,並決定放到worker2

首先確認如何在worker2這個node增加label,執行:

kubectl label --help

看到大概針對k8s元件如何新增label的方式

所以針對worker2 增加label就是執行以下:

kubectl label node {元件名稱,這邊就是worker2} {key}={vlaue}

實際執行以下:

kubectl label node worker2 type=cpu

確認!!

確認在worker2上有多一個label!!!

再來就是指定一個Pod透過上述這個label去長到worker2上!!

其內容寫入以下:

儲存!

執行建立:

出現錯誤!

上面的錯誤其實是Pod名稱跟前面範例的重複了,所以在進yaml檔改寫為:

改好儲存!

接著就是確認!!:

確認有依據我們定義的label長到work2去!!

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet