日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
五分鐘搞懂K8S的污點和容忍度

五分鐘搞懂K8S的污點和容忍度

作者:不焦躁的程序員 2023-09-21 11:28:28

云計算

云原生 本文主要快速講解Kubernetes的污點和容忍度,一句話總結(jié):如果Pod能容忍某個節(jié)點上的污點,那么Pod就可以調(diào)度到該節(jié)點。

創(chuàng)新互聯(lián)是一家專業(yè)提供武城企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計制作、成都網(wǎng)站制作成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為武城眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進行中。

在K8S中,如果Pod能容忍某個節(jié)點上的污點,那么Pod就可以調(diào)度到該節(jié)點。如果不能容忍,那就無法調(diào)度到該節(jié)點。污點和容忍度就像談戀愛的小情侶,你情我愿,女生知道男生的缺點,卻依然選擇容忍,這樣他們可以生活在一起。如果女生容忍不了男生的缺點,那就沒法生活在一起。

1、理論

1.1、污點和容忍度的概念

  • 污點(Taints):定義在節(jié)點上,用于拒絕Pod調(diào)度到此節(jié)點,除非該Pod具有該節(jié)點上的污點容忍度。被標(biāo)記有Taints的節(jié)點并不是故障節(jié)點。
  • 容忍度(Tolerations):定義在Pod上,用于配置Pod可容忍的節(jié)點污點,K8S調(diào)度器只能將Pod調(diào)度到該Pod能夠容忍的污點的節(jié)點上。
  • 調(diào)度示例圖:

1.2、排斥等級

Node對Pod對象的排斥等級有3種:

  • NoSchedule:沒有配置此污點容忍度的新Pod不能調(diào)度到此節(jié)點,節(jié)點上現(xiàn)存的Pod不受影響。
  • PreferNoSchedule:沒有配置此污點容忍度的新Pod盡量不要調(diào)度到此節(jié)點,如果找不到合適的節(jié)點,依然會調(diào)度到此節(jié)點。
  • NoExecute:沒有配置此污點容忍度的新Pod對象不能調(diào)度到此節(jié)點,節(jié)點上現(xiàn)存的Pod會被驅(qū)逐。

1.3、容忍度操作符

在Pod上定義容忍度時,它支持兩種操作符:Equal和Exists。

  • Equal:容忍度與污點必須在key、value和effect三者完全匹配。
  • Exists:容忍度與污點必須在key和effect二者完全匹配,容忍度中的value字段要使用空值。

1.4、用法

污點定義在節(jié)點的nodeSpec中,容忍度定義在Pod的podSpec中。

污點和容忍度都是鍵值對的數(shù)據(jù)格式,但是要增加一個排斥等級(effect)標(biāo)記。

語法格式為:"key=value:effect"。

1.5、使用場景

1、獨占節(jié)點

  • 如果想拿出部分節(jié)點給特定的Pod使用,可以通過給節(jié)點添加污點,然后特定的Pod加入對應(yīng)的容忍度。
  • 在集群中有些機器設(shè)備可能比較特殊,比如CPU性能很好、內(nèi)存很大等等,不希望普通Pod占用這部分特殊節(jié)點,可以通過污點和容忍度來解決。

2、驅(qū)逐Pod

上文中定義了Node對Pod的排斥等級有3種。Node如果定義的排斥等級是NoExecute,那么沒有配置該污點容忍度的Pod會被驅(qū)逐。

K8S 也會使用污點自動標(biāo)識有問題的節(jié)點,比如節(jié)點在內(nèi)存不足的情況下,節(jié)點控制器會自動為該節(jié)點打上污點信息,并且使用 NoExecute作為排斥等級,此時沒有設(shè)置此類污點容忍度的Pod 會被驅(qū)逐。

DaemonSet控制器會無視此類污點,以便能在節(jié)點上部署重要的Pod。

目前,內(nèi)置的污點也比較多,比如以下幾個:

  • node.kubernetes.io/not-ready:節(jié)點未就緒
  • node.kubernetes.io/unreachable:節(jié)點不可觸達
  • node.kubernetes.io/memory-pressure:節(jié)點內(nèi)存空間已滿。
  • node.kubernetes.io/disk-pressure:節(jié)點磁盤空間已滿。
  • node.kubernetes.io/network-unavailable:節(jié)點網(wǎng)絡(luò)不可用。

2、實戰(zhàn)

2.1、管理節(jié)點污點

給節(jié)點添加污點:

kubectl taint nodes node01 key=value:effect

給節(jié)點刪除污點,此處的effect可以沒有

kubectl taint nodes node01 key[:effect]-

2.2、管理Pod的容忍度

上文中提到了,容忍度的操作符有2種:Equal和Exists,同時把排斥等級也要加上。

使用Equal的場景:

tolerations:
- key: "key"
  operator: "Equal"
  value: "value"
  effect: "NoExecute"

使用Exists的場景:

tolerations:
- key: "key"
  operator: "Exists"
  effect: "NoExecute"

如果Node上污點的排斥等級是NoExecute時,該Node上正在運行的Pod如果沒有該污點的容忍度,就會被立刻驅(qū)逐。不過系統(tǒng)增加了tolerationSeconds字段,用來延遲驅(qū)逐Pod。

tolerationSeconds字段的意思是:如果 Pod 的容忍度配置里存在排斥等級為 NoExecute ,并且指定了屬性 tolerationSeconds 的值,那么Pod 還能繼續(xù)在該節(jié)點上運行的時間(單位為秒):

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

2.3、具體操作

2.3.1、前置小知識

  • 查看看節(jié)點label,label是key-value的數(shù)據(jù)格式
kubectl get nodes --show-labels
  • 增加節(jié)點label,比如設(shè)置一個key是special-app,value是specialwebapp的label
kubectl label node k8s-worker-2 special-app=specialwebapp

  • 查看節(jié)點污點情況

查看某節(jié)點的污點情況,可以看到Taints這一欄是none,也可以看到label情況。

kubectl describe node k8s-worker-2

2.3.2、實戰(zhàn)示例過程

步驟

  1. 給定某個K8S節(jié)點,比如k8s-worker-2,節(jié)點的有一個label,Pod根據(jù)label選擇調(diào)度到k8s-worker-2,此時調(diào)度成功。
  2. 給k8s-worker-2增加污點,此時Pod調(diào)度失敗。
  3. 給Pod配置此污點的容忍度,調(diào)度成功。
  4. 刪除節(jié)點的污點,刪除容忍度,部署成功。

操作過程

  • 設(shè)置污點
kubectl taint nodes k8s-worker-2 question-node=broken-disk:NoSchedule

  • 部署Pod,可以看到?jīng)]有配置容忍度的Pod一直處于Pending狀態(tài),查看Pod的描述,也給出了原因:調(diào)度失敗,node有污點,Pod沒有容忍度。

  • 給Pod配置容忍度,部署成功

  • 刪除污點,刪除容忍度,部署成功
kubectl taint nodes k8s-worker-2 question-node-

完整的yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: webapp
  namespace: demo
  labels:
    app: webapp
spec:
  nodeSelector:
    # 選擇調(diào)度到具有這個label的節(jié)點
    "special-app": "specialwebapp"
#    kubernetes.io/hostname: k8s-worker-2
  tolerations:
    - key: "question-node"
      operator: "Equal"
      value: "broken-disk"
      effect: "NoSchedule"
  containers:
    - name: webapp
      image: nginx
      ports:
        - containerPort: 80

總結(jié)

在K8S中,如果Pod能容忍某個節(jié)點上的污點,那么Pod就可以調(diào)度到該節(jié)點。如果不能容忍,那就無法調(diào)度到該節(jié)點。


分享標(biāo)題:五分鐘搞懂K8S的污點和容忍度
URL分享:http://www.dlmjj.cn/article/dhigpdg.html