iT邦幫忙

2022 iThome 鐵人賽

DAY 9
2
DevOps

30天準備CKA考試系列 第 9

Day 09:Taints and Tolerations vs. Node Affinity

  • 分享至 

  • xImage
  •  

Day 09:Taints and Tolerations vs. Node Affinity

昨天談到了Node Name與Node Selector,那我們今天可以來談談Taints and Tolerations和Node Affinity。

Taints and Tolerations

就好像是將殺蟲劑(Taints)噴在自己身上,除非有抵抗這種殺蟲劑基因(Tolerations)的蚊子才可以過來叮你,我們的角色就是Node,而Pod是蚊子。

  • Taints:污點,用在Node上,除非有容忍這種污點的Pod才可以被部署到這個Node上。

    • Taints類似Label,也是key=value形式,只是後面會加上這個Taints所造成的效果,key=value:effect

    • Effect有兩種類型:

      • NoSchedule:擁有此Taints的Tolerations除外,其他的Pod(沒有這種Tolerations)未來都無法被部署到這個Node,但是已經在這個Node上運行的Pod都不受影響。
      • NoExecute:擁有此Taints的Tolerations除外,這個Node上其他的Pod都會被驅逐,未來也無法被部署到這個Node。
      • PreferNoSchedule:系統會盡量不要部署Pod到這個Node,但是沒辦法的時候還是會安排過來,可能是資源不夠,又或是只存在這個Node。
    • 要怎麼處理Taints呢?

      # 增加Taints
      kubectl taint nodes node1 key1=value1:NoSchedule
      
      # 移除Taints
      kubectl taint nodes node1 key1=value1:NoSchedule-
      
      # 觀看這個Node上有哪些Taints
      kubectl describe nodes node1
      
  • Tolerations:容忍度,Pod可以容忍哪些Taints。我們來看看要怎麼設定Tolerations。

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
      tolerations:
      - key: "example-key"
        operator: "Exists"
        effect: "NoSchedule"
    	- key: "key1"
    	  operator: "Equal"
    	  value: "value1"
    	  effect: "NoExecute"
    	  tolerationSeconds: 3600
    
    • operator有兩種類型:
      • Equal:預設值,key和value,還有effect都要相等。
      • Exists:只能設定key,只要存在這個key和effect,就可以容忍這個Taints。
    • tolerationSeconds:如果今天這個Node突然新增這種Taints,key=value:NoExecute,那這個Pod還可以撐3600秒才被驅逐出去。

特殊情況

  • Tolerations的key為空,且operator為Exists,這表示可以匹配任何key, value, effect,也就是可以容忍任何Taints。
  • effect為空,這代表只要key相等,就可以匹配。

同時多種Taints呢?

一定要全部Taints都匹配,擁有這些Tolerations的Pod才可以被部署到這個Node。

Node Affinity

節點親和性,這是一種更彈性的Scheduling方式,類似於Node Selector,但是提供了Prefer這種方式,讓Pod在逼不得已的情況下,還是可以部署在不具備這些條件的Node上。

我們先來看看它是怎麼設定吧~

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: topology.kubernetes.io/zone
            operator: In
            values:
            - antarctica-east1
            - antarctica-west1
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: another-node-label-key
            operator: In
            values:
            - another-node-label-value
  containers:
  - name: with-node-affinity
    image: k8s.gcr.io/pause:2.0
  • requiredDuringSchedulingIgnoredDuringExecution:這是nodeAffinity的類型,這一大串主要可以拆成二段,這二段又各分為二類,所以總共會有四種類型。
  • 先來看看前半段的DuringScheduling:這段就是說這個條件是在決定要部署在哪個Node時候發生作用。
    • required:代表一定要符合這個條件。
      • 使用required為硬限制,後面要用nodeSelectorTerms。
    • preferred:代表優先選擇符合這個條件,但沒有也可以。
      • 使用preferred為軟限制,後面就要用preference。
  • 後半段的DuringExecution:這是代表會限制已經在節點上運行的Pod。
    • Ignored:無視原本就在這個Node上運行的Pod。
    • Required:同前半段,不符合條件的都會被驅逐出Node。
  • matchExpressions:這邊類似Deployment的matchLabels,但是又更靈活了一些。
  • operator:分為六種。
    • In:等於其中任一種value就可以。
    • NoIn:不能等於任何一種value。
    • Exists:只要這個key存在就可以。
    • DoesNotExist:這個key不存在就可以。
    • Gt:大於等於,value是數字時會用到。
    • Lt:小於等於,value是數字時會用到。
  • Weight:權重,範圍為1到100,會優先選擇符合到條件中分數最高的Node。

要是同時使用Node Selector和Node Affinity呢?

如果同時設置nodeSelector和nodeAffinity,那就必須在符合兩者的條件的Node上部署,如果沒有這種Node,就無法部署。

參考資料

將Pod指派給節點

污點與容忍度

Node Affinity In Kubernetes

Kubernetes: How to use Gt operator in pod nodeAffinity


上一篇
Day 08:Scheduling
下一篇
Day 10:DaemonSet vs. Static Pods
系列文
30天準備CKA考試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
ali88
iT邦新手 3 級 ‧ 2022-10-01 16:06:56

你好, Tolerations 那個yaml檔, 是不是有一個 key 以下參數不可以縮排, 如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20221001/20055187kjlRwTaMOK.png

Calvin iT邦新手 4 級 ‧ 2022-10-02 19:19:37 檢舉

這個部分應該是不小心按到,校稿時沒注意,感謝提醒~

我要留言

立即登入留言