iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
DevOps

從認識Docker到精通系列 第 22

第二十二天-Taints and Tolerations

  • 分享至 

  • xImage
  •  

Taints and Tolerations

我們之前提到pod可以用node selector來決定特定的pod下要部署到特定的node,但在我們部署pod的時候也會遇到一種情況是「不要部署到其中幾台電腦上」,這時候我們就可以利用 Taints (污點) 和 Toleration(容忍度)來達到我們想做的事情

這部分會分成兩篇,首先先講講 node selector時可能會一併用到的 Affinity,並帶到 taints 和tolerations的概念,第二天才會講道taints的運用方法

Affinity

  • node selector提供了利用 label 來指定 pod 部署 node 的功能,但仍不敷現實中的應用,故有了 Affinity的應用
  • 利用 Affinity,除了可以指定多個 label 時的組合條件,不在限於AND的結果,也新增 preference 的部分,讓條件有優先度
  • Affiinity可以設置哪些 pod 要放在一起,便於worker node的管理
  • 也可設置互斥事件的情形,node 中有pod A就不部署pod B,有pod B就不部署pod A

以下為設置的項目

node affinity

Scheduling

  • requiredDuringScheduling:一定要node符合條件才會讓pod部署
  • preferedDuringScheduling:儘量尋找符合條件的 node

Execution

  • IgnoredDuringExecution:當pod在執行中時,就算node的label被強制更新,也不影響原本部署的pod的運行

  • RequiredDuringExecution:當pod在執行中時,node需符合條件,否則會影響原本部署的pod的運行

  • 使用時需把上述 SchedulingExecution的部分合起來,例如 requiredDuringSchedulingIgnoredDuringExecution,接著寫出條件即可,例如:

requiredDuringSchedulingIgnoredDuringExecution:  
    # nodeSelector 的條件定義  
    nodeSelectorTerms:  
    - matchExpressions:  
        # node 一定有帶有 以下任何一種 label 才可以  
        # "kubernetes.io/e2e-az-name=e2e-az1"  
        # "kubernetes.io/e2e-az-name=e2e-az2"  
        - key: kubernetes.io/e2e-az-name  
	    operator: In  
        values:  
        - e2e-az1  
        - e2e-az2
  • 以上內容為設置pod scheduling時的必要條件,條件為「e2e-az-name的值必須是e2e-az1e2e-az2」,
# 儘量滿足以下條件即可作 pod scheduling  
      preferredDuringSchedulingIgnoredDuringExecution:  
      # 這是屬於 prefer 的權重設定(1-100),符合條件就會得到此權重值  
      # pod 會被分配到最後加總數值最高的 node  
      - weight: 1  
        preference:  
          matchExpressions:  
          # 儘量尋找帶有 label "another-node-label-key=another-node-label-value" 的 node  
          - key: another-node-label-key  
            operator: In  
            values:  
            - another-node-label-value
  • 以上為設置pod的優先條件,sceduling時量尋找帶有 label "another-node-label-key=another-node-label-value" 的 node

  • operator 的部分也還另有 NotIn, Exists, DoesNotExist, Gt,Lt等,可以依據需求更換

  • prefer 的部分可設置1-100的權重值( weight 的部分),會選擇使用計算結果最高的pod進行部署

inter-pod affinity/ anit-affinity

pod affinity 的功能是在 v1.4 的時候提出,其跟 node affinity 很類似,只是 scheduler 要尋找的是目前有哪些正在運行中的 pod 帶有符合條件的 label set,而不是 node。

規則的設定原則應該是尋找符合條件的 Pod 和其所在的 node 在哪裡,並把 Pod 放到該 node 上面運行
也有兩個類型可以設定:

Taints and Tolerations

剛講完affinity,就來講講和他完全相反的東西Taints吧

affienty 是用來設置pod應該被部署到哪些的node之中taints則是反其道而行,以其來定義pod 不應該被部署到哪些的 node之中,並讓scheduler輔以 toleration 來評估並避免pod被分配到不適合的node上

至於如何使用呢,就是明天的東西啦!

REF


上一篇
第二十一天 - Daemon Set
下一篇
第二十三天 - Taints and Tolerations
系列文
從認識Docker到精通30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言