在一般情況下,Pod的自動佈署分配是由master上的"Scheduler"判斷並決定
變為:
但是有時候我們就是想要自己來分配Pod的佈署!
例如我們要決定一個Pod佈署到我們指定的Node上
我們要指揮Scheduler,告訴它,請把這個Pod佈署到指定的Node上!
這時候可以透過一個屬性(attribute) — nodeName
簡單範例的nodeName使用:
首先簡單確認各個Node名稱:
同剛剛範例,建立一個Pod Configuration File:
執行建立:
並確認是否真的被指定長到worker1上:
Scheduler依據定義的nodeName attribute來分配這個Pod到worker1上
考慮到一種狀況,如果node name是動態(dynamic)的
無法預先知道名稱,並且這種配置在雲端其實很常見! →動態node名稱!
又或者指定佈署的Node現在Resource使用率99%,已經沒辦法再長Pod!
此時亦即須要能動態地指定可以佈署的Node,讓可以佈署的Node更多
這時候可以使用另一個屬性(attribute) — nodeSelector
使用nodeSelector再加以選擇特定的labels
在事前我們可以將各個Node上定義我們要定義的labels
比如某個node有label=> disktype : ssd
比如兩個node有label=> env : dev
實際演練nodeSelector的使用:
首先確認node上現有的labels,執行:
kubectl get node --show-labels
接著當然就是自己指定一個label,並決定放到worker2上
首先確認如何在worker2這個node增加label,執行:
kubectl label --help
所以針對worker2 增加label就是執行以下:
kubectl label node {元件名稱,這邊就是worker2} {key}={vlaue}
實際執行以下:
kubectl label node worker2 type=cpu
確認!!
再來就是指定一個Pod透過上述這個label去長到worker2上!!
其內容寫入以下:
執行建立:
上面的錯誤其實是Pod名稱跟前面範例的重複了,所以在進yaml檔改寫為:
接著就是確認!!:
確認有依據我們定義的label長到work2去!!