Pod污點與容忍

大白話先解釋一下污點與容忍

污點:被打上污點Taints的節點,不會被調度器部署pod應用。
容忍:允許調度器部署pod應用到打上污點Taints的節點。

為什麼要用污點和容忍?

為什麼用污點?
因為k8s集群每一個請求都需要走master節點kube-apiserver,因此master節點非常重要,所以pod應用一般不部署master節點。那麼給master節點打上污點Taints,這樣調度的時候就不會部署到帶有污點的機器了 為什麼用容忍?
比如被打上污點Taints的master節點需要部署某個pod應用,那麼就需要容忍聲明,這樣就可以調度到帶有污點的機器了

官方解釋

對於nodeAffinity無論是硬策略還是軟策略方式,都是調度 pod 到預期節點上,而Taints恰好與之相反,如果一個節點標記為 Taints ,除非 pod 也被標識為可以容忍污點節點,否則該 Taints 節點不會被調度 pod。
比如用戶希望把 Master 節點保留給 Kubernetes 系統組件使用,或者把一組具有特殊資源預留給某些 pod,則污點就很有用了,pod 不會再被調度到 taint 標記過的節點。我們使用kubeadm搭建的集群默認就給 master 節點添加了一個污點標記,所以我們看到我們平時的 pod 都沒有被調度到 master 上去:
$ kubectl describe node master
Name: master
Roles: master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/hostname=master
node-role.kubernetes.io/master=
......
Taints: node-role.kubernetes.io/master:NoSchedule
Unschedulable: false
我們可以使用上面的命令查看 master 節點的信息,其中有一條關於 Taints 的信息:node-role.kubernetes.io/master:NoSchedule,就錶示給 master 節點打了一個污點的標記,其中影響的參數是NoSchedule,錶示 pod 不會被調度到標記為 taints 的節點

Taints參數

node-role.kubernetes.io/master:NoSchedule
NoSchedule: 不調度到污點節點上去
PreferNoSchedule:NoSchedule 的軟策略版本,錶示盡量不調度到污點節點上去
NoExecute:該選項意味著一旦Taint生效,如該節點內正在運行的pod沒有對應Tolerate設置,會直接被逐出

標記污點

# kubectl taint node sg-14 test=sg14:PreferNoSchedule
node/sg-14 tainted

上面的命名將 sg-14 節點標記為了污點,影響策略是 PreferNoSchedule,只會影響新的 pod 調度,如果仍然希望某個 pod 調度到 taint 節點上,則必須在 Spec 中做出Toleration定義,才能調度到該節點,

由於 master 節點被標記為了污點節點,所以我們這裏要想 pod 能够調度到 master 節點去,就需要增加容忍的聲明:

容忍污點

tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"

eg:

apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
replicas: 1 # pod數量
selector: # 選擇器
matchLabels: # 標簽
release: stable # 選擇標簽
template: # 模版
metadata:
name: test-tag # 控制器名字
labels:
release: stable # 設置控制器標簽
spec:
containers:
- name: nginx # 鏡像名稱
image: nginx # 鏡像
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"

然後創建上面的資源,我們可以看到有一個 pod 副本被調度到了 master 節點,這就是容忍的使用方法。

對於 tolerations 屬性的寫法,其中pod的 key、value、effect 與 Node 的 Taint 設置需保持一致, 還有以下幾點說明:

如果 operator 的值是 Exists,則 value 屬性可省略
如果 operator 的值是 Equal,則錶示其 key 與 value 之間的關系是 equal(等於)
如果不指定 operator 屬性,則默認值為 Equal
另外,還有兩個特殊值:
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoScheduale"

取消所有節點污點

[root@sg-14 deployment]# kubectl taint node sg-14 test-
node/sg-14 untainted
就删除了節點污點

k8s-Pod污點與容忍的更多相關文章

  1. kubernetes(k8s)Pod污點與容忍

    污點(taints)與容忍(tolerations) 對於nodeAffinity無論是硬策略還是軟策略方式,都是調度 pod 到預期節點上,而Taints恰好與之相反,如果一個節點標記為 Taint ...

  2. Kubernetes-14:一文詳解Pod、Node調度規則(親和性、污點、容忍、固定節點)

    Kubernetes Pod調度說明 簡介 Scheduler 是 Kubernetes 的調度器,主要任務是把定義的Pod分配到集群的節點上,聽起來非常簡單,但要考慮需要方面的問題: 公平:如何保證 ...

  3. Kubernetes的污點和容忍(下篇)

    背景 繼上一篇<Kubernetes的污點和容忍(上篇)>,這是https://kubernetes.io/docs/concepts/configuration/taint-and-to ...

  4. Kubernetes的污點和容忍(上篇)

    背景 搭建了一個k8s(Kubernetes)的事件監聽服務,監聽事件之後對數據做處理.有天報了一個問題經調查是新版本的k8s集群添加會把unschedule等信息通過污點的方式反映.而這些污點是只有 ...

  5. Kubernetes之Taints與Tolerations 污點和容忍

    NodeAffinity節點親和性,是Pod上定義的一種屬性,使Pod能够按我們的要求調度到某個Node上,而Taints則恰恰相反,它可以讓Node拒絕運行Pod,甚至驅逐Pod. Taints(污 ...

  6. k8s pod節點調度及k8s資源優化

    一.k8s pod 在節點間調度控制 k8s起pod時,會通過調度器scheduler選擇某個節點完成調度,選擇在某個節點上完成pod創建.當需要在指定pod運行在某個節點上時,可以通過以下幾種方式: ...

  7. 009.kubernets的調度系統之污點和容忍

    Taints和Tolerations(污點和容忍) Taint需要與Toleration配合使用,讓pod避開那些不合適的node.在node上設置一個或多個Taint後,除非pod明確聲明能够容忍這 ...

  8. k8s pod的4種網絡模式最佳實戰(externalIPs )

    [k8s]k8s pod的4種網絡模式最佳實戰(externalIPs )       hostPort相當於docker run -p 8081:8080,不用創建svc,因此端口只在容器運行的vm ...

  9. kubectl cp 從k8s pod 中 拷貝 文件到本地

    請查看官方的說明 kubectl cp --help 官方說使用cp , pod裏需要有tar命令 從k8s pod 中 拷貝 文件到本地 這是我使用的命令 kubectl exec redis-6c ...

  10. Kubernetes 配置 Taint 和 Toleration(污點和容忍)

    通過污點和容忍讓pod運行在特定節點上 參考官網:https://k8smeetup.github.io/docs/concepts/configuration/taint-and-toleratio ...

隨機推薦

  1. Docker compose學習筆記

    一.compose compose 作用 你的應用可能需要很多個服務,比如web服務,數據庫服務,緩存服務等等.我們可以把這些服務放到單獨的容器裏面,如果手工去配置這些服務會有些麻煩,docker c ...

  2. Visual Studio: whether auto-building when press the debug button

    Tools -> Options -> Projects and Solutions->Build and Run -> choose an option for On Run ...

  3. skinned mesh 蜘蛛樣

    被skinned mesh 折磨了 好久,開始感覺skinindices不對,因為pix顯示裏面全是0 後來跟來跟去發現是這樣的,那些uchar的整數被pix用float的格式顯示出來 (顯示為0.0 ...

  4. 如何在PowerDesigner將PDM導出生成WORD文檔或者html文件

    a)         使用PowerDesigner打開pdm文件 b)         點擊Report Temlates 制作模板 點擊PowerDesigner菜單欄“Report” -> ...

  5. C#讀取Visual FoxPro(*.dbf)數據並使用SqlBulkCopy插入到SqlServer 2008 R2數據錶中

    公司數據庫從32比特的SqlServer 2005昇級到64比特的SqlServer 2008 R2後,無法再像原來通過Link Server連接VFP同步數據,因此考慮用代碼程序從VFP數據庫中讀取所需 ...

  6. django之快速分頁

    本文介紹djanog兩種分頁,第一是普通分頁,第二是使用haystack全文檢索的分頁. 1.django自帶分頁功能,這個功能非常好用.基本知識點:Django提供了數據分頁的類,這些類被定義在dj ...

  7. python(字符串操作)

    一.字符串的局部替換 python 字符串替換可以用2種方法實現:1是用字符串本身的方法.2用正則來替換字符串 下面用個例子來實驗下:a = 'hello word'我把a字符串裏的word替換為py ...

  8. JavaScript 中常見設計模式整理

    開發中,我們或多或少地接觸了設計模式,但是很多時候不知道自己使用了哪種設計模式或者說該使用何種設計模式.本文意在梳理常見設計模式的特點,從而對它們有比較清晰的認知. JavaScript 中常見設計模 ...

  9. 啟動 ServiceFabric Windows服務報1053

    Remote Procedure Call (RPC) Locator和 Windows Firewall是否啟動. 以管理員身份運行PowerShell,輸入Unregister-Scheduled ...

  10. 使用SSH遠程登陸Linux

    ⒈SSH介紹 SSH(Secure Shell)由IETF的網絡工作小組(NetWork Working Group)所制定,SSH是建立在應用層和傳輸層基礎上的安全協議. SSH是目前較可靠,專為遠 ...