国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

十七、K8S-污點(Taint)和容忍度(toleration)

這篇具有很好參考價值的文章主要介紹了十七、K8S-污點(Taint)和容忍度(toleration)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、什么是污點和容忍度

1、官方解釋:

2、自我理解:

3、污點

1、污點的組成:

2、污點的三種策略:

? ? ? ? 1、PreferNoSchedule

? ? ? ? 2、NoExecute

? ? ? ? ?3、NoSchedule

?4、容忍

1、Toleration基本用法

2、用法:

3、注意:

二、使用演示

三、Pod優(yōu)先級調度

1、調度策略:

? ? ? ? 1、驅逐(Eviction)

? ? ? ? 2、搶占(Preemtion)

2、創(chuàng)建權重

3、yaml文件定義

4、使用優(yōu)先級


一、什么是污點和容忍度

1、官方解釋:

  1. 節(jié)點親和性,是pod的一種屬性,它使pod被吸引到一類特定的節(jié)點
  2. Taint(污點)與節(jié)點親和性相反,它使節(jié)點能夠排斥一類特定的pod
  3. Taint(污點)和toleration(容忍福)互相配合,可以用來避免pod被分配到不合適的節(jié)點上
  4. 每個節(jié)點都可以應用一個或多個taint,這表示對于那些不能容忍這些taint的pod,是不會被運行在該節(jié)點上。
  5. 如果將toleration應用于pod上,則表示這些pod可以被調度到具有匹配taint的節(jié)點上。

2、自我理解:

  1. 污點和容忍度是相互匹配的關系,我們在node上定義一個污點,pod上定義容忍度
    1. 如果pod能容忍這個污點,就會被調度到擁有這個污點的節(jié)點上
    2. 如果pod不能容忍這個污點,就不會被調度到擁有這個污點的節(jié)點上
  2. 如果node節(jié)點上沒有定義污點,那么任何pod都會調度到這個節(jié)點上
  3. 我們可以給node節(jié)點打一個污點,pod如果不能容忍這個節(jié)點上定義的污點,那就調度不到這個節(jié)點上。
  4. taint:污點
    1. 定義在節(jié)點上的,是鍵值對數據
  5. tolerations:容忍度
    1. 定義在pod上,可以定義能容忍哪些污點

3、污點

????????如果一個節(jié)點被標記為有污點,那么意味著不允許pod調度到該節(jié)點,除非pod也被標記為可以容忍污點的節(jié)點。

1、污點的組成:
  1. ?使用kubectl taint 命令可以給某個node節(jié)點設置污點,Node被設置上污點之后就和pod之間存在一種相斥的關系,可以讓Node拒絕Pod的調度執(zhí)行,甚至將Node已經存在的Pod驅逐出去。
  2. 每個污點有個key和value作為污點的標簽,其中value可以為空,effect是描述污點的作用
2、污點的三種策略:

????????effect:用來定義節(jié)點污點對pod對象的排斥效果

? ? ? ? 1、PreferNoSchedule

????????????????表示盡量不調度到污點節(jié)點上去。

? ? ? ? 2、NoExecute

????????????????當pod能夠容忍這個節(jié)點污點,會被調度到節(jié)點;當pod不能容忍節(jié)點污點,將會被驅逐。

????????NoExecute對正在運行的pod的影響:

? ? ? ? ? ? ? ? 1、沒有設置 Toleration 的 Pod 會被立刻驅逐

? ? ? ? ? ? ? ? 2、配置了對應 Toleration 的 pod,如果沒有為 tolerationSeconds 賦值,則會一直留在這一節(jié)點中

? ? ? ? ? ? ? ? 3、配置了對應 Toleration 的 pod 且指定了 tolerationSeconds 值,則會在指定時間后驅逐

? ? ? ? ?3、NoSchedule

????????????????不允許調度,已經調度的不受影響

給node1添加污點
[root@k8s-master-1 Taint]#  kubectl taint node k8s-node-1 key1=value1:NoSchedule
node/k8s-node-1 tainted
查看是否添加成功
[root@k8s-master-1 Taint]# kubectl describe nodes k8s-node-1 | grep Taints
Taints:             key1=value1:NoSchedule
刪除污點(和標簽相同)
kubectl taint nodes node1 key1=value1:NoSchedule-

?4、容忍

????????設置了污點的Node將根據taint的effect:NoSchedule、PreferNoSchedule、NoExecute和Pod之間產生互斥的關系,Pod將在一定程度上不會被調度到Node上。 但我們可以在Pod上設置容忍(Toleration),意思是設置了容忍的Pod將可以容忍污點的存在,可以被調度到存在污點的Node上。?

1、Toleration基本用法

????????一個toleration和一個taint相"匹配"是指它們有一樣的key和effect

  1. operator的值為 Exists,這是無需指定value
  2. operator的值為Equal并且value相等
  3. 如果不指定operator,則默認為Equal。

另外還有如下兩個特例:

  1. 空的 key 配合 Exists 操作符能夠匹配所有的鍵和值
  2. 空的 effect 匹配所有的 effect
2、用法:
    tolerations:
      - key: key1
        value: value1
        operator: "Equal"
        effect: "NoSchedule"
- - 或者 - -
      tolerations:
      - key: key1

        operator: "Exists"
        effect: "NoSchedule" 
以上兩個容忍,使用任意一個容忍的pod都能調度到node1上。
- - 或者- - 表示:如果一個toleration的effect為空,則key值與之相同的相匹配taint的effect可以是任意值
      tolerations:
      - key: key1

        operator: "Exists"
3、注意:
  • 可以給1個節(jié)點添加多個Taint
  • 可以給一個pod添加多個toleration

二、使用演示

yaml文件如下:在此基礎上修改
apiVersion: apps/v1
kind: Deployment
metadata:
  name: taint-test
spec:
  selector:
    matchLabels:
      app: nginx
      env: prod
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
        env: prod
    spec:
      containers:
      - image: nginx:1.17.1
        name: nginx

1、node節(jié)點沒有任何的污點,創(chuàng)建有兩個副本的deploy,會指定到兩個節(jié)點上

[root@k8s-master-1 Taint]# kubectl get pod -owide
NAME                          READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
taint-test-5579c4b477-2c2r6   1/1     Running   0          7s    10.244.0.13    k8s-node-1   <none>           <none>
taint-test-5579c4b477-v6rgx   1/1     Running   0          7s    10.244.1.242   k8s-node-2   <none>           <none>

刪除deploy,然后給node1添加污點,在創(chuàng)建有容忍的deploy
      tolerations:
      - key: key1
        value: value1
        operator: "Equal"
        effect: "NoSchedule"

2、node1添加污點
[root@k8s-master-1 Taint]# kubectl taint nodes k8s-node-1 key1=value1:NoSchedule
node/k8s-node-1 tainted

[root@k8s-master-1 Taint]# kubectl get pod -owide
NAME                          READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
taint-test-5579c4b477-hklqg   1/1     Running   0          5s    10.244.1.243   k8s-node-2   <none>           <none>
taint-test-5579c4b477-xsdfd   1/1     Running   0          5s    10.244.0.14    k8s-node-1   <none>           <none>

可以看到也被調度到了兩個節(jié)點上,因為node1上添加了污點,這個pod能容忍他的污點,node2上沒有添加污點,所以也可以調度過去。

3、給node2 添加NoExecute 污點,此時node2上的pod就會被驅逐,因為創(chuàng)建了2個副本的deploy,為了保證副本數,會在node1 上新創(chuàng)建一個pod
[root@k8s-master-1 Taint]# kubectl taint nodes k8s-node-2 key1=value1:NoExecute
node/k8s-node-2 tainted

[root@k8s-master-1 Taint]# kubectl get pod -owide
NAME                          READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
taint-test-5579c4b477-2kqq8   1/1     Running   0          20s   10.244.0.15   k8s-node-1   <none>           <none>
taint-test-5579c4b477-xsdfd   1/1     Running   0          14m   10.244.0.14   k8s-node-1   <none>           <none>

4、給node1 添加NoExecute 污點和NoSchedule污點,并且設置tolerationSeconds值為30,讓其在30秒之后被驅逐,,此時pod在30秒之后會被驅逐,被調度到node2上。
      tolerations:

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

[root@k8s-master-1 Taint]# kubectl get pod -owide
NAME                          READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
taint-test-58b64c6989-2qxpq   1/1     Running   0          5s    10.244.1.43   k8s-node-2   <none>           <none>
taint-test-58b64c6989-5hts2   1/1     Running   0          47s   10.244.1.42   k8s-node-2   <none>           <none>

三、Pod優(yōu)先級調度

????????當集群資源不足時又有新的Pod創(chuàng)建請求,那么這個Pod會一直處于Pending狀態(tài),就算是這個Pod非常的重要,非部署不可,那也沒辦法,你只能刪除一些Pod釋放一些資源才能被調度成功。

1、調度策略:

? ? ? ? 1、驅逐(Eviction)

????????????????Eviction 是kubelet進程的行為,當該Node上的資源不足時,kubelet就會執(zhí)行驅逐動作,配合優(yōu)先級,將優(yōu)先級低的Pod驅逐,如果優(yōu)先級都一樣,那么實際使用的資源量超過申請量最大倍數的高耗能 Pod 會被首先驅逐。

? ? ? ? 2、搶占(Preemtion)

????????Preemption 是 Scheduler 執(zhí)行調度的行為,當有新的Pod創(chuàng)建,但是因為資源不夠無法正常調度,調度器便會驅逐部分優(yōu)先級較低的Pod來滿足新Pod的需求。

2、創(chuàng)建權重

????????權重是區(qū)分優(yōu)先級的關鍵因素。

3、yaml文件定義

1、查看優(yōu)先級 kubectl get PriorityClass

[root@k8s-master-1 diaodu]# kubectl get pc
NAME                      VALUE        GLOBAL-DEFAULT   AGE
system-cluster-critical   2000000000   false            60d
system-node-critical      2000001000   false            60d

2、通過yaml方式定義一個PriorityClass

[root@k8s-master-1 diaodu]# vim PriorityClass.yaml
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass # PriorityClass不受命名空間約束
metadata:
  name: app-priority
value: 100 # 優(yōu)先級為100,數字越大,優(yōu)先級越高,沒有設置優(yōu)先級的Pod默認優(yōu)先級為0
globalDefault: false #globalDefault 給沒有設置優(yōu)先級的Pod使用,整個系統(tǒng)只能設置一個globalDefault=true的PriorityClass
description: " app test priority." #description 描述什么時候應該使用該優(yōu)先級

3、創(chuàng)建優(yōu)先級
[root@k8s-master-1 diaodu]# kubectl apply -f PriorityClass.yaml 
priorityclass.scheduling.k8s.io/app-priority created

4、查看優(yōu)先級
[root@k8s-master-1 diaodu]# kubectl get pc
NAME                      VALUE        GLOBAL-DEFAULT   AGE
app-priority              100          false            10s
system-cluster-critical   2000000000   false            60d
system-node-critical      2000001000   false            60d

4、使用優(yōu)先級

????????結合前面講到的親和性調度與污點來模擬效果。給node02設置上一個污點,使得Pod不能調度進來,給node01運行一個帶有標簽env=pro的Pod,再創(chuàng)建一個新的Pod使用了優(yōu)先級app-priority,并且通過反親和性設置不能調度到帶有標簽env=pro的Pod所在Node,那么新Pod將沒有節(jié)點可調度,但是由于它的優(yōu)先級高,那么會不會丟車保帥,將node01上的Pod驅逐呢?下面來驗證一下。

1、創(chuàng)建一個標簽是ds=true的Pod,指定調度到node1上

[root@k8s-master-1 diaodu]# vim pod-test.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-test
  labels:
    ds: "true"
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    imagePullPolicy: IfNotPresent
  nodeName: k8s-node-1

[root@k8s-master-1 diaodu]# kubectl apply -f pod-test.yaml 
pod/pod-test created

[root@k8s-master-1 diaodu]# kubectl get pod -owide
NAME       READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
pod-test   1/1     Running   0          4s    10.244.0.85   k8s-node-1   <none>           <none>

2、給node02創(chuàng)建污點,模擬不可用
[root@k8s-master-1 diaodu]# kubectl taint node k8s-node-2 app=true:NoExecute
node/k8s-node-2 tainted

[root@k8s-master-1 diaodu]# kubectl describe node k8s-node-2 | grep Taints
Taints:             app=true:NoExecute

3、創(chuàng)建帶有優(yōu)先級的Pod
[root@k8s-master-1 diaodu]# vim priority-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: priority-pod
  labels:
    env: pro
spec:
  containers:
  - name: nginx
    image: nginx:1.17.1
    imagePullPolicy: IfNotPresent # 本地有不拉取鏡像
  affinity:
    podAntiAffinity: # 使用Pod反親和性
      requiredDuringSchedulingIgnoredDuringExecution:  # 硬限制
      - labelSelector:
          matchExpressions:
          - key: ds
            operator: In
            values:
            - "true"
        topologyKey: kubernetes.io/hostname
  priorityClassName: app-priority

# 啟動priority-pod并且立刻查看Pod詳情,pod-test正在被驅逐

[root@k8s-master-1 diaodu]# kubectl apply -f priority-pod.yaml && kubectl get pod -owide
pod/priority-pod created
NAME           READY   STATUS        RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
pod-test       1/1     Terminating   0          18s   10.244.0.89   k8s-node-1   <none>           <none>
priority-pod   0/1     Pending       0          0s    <none>        <none>       k8s-node-1       <none>

# 再次查看Pod詳情,priority-pod運行成功,target-pod被驅逐
[root@k8s-master-1 diaodu]#kubectl get pod -owide

NAME           READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
priority-pod   1/1     Running   0          4s    10.244.0.90   k8s-node-1   <none>           <none>

解釋:第一步創(chuàng)建了一個app-priority的優(yōu)先級策略,然后,創(chuàng)建了一個設置有ds=true標簽的Pod,并將其調度到node1上,在給node2打了一個NoExecute
模擬不可用,然后在創(chuàng)建一個反親和性的Pod,指定不讓他調度到和帶有ds=true標簽的Pod所在的節(jié)點上,此時,kube-scheduler,就會把它調度到node2上,
但是node2上添加了NoExecute污點,此Pod又不容忍,所以就調度失敗,但是此pod優(yōu)先級較高,故而就會把node1上優(yōu)先級底的刪除,用來創(chuàng)建優(yōu)先級較高的Pod.

注意事項:

????????優(yōu)先級搶占的調度方式可能會導致調度陷入“死循環(huán)”狀態(tài)。當Kubernetes集群配置了多個調度器(Scheduler)時,這一行為可能就會發(fā)生。

????????高優(yōu)先級Pod搶占節(jié)點并驅逐低優(yōu)先級的Pod,這個問題對于普通的服務型的Pod來說問題不大,但對于執(zhí)行批處理任務的Pod來說就可能是個災難,當一個高 優(yōu)先級的批處理任務的Pod創(chuàng)建后,正在執(zhí)行批處理任務的某個低優(yōu)先級的Pod可 能因為資源不足而被驅逐,從而導致對應的批處理任務被擱置。

????????為了避免這個問題發(fā)生,PriorityClass增加了一個新的屬性一preemptionPolicy,當它的值為 preemptionLowerPriorty(默認)時,就執(zhí)行搶占功能,當它的值被設置為Never 時,就默認不搶占資源,而是靜靜地排隊,等待自己的調度機會。

[root@k8s-master-1 diaodu]# kubectl get pc app-priority -oyaml
apiVersion: scheduling.k8s.io/v1
description: ' app test priority.'
kind: PriorityClass
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"scheduling.k8s.io/v1","description":" app test priority.","globalDefault":false,"kind":"PriorityClass","metadata":{"annotations":{},"name":"app-priority"},"value":100}
  creationTimestamp: "2023-06-19T03:02:55Z"
  generation: 1
  managedFields:
  - apiVersion: scheduling.k8s.io/v1
    fieldsType: FieldsV1
    fieldsV1:
      f:description: {}
      f:metadata:
        f:annotations:
          .: {}
          f:kubectl.kubernetes.io/last-applied-configuration: {}
      f:preemptionPolicy: {}
      f:value: {}
    manager: kubectl-client-side-apply
    operation: Update
    time: "2023-06-19T03:02:55Z"
  name: app-priority
  resourceVersion: "1938189"
  selfLink: /apis/scheduling.k8s.io/v1/priorityclasses/app-priority
  uid: 2f925930-40c4-4bc1-a497-0d1748d14751
preemptionPolicy: PreemptLowerPriority
value: 100

?文章來源地址http://www.zghlxwxcb.cn/news/detail-829700.html

到了這里,關于十七、K8S-污點(Taint)和容忍度(toleration)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • K8s Pod親和性、污點、容忍度、生命周期與健康探測詳解(下)

    K8s Pod親和性、污點、容忍度、生命周期與健康探測詳解(下)

    ??明明跟你說過:個人主頁 ??個人專欄:《Kubernetes航線圖:從船長到K8s掌舵者》??? ??行路有良友,便是天堂?? 目錄 五、健康探測 1、健康探測的概念 2、Pod啟動探測(Startup Probe) 3、Pod存活探測(Liveness Probe) 4、Pod就緒探測(Readiness Probe) 5、Pod健康探測在故障轉移與

    2024年04月08日
    瀏覽(32)
  • K8s(二)Pod資源——node調度策略、node親和性、污點與容忍度

    K8s(二)Pod資源——node調度策略、node親和性、污點與容忍度

    目錄 node調度策略nodeName和nodeSelector 指定nodeName 指定nodeSelector node親和性 node節(jié)點親和性 硬親和性 軟親和性 污點與容忍度 本文主要介紹了在pod中,與node相關的調度策略,親和性,污點與容忍度等的內容 在創(chuàng)建pod等資源時,可以通過調整字段進行node調度,指定資源調度到滿足

    2024年01月17日
    瀏覽(73)
  • 學習筆記十八:污點、容忍度

    給了節(jié)點選則的主動權,我們給節(jié)點打一個污點,不容忍的pod就運行不上來,污點就是定義在節(jié)點上的鍵值屬性數據,可以定決定拒絕那些pod; taints是鍵值數據,用在節(jié)點上,定義污點; tolerations是鍵值數據,用在pod上,定義容忍度,能容忍哪些污點 pod親和性是pod屬性;但

    2024年02月12日
    瀏覽(22)
  • 【云原生】POD污點和容忍度

    節(jié)點親和性 是 Pod 的一種屬性,它使 Pod 被吸引到一類特定的節(jié)點 (這可能出于一種偏好,也可能是硬性要求)。 污點(Taint) 則相反——它使節(jié)點能夠排斥一類特定的 Pod。 容忍度(Toleration) 是應用于 Pod 上的。容忍度允許調度器調度帶有對應污點的 Pod。 容忍度允許調度

    2024年02月16日
    瀏覽(26)
  • 【云原生 · Kubernetes】Taint和Toleration(污點和容忍)

    個人名片: 因為云計算成為了監(jiān)控工程師??????? 個人博客??:念舒_C.ying CSDN主頁??:念舒_C.ying 節(jié)點親和性是 pod 的一種屬性(優(yōu)先選擇或硬性要求),它使 pod 被優(yōu)先分配到一類特定的節(jié)點上。而 Taint 則相反,它使 節(jié)點 能夠 排斥 一類特定的 pod。 Taint(污點)和

    2023年04月08日
    瀏覽(17)
  • k8s 污點和容忍

    k8s 污點和容忍

    在 Kubernetes 中,節(jié)點親和性 NodeAffinity 是 Pod 上定義的一種屬性,能夠使 Pod 按我們的要求調度到某個節(jié)點上,而 Taints(污點) 則恰恰相反,它是 Node 上的一個屬性,可以讓 Pod 不能調度到帶污點的節(jié)點上,甚至會對帶污點節(jié)點上已有的 Pod 進行驅逐。當然,對應的 Kubernetes 可以

    2023年04月08日
    瀏覽(22)
  • k8s概念-污點與容忍

    k8s 集群中可能管理著非常龐大的服務器,這些服務器可能是各種各樣不同類型的,比如機房、地理位置、配置等,有些是計算型節(jié)點,有些是存儲型節(jié)點,此時我們希望能更好的將 pod 調度到與之需求更匹配的節(jié)點上。 此時就需要用到污點(Taint)和容忍(Toleration),這些配

    2024年02月14日
    瀏覽(21)
  • K8s的親和、反親和、污點、容忍

    K8s的親和、反親和、污點、容忍

    親和性的原理其實很簡單,主要利用label標簽結合nodeSelector選擇器來實現 從pod出發(fā),可以分成親和性和反親和性,分別對應podAffinity和podAntiAffinity。 從node出發(fā),也可以分成親和性和反親和性,分別對應nodeAffinity和nodeAntiAffinity。 從操作指令來講,可以有l(wèi)n、Notln、Exists、DoesN

    2024年04月27日
    瀏覽(25)
  • 【k8s】pod調度——親和,反親和,污點,容忍

    【k8s】pod調度——親和,反親和,污點,容忍

    官方網址:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/ pod.spec.nodeAffinity ●preferredDuringSchedulingIgnoredDuringExecution:軟策略? p開頭 ●requiredDuringSchedulingIgnoredDuringExecution:硬策略? r開頭 pod.spec.affinity.podAffinity/podAntiAffinity ●preferredDuringSchedulingIgnoredDuringExecution:軟策

    2024年02月05日
    瀏覽(27)
  • k8s打污點、取消污點、驅動pod

    在 Kubernetes 中,可以使用 kubectl taint 命令來打污點,它有以下語法: 其中, node-name 是節(jié)點的名稱, key 和 value 是用于標識污點的鍵和值, effect 則指定了污點的影響。 例如,要在名為 node-1 的節(jié)點上打一個污點,使它不能被調度 NoSchedule ,可以使用以下命令: 這將在 node-

    2024年02月12日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包