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

資訊專欄INFORMATION COLUMN

Kubernetes taint & toleration

wenzi / 2295人閱讀

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

一、概述

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

看下 taint & toleration 結(jié)構(gòu)體,下面足點介紹時會涉及相關(guān)字段。

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 設(shè)置多個 taints,當(dāng)然也可以在 pod 配置相同個數(shù)的 tolerations。影響調(diào)度和運行的具體行為,我們可以分為以下幾類:

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

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

如果至少有一個 effect == NoExecute 的 taint 沒有被 pod toleration,那么不僅這個 pod 不會被調(diào)度到該節(jié)點,甚至這個節(jié)點上已經(jīng)運行但是也沒有設(shè)置容忍該污點的 pods,都將被驅(qū)逐。

三、Toleration

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

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

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

有幾個特殊情況:

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 已經(jīng)運行在 node 上并且該 node 添加了一個對應(yīng)的 taint,那么這個 pod 將會在 node 上停留 3600 秒后才會被驅(qū)逐。但是如果 taint 在這個時間前被移除,那么這個 pod 也就不會被驅(qū)逐了。

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

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

kubernetes 1.6 版本,node controller 會跟進系統(tǒng)情況自動設(shè)置 node taint 屬性。
內(nèi)置 taint key 如下:

node.kubernetes.io/not-ready: 節(jié)點尚未就緒

node.kubernetes.io/unreachable: 節(jié)點無法被訪問

node.kubernetes.io/unschedulable: 節(jié)點不可調(diào)度

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

node.kubernetes.io/memory-pressure: 節(jié)點有內(nèi)存壓力

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

node.kubernetes.io/network-unavailable: 節(jié)點網(wǎng)絡(luò)不可用

node.kubernetes.io/pid-pressure: 節(jié)點有 pid 壓力

node.cloudprovider.kubernetes.io/uninitialized: 云節(jié)點未初始化

node.cloudprovider.kubernetes.io/shutdown: 云節(jié)點已下線

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

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

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

示例

專用節(jié)點

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

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

具有特殊硬件的節(jié)點

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

基于 taint 的驅(qū)逐

前面也提到了,可以通過 NoExecute taint 來驅(qū)逐節(jié)點上已經(jīng)運行的 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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/32906.html

相關(guān)文章

  • KubernetesTaintToleration(污點和容忍)

    摘要:對應(yīng)的可以給設(shè)置容忍讓能夠?qū)τ形埸c的節(jié)點設(shè)置容忍,將調(diào)度到該節(jié)點。一般是配合使用的。能容忍的污點。 - -作者:[SRE運維博客](https://www.cnsre.cn/ )博客地址:[https://www.cnsre.cn/](https://www.cnsre.cn/) 文章地址:??https://www.c...

    不知名網(wǎng)友 評論0 收藏0
  • kubernetes的調(diào)度機制

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

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

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

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

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

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

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

    tylin 評論0 收藏0

發(fā)表評論

0條評論

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