国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Kubernetes taint & toleration

wenzi / 2293人閱讀

摘要:對應的又給新增了配套屬性容忍,用于表示這些可以但不強制要求被調度到具有相應的上。的默認值有幾個特殊情況為空并且等于,表示匹配了所有的,和。用來指定在添加了的后,能容忍該的可停留在上的時間。目的是確保在出現或的問題時,永遠不會被驅逐。

一、概述

前一篇文章講解了 Kubernetes 親和性調度, 所涉及的內容都是描述 pod 的屬性,來聲明此 pod 希望調度到哪類 nodes。而本文介紹的 Taint(污點) 剛好相反,它是node 的一個屬性,允許 node 主動排斥 pod 的調度。
對應的 k8s 又給 pod 新增了配套屬性 toleration(容忍) ,用于表示這些 pod 可以(但不強制要求)被調度到具有相應 taints 的 nodes 上。
這兩者經常一起搭配,來確保不將 pod 調度到不合適的 nodes。

看下 taint & toleration 結構體,下面足點介紹時會涉及相關字段。

type Taint struct {
    Key string
    Value string
    Effect TaintEffect
    // add taint 的時間點
    // 只有 Effect = NoExecute, 該值才會被 nodeController 寫入
    TimeAdded *metav1.Time
}

type Toleration struct {
    Key string
    Operator TolerationOperator
    Value string
    Effect TaintEffect
    // 容忍時間
    TolerationSeconds *int64
}

type TaintEffect string

const (
    TaintEffectNoSchedule TaintEffect = "NoSchedule"
    TaintEffectPreferNoSchedule TaintEffect = "PreferNoSchedule"
    TaintEffectNoExecute TaintEffect = "NoExecute"
)

type TolerationOperator string

const (
    TolerationOpExists TolerationOperator = "Exists"
    TolerationOpEqual  TolerationOperator = "Equal"
)
二、Taint

我們可以對 node 設置多個 taints,當然也可以在 pod 配置相同個數的 tolerations。影響調度和運行的具體行為,我們可以分為以下幾類:

如果至少有一個 effect == NoSchedule 的 taint 沒有被 pod toleration,那么 pod 不會被調度到該節點上。

如果所有 effect == NoSchedule 的 taints 都被 pod toleration,但是至少有一個 effect == PreferNoSchedule 沒有被 pod toleration,那么 k8s 將努力嘗試不把 pod 調度到該節點上。

如果至少有一個 effect == NoExecute 的 taint 沒有被 pod toleration,那么不僅這個 pod 不會被調度到該節點,甚至這個節點上已經運行但是也沒有設置容忍該污點的 pods,都將被驅逐。

三、Toleration

再看下 PodSpec 配置 Tolerations,其中的 key、value、effect 與 Node Taint 設置需要保持一致,operator 支持兩類:

Exists: 這個配置下,不需要指定 value。

Equal: 需要配置 value 值。(operator 的默認值)

有幾個特殊情況:

key 為空并且 operator 等于 Exists,表示匹配了所有的 keys,values 和 effects。換句話說就是容忍了所有的 taints。

tolerations:
- operator: "Exists"

effect 為空,則表示匹配所有的 effects(NoSchedule、PreferNoSchedule、NoExecute)

tolerations:
- key: "key"
  operator: "Exists"

還有一個 TolerationSeconds,該值與 effect 為 NoExecute 配套使用。用來指定在 node 添加了 effect = NoExecute 的 taint 后,能容忍該 taint 的 pods 可停留在 node 上的時間。
例如:

tolerations: 
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
  tolerationSeconds: 3600

表示如果這個 pod 已經運行在 node 上并且該 node 添加了一個對應的 taint,那么這個 pod 將會在 node 上停留 3600 秒后才會被驅逐。但是如果 taint 在這個時間前被移除,那么這個 pod 也就不會被驅逐了。

來個比較形象的圖,描述下:

該圖參考: Taints and tolerations, pod and node affinities demystified · Banzai Cloud
四、內置行為

kubernetes 1.6 版本,node controller 會跟進系統情況自動設置 node taint 屬性。
內置 taint key 如下:

node.kubernetes.io/not-ready: 節點尚未就緒

node.kubernetes.io/unreachable: 節點無法被訪問

node.kubernetes.io/unschedulable: 節點不可調度

node.kubernetes.io/out-of-disk: 節點磁盤不足

node.kubernetes.io/memory-pressure: 節點有內存壓力

node.kubernetes.io/disk-pressure: 節點有磁盤壓力

node.kubernetes.io/network-unavailable: 節點網絡不可用

node.kubernetes.io/pid-pressure: 節點有 pid 壓力

node.cloudprovider.kubernetes.io/uninitialized: 云節點未初始化

node.cloudprovider.kubernetes.io/shutdown: 云節點已下線

kubernetes 會通過 DefaultTolerationSeconds admission controller 為創建的 pod 添加兩個默認的 toleration: node.kubernetes.io/not-readynode.kubernetes.io/unreachable,并且設置 tolerationSeconds = 300。當然這個默認配置,用戶可以自行覆蓋。
這些自動添加的默認配置,確保 node 出現問題后,pod 可以繼續在 node 上停留 5 分鐘。

DefaultTolerationSeconds admission controller 設置的 tolerationSeconds 值,也可以由用戶指定。
具體參考: https://github.com/kubernetes...

還有一個默認行為,就是 DaemonSet。
所有 DaemonSet 創建的 pod 都會添加兩個 toleration: node.alpha.kubernetes.io/unreachablenode.alpha.kubernetes.io/notReady。設置 effect = NoExecute,并且不指定 tolerationSeconds
目的是確保在 node 出現 unreachable 或 notReady 的問題時,DaemonSet Pods 永遠不會被驅逐。

示例

專用節點

如果你希望將一組節點專用于特定的用戶,那可以將這些節點設置 taints: kubectl taint nodes nodename dedicated=groupName:NoSchedule, 然后為 pods 設置對應的 tolerations。

如果你希望節點被專用并且確保服務僅使用這批節點,那么你還應該向這批節點設置 labels (dedicated=groupName),并且為對應的 pods 設置 NodeAffinity,以控制 pods 只能跑到這批節點上。

具有特殊硬件的節點

有部分帶有特殊硬件的節點,比如 GPU、FPGA 等,要確保不將不需要專用硬件的 pods 調度到這些節點。也可以和 專有節點 一樣的方式設置 taints:kubectl taint nodes nodename special=true:NoSchedulekubectl taint nodes nodename special=true:PreferNoSchedule。建議還可以通過 Extended Resources 和 ExtendedResourceToleration admission controller 來更方便的調度依賴特殊硬件的 pods,而不需要手動添加容器的 toleration

基于 taint 的驅逐

前面也提到了,可以通過 NoExecute taint 來驅逐節點上已經運行的 pods。

五、參考資料

community/taint-toleration-dedicated.md at master · kubernetes/community · GitHub

community/taint-node-by-condition.md at master · kubernetes/community · GitHub

Taints and Tolerations

Taints and tolerations, pod and node affinities demystified · Banzai Cloud

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32906.html

相關文章

  • KubernetesTaintToleration(污點和容忍)

    摘要:對應的可以給設置容忍讓能夠對有污點的節點設置容忍,將調度到該節點。一般是配合使用的。能容忍的污點。 - -作者:[SRE運維博客](https://www.cnsre.cn/ )博客地址:[https://www.cnsre.cn/](https://www.cnsre.cn/) 文章地址:??https://www.c...

    不知名網友 評論0 收藏0
  • kubernetes的調度機制

    摘要:的調度機制組件調度器會將調度到資源滿足要求并且評分最高的上。這個特性的設計初衷是為了替代,并擴展更強大的調度策略。和完全相同,以進行強制的約束。軟規則除了,,還有一條軟規則配置后,沒有相關污點策略的會盡量避免調度到該上。 k8s的調度機制 scheduler組件 k8s調度器會將pod調度到資源滿足要求并且評分最高的node上。我們可以使用多種規則比如:1.設置cpu、內存的使用要求;...

    selfimpr 評論0 收藏0
  • k8s 1.12.1 的坑和解決方法

    摘要:的坑和解決方法鏡像被墻,需要自己的鏡像,然后改。解決辦法是清空目錄,然后將拷貝過來安裝對應版本的。默認不允許往節點裝東西,強行設置下允許自己的無視沒權限 k8s 1.12.1 的坑和解決方法 pull 鏡像: gcr.io 被墻,需要 pull 自己的鏡像,然后改 tag。具體需要 pull 哪些鏡像呢,kubeadm config images 可查看我自己 build 的都放到了 ...

    Shisui 評論0 收藏0
  • k8s 1.12.1 的坑和解決方法

    摘要:的坑和解決方法鏡像被墻,需要自己的鏡像,然后改。解決辦法是清空目錄,然后將拷貝過來安裝對應版本的。默認不允許往節點裝東西,強行設置下允許自己的無視沒權限 k8s 1.12.1 的坑和解決方法 pull 鏡像: gcr.io 被墻,需要 pull 自己的鏡像,然后改 tag。具體需要 pull 哪些鏡像呢,kubeadm config images 可查看我自己 build 的都放到了 ...

    paraller 評論0 收藏0
  • k8s 1.12.1 的坑和解決方法

    摘要:的坑和解決方法鏡像被墻,需要自己的鏡像,然后改。解決辦法是清空目錄,然后將拷貝過來安裝對應版本的。默認不允許往節點裝東西,強行設置下允許自己的無視沒權限 k8s 1.12.1 的坑和解決方法 pull 鏡像: gcr.io 被墻,需要 pull 自己的鏡像,然后改 tag。具體需要 pull 哪些鏡像呢,kubeadm config images 可查看我自己 build 的都放到了 ...

    tylin 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<