1.指定pod到指定的node上
#1.1查看節(jié)點的lebel
kubectl get nodes --show-labels
#1.2獲取到該節(jié)點的label信息
ip-10-100-2-80 Ready <none> 60d v1.14.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ip-10-100-2-80,kubernetes.io/os=linux
#1.3也可通過自己設(shè)置label
kubectl label nodes <node-name> <label-key>=<label-value>
#1.4在配置文件spec下面添加
spec:
nodeSelector:
kubernetes.io/hostname: ip-10-100-2-80
2.Taint 和 Toleration
2.1. 概念
- nodeSelector可以通過打標簽的形式讓Pod被調(diào)度到指定的Node上咱揍,Taint則相反弄匕,它使節(jié)點能夠排斥一類特定的Pod壁晒,除非Pod被指定了toleration的標簽。(taint即污點僻族,Node被打上污點磷脯;只有容忍[toleration]這些污點的Pod才可能被調(diào)度到該Node)。
2.2 effect的類型
NoSchedule:只有擁有和這個 taint 相匹配的 toleration 的 pod 才能夠被分配到這個節(jié)點烤黍。
PreferNoSchedule:系統(tǒng)會盡量避免將 pod 調(diào)度到存在其不能容忍 taint 的節(jié)點上,但這不是強制的。
NoExecute :任何不能忍受這個 taint 的 pod 都會馬上被驅(qū)逐蚊荣,任何可以忍受這個 taint 的 pod 都不會被驅(qū)逐。Pod可指定屬性 tolerationSeconds 的值莫杈,表示pod 還能繼續(xù)在節(jié)點上運行的時間互例。
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
tolerationSeconds: 3600
2.3 kubectl taint
# 給節(jié)點增加一個taint(污點),它的key是<key>筝闹,value是<value>媳叨,effect是NoSchedule。
kubectl taint nodes <node_name> <key>=<value>:NoSchedule
#刪除節(jié)點上的taint关顷。
kubectl taint nodes node1 key:NoSchedule-
2.4 只有擁有和這個taint相匹配的toleration的pod才能夠被分配到 node_name 這個節(jié)點糊秆。
例如,在 PodSpec 中定義 pod 的 toleration:
#operator:Equal 會比較key和value
#operator:Exists 只要含有key就會容忍該污點
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"
tolerations:
- key: "key"
operator: "Exists"
effect: "NoSchedule"
#容忍所有含污點的node
tolerations:
- operator: "Exists"
#容忍所有key相同的议双,忽視effect
tolerations:
- key: "key"
operator: "Exists"
2.3. 使用場景
2.3.1. 專用節(jié)點
kubectl taint nodes <nodename> dedicated=<groupName>:NoSchedule
先給Node添加taint痘番,然后給Pod添加相對應(yīng)的 toleration,則該Pod可調(diào)度到taint的Node平痰,也可調(diào)度到其他節(jié)點汞舱。
如果想讓Pod只調(diào)度某些節(jié)點且某些節(jié)點只接受對應(yīng)的Pod,則需要在Node上添加Label(例如:dedicated=groupName)宗雇,同時給Pod的nodeSelector添加對應(yīng)的Label昂芜。
2.3.2. 特殊硬件節(jié)點
如果某些節(jié)點配置了特殊硬件(例如CPU),希望不使用這些特殊硬件的Pod不被調(diào)度該Node赔蒲,以便保留必要資源泌神。即可給Node設(shè)置taint和label,同時給Pod設(shè)置toleration和label來使得這些Node專門被指定Pod使用舞虱。
kubectl taint
kubectl taint nodes nodename special=true:NoSchedule
# 或者
kubectl taint nodes nodename special=true:PreferNoSchedule
2.3.3. 基于taint驅(qū)逐
effect 值 NoExecute 欢际,它會影響已經(jīng)在節(jié)點上運行的 pod,即根據(jù)策略對Pod進行驅(qū)逐砾嫉。
如果 pod 不能忍受effect 值為 NoExecute 的 taint幼苛,那么 pod 將馬上被驅(qū)逐
如果 pod 能夠忍受effect 值為 NoExecute 的 taint,但是在 toleration 定義中沒有指定 tolerationSeconds焕刮,則 pod 還會一直在這個節(jié)點上運行舶沿。
如果 pod 能夠忍受effect 值為 NoExecute 的 taint,而且指定了 tolerationSeconds配并,則 pod 還能在這個節(jié)點上繼續(xù)運行這個指定的時間長度括荡。