K8s 高級調度

文章目錄

  • K8s 高級調度
    • CronJob
    • initContainer
    • Taint 和 Toleration
      • 污點(Taint)
      • 容忍(Toleration)
    • Affinity
      • NodeAffinity
      • PodAnffinity 和 PodAntiAffinity
    • 總結

K8s 高級調度

CronJob

在 k8s 中周期性運行計劃任務,與 linux 中的 crontab 相同

注意點:CronJob 執行的時間是 controller-manager 的時間,所以一定要確保 controller-manager 時間是準確的,另外 cronjob

apiVersion: batch/v1
kind: CronJob
metadata:name: cron-job-test
spec:concurrencyPolicy: Allow # 并發調度策略:Allow 允許并發調度,Forbid:不允許并發執行,Replace:如果之前的任務還沒執行完,就直接執行新的,放棄上一個任務failedJobsHistoryLimit: 1 # 保留多少個失敗的任務successfulJobsHistoryLimit: 3 # 保留多少個成功的任務suspend: falsestartingDeadlineSeconds: 30 # 間隔多長時間檢測失敗的任務并重新執行,時間不能小于 10schedule: "* * * * *" # 調度策略jobTemplate:spec:template:spec:containers:- name: cron-jobimage: busybox:1.28imagePullPolicy: IfNotPresentcommand:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure

initContainer

在真正的容器啟動之前,先啟動 InitContainer,在初始化容器中完成真實容器所需的初始化操作,完成后再啟動真實的容器。

相對于 postStart 來說,首先 InitController 能夠保證一定在 EntryPoint 之前執行,而 postStart 不能,其次 postStart 更適合去執行一些命令操作,而 InitController 實際就是一個容器,可以在其他基礎容器環境下執行更復雜的初始化功能。

# 在 pod 創建的模板中配置 initContainers 參數:
spec:initContainers:- image: nginximagePullPolicy: IfNotPresentcommand: ["sh", "-c", "echo 'inited;' >> ~/.init"]name: init-test

Taint 和 Toleration

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

此時就需要用到污點(Taint)和容忍(Toleration),這些配置都是 key: value 類型的。

官網地址

污點(Taint)

污點:是標注在節點上的,當我們在一個節點上打上污點以后,k8s 會認為盡量不要將 pod 調度到該節點上,除非該 pod 上面表示可以容忍該污點,且一個節點可以打多個污點,此時則需要 pod 容忍所有污點才會被調度該節點。

# 為節點打上污點
kubectl taint node k8s-master key=value:NoSchedule# 移除污點
kubectl taint node k8s-master key=value:NoSchedule-節點名稱   污點的k,v  污點描述    - 刪除# 查看污點
kubectl describe no k8s-master污點的描述:
NoSchedule:不能容忍的 pod 不能被調度到該節點,但是已經存在的節點不會被驅逐
NoExecute:不能容忍的節點會被立即清除,能容忍且沒有配置 tolerationSeconds 屬性,則可以一直運行,設置了 tolerationSeconds: 3600 屬性,則該 pod 還能繼續在該節點運行 3600 秒
PreferNoSchedule:盡量避免把Pod調度到具有該污點的Node上,除非沒有其他節點可調度

容忍(Toleration)

容忍:是標注在 pod 上的,當 pod 被調度時,如果沒有配置容忍,則該 pod 不會被調度到有污點的節點上,只有該 pod 上標注了滿足某個節點的所有污點,則會被調度到這些節點

污點就是拒絕,容忍就是忽略,Node通過污點拒絕pod調度上去,Pod通過容忍忽略拒絕

# pod 的 spec 下面配置容忍
tolerations:
- key: "污點的 key"value: "污點的 value"offect: "NoSchedule" # 污點產生的影響operator: "Equal" # 表是 value 與污點的 value 要相等,也可以設置為 Exists 表示存在 key 即可,此時可以不用配置 value

Affinity

NodeAffinity

節點親和力:進行 pod 調度時,優先調度到符合條件的親和力節點上

  • requiredDuringSchedulingIgnoredDuringExecution: 調度器只有在規則被滿足的時候才能執行調度。此功能類似于 nodeSelector, 但其語法表達能力更強。
  • preferredDuringSchedulingIgnoredDuringExecution: 調度器會嘗試尋找滿足對應規則的節點。如果找不到匹配的節點,調度器仍然會調度該 Pod。
apiVersion: v1
kind: Pod
metadata:name: with-node-affinity
spec:affinity: # 親和力配置nodeAffinity: # 節點親和力requiredDuringSchedulingIgnoredDuringExecution: # 節點必須匹配下方配置nodeSelectorTerms: # 選擇器- matchExpressions: # 匹配表達式- key: topology.kubernetes.io/zone # 匹配 label 的 keyoperator: In # 匹配方式,只要匹配成功下方的一個 value 即可values:- antarctica-east1 # 匹配的 value- antarctica-west1 # 匹配的 valuepreferredDuringSchedulingIgnoredDuringExecution: # 節點盡量匹配下方配置- weight: 1 # 權重[1,100],按照匹配規則對所有節點累加權重,最終之和會加入優先級評分,優先級越高被調度的可能性越高preference:matchExpressions: # 匹配表達式- key: another-node-label-key # label 的 keyoperator: In # 匹配方式,滿足一個即可values:- another-node-label-value # 匹配的 value
#      - weight: 20......containers:- name: with-node-affinityimage: pause:2.0

在這一示例中,所應用的規則如下:

  • 節點必須包含一個鍵名為 topology.kubernetes.io/zone 的標簽, 并且該標簽的取值必須antarctica-east1antarctica-west1
  • 節點最好具有一個鍵名為 another-node-label-key 且取值為 another-node-label-value 的標簽。

你可以使用 operator 字段來為 Kubernetes 設置在解釋規則時要使用的邏輯操作符。 你可以使用 InNotInExistsDoesNotExistGtLt 之一作為操作符。 詳情可以參考官網

在這里插入圖片描述

補充:如果你同時指定了 nodeSelectornodeAffinity兩者必須都要滿足, 才能將 Pod 調度到候選節點上。

如果你在與 nodeAffinity 類型關聯的 nodeSelectorTerms 中指定多個條件, 只要其中一個 nodeSelectorTerms 滿足(各個條件按邏輯或操作組合)的話,Pod 就可以被調度到節點上。

如果你在與 nodeSelectorTerms 中的條件相關聯的單個 matchExpressions 字段中指定多個表達式, 則只有當所有表達式都滿足(各表達式按邏輯與操作組合)時,Pod 才能被調度到節點上。

PodAnffinity 和 PodAntiAffinity

PodAnffinity :Pod 親和力將與指定 pod 親和力相匹配的 pod 部署在同一節點。

PodAntiAffinity: Pod 反親和力 根據策略盡量部署或不部署到一塊

Pod 的親和性與反親和性也有兩種類型:

  • requiredDuringSchedulingIgnoredDuringExecution
  • preferredDuringSchedulingIgnoredDuringExecution
apiVersion: v1
kind: Pod
metadata:name: with-pod-affinity
spec:affinity: # 親和力配置podAffinity: # pod 親和力配置requiredDuringSchedulingIgnoredDuringExecution: # 當前 pod 必須匹配到對應條件 pod 所在的 node 上- labelSelector: # 標簽選擇器matchExpressions: # 匹配表達式- key: security # 匹配的 keyoperator: In # 匹配方式values: # 匹配其中的一個 value- S1topologyKey: topology.kubernetes.io/zonepodAntiAffinity: # pod 反親和力配置preferredDuringSchedulingIgnoredDuringExecution: # 盡量不要將當前節點部署到匹配下列參數的 pod 所在的 node 上- weight: 100 # 權重podAffinityTerm: # pod 親和力配置條件labelSelector: # 標簽選擇器matchExpressions: # 匹配表達式- key: security # 匹配的 keyoperator: In # 匹配的方式values:- S2 # 匹配的 valuetopologyKey: topology.kubernetes.io/zonecontainers:- name: with-pod-affinityimage: pause:2.0

總結

默認情況下,一個Pod在哪個Node節點上運行,是由Scheduler組件采用相應的算法計算出來的,這個過程是不受人工控制的。但是在實際使用中,這并不滿足的需求,我們想控制某些Pod到達某些節點上,就要求了解kubernetes對Pod的調度規則,kubernetes提供了四大類調度方式:

**自動調度:**運行在哪個節點上完全由Scheduler經過一系列的算法計算得出
**定向調度:**NodeName、NodeSelector
**親和性調度:**NodeAffinity、PodAffinity、PodAntiAffinity
**污點(容忍)調度:**Taints、Toleration

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14309.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14309.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14309.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【vue echart】完成一個簡單echart圖表+自適應

實現效果&#xff1a; html&#xff1a; <divref"echartOne"id"echartOne"style"width: 100%; height: 100%" ></div> js: getEchartOne() {let chart this.$echarts.init(this.$refs.echartOne);chart.setOption({title: {text:…

linux 有名管道FIFO

無名管道應用的一個重大限制是它沒有名字&#xff0c;因此&#xff0c;只能用于具有親緣關系的進程間通信&#xff0c;在有名管道&#xff08;named pipe或FIFO&#xff09;提出后&#xff0c;該限制得到了克服。FIFO不同于管道之處在于它提供一個路徑名與之關聯&#xff0c;以…

云原生|為什么服務網格能夠輕松重塑微服務?一文講清楚!

目錄 一、概述 二、 設計 三、服務網格 四、總結 一、概述 容器化技術與容器編排推動了微服務架構應用的演進&#xff0c;于是應用的擴展與微服務的數量日益增加&#xff0c;新的問題隨之而來&#xff0c;監控服務的性能變得越來越困難&#xff0c;微服務與微服務之間相互通…

v-rep--lua接口和c++接口的關聯

我們在coppeliasim中調用的lua腳本函數sim.xxxxx()的執行規律有兩種情況&#xff1a; 1&#xff0c;要么就是在coppliasim的sim.lua中有這個lua函數的定義&#xff0c;直接執行這個lua函數即可。比如&#xff0c;sim.creatPath(); 2&#xff0c;要么就是這個lua接口沒有lua語…

Kafka-集群管理者(Controller)選舉機制、任期(epoch)機制

Kafka概述 Kafka-集群管理者&#xff08;Controller&#xff09;選舉機制 Kafka中的Controller是Kafka集群中的一個特殊角色&#xff0c;負責對整個集群進行管理和協調。Controller的主要職責包括分區分配、副本管理、Leader選舉等。當當前的Controller節點失效或需要進行重新…

嵌入式實時操作系統筆記1:RTOS入門_理解簡單的OS系統

今日開始學習嵌入式實時操作系統RTOS&#xff1a;UCOS-III實時操作系統 本次目標是入門RTOS&#xff0c;理解多任務系統...... 本文只是個人學習筆記&#xff0c;基本都是對網上資料的整合...... 目錄 STM32裸機與RTOS區別&#xff1a; 裸機中斷示例&#xff1a; RTOS對優先級…

汽車標定技術(二十一)--英飛凌TC3xx的OLDA怎么玩?(2)

目錄 1.概述 2.Vector提出的OLDA概念 2.1 RAM Copy 2.2 Data Trace 3.小結 1.概述 上一篇汽車標定技術(二十一)--英飛凌TC3xx的OLDA怎么玩?(1)-CSDN博客,我們講了TC3xx

Spring MVC/Web

1.Spring MVC 的介紹 Spring Web MVC是基于Servlet API構建的原始Web框架&#xff0c;也是Spring框架的一部分。它提供了靈活可擴展的MVC架構&#xff0c;方便開發者構建高性能的Web應用程序&#xff0c;并與 Spring 生態系統無縫集成。 2.MVC 設計模式 MVC&#xff08;Model…

設計模式—23種設計模式重點 表格梳理

設計模式的核心在于提供了相關的問題的解決方案&#xff0c;使得人們可以更加簡單方便的復用成功的設計和體系結構。 按照設計模式的目的可以分為三大類。創建型模式與對象的創建有關&#xff1b;結構型模式處理類或對象的組合&#xff1b;行為型模式對類或對象怎樣交互和怎樣…

CSS實現圖片浮動在底層 div 之上,而不會影響底層 div 的布局和內容

前言&#xff1a;遇到個需求&#xff0c;需要圖片顯示在div之上&#xff0c;但是不占用div的空間布局&#xff0c;網上的答案五花八門&#xff0c;但其實使用css就可以簡單實現&#xff0c;僅以此博客作為記錄 舉個栗子 <div class"container"><img src&qu…

Linux 網絡編程基礎——網絡模型

網絡模型 網絡模型1. OSI七層模型1. 物理層&#xff08;Physical Layer&#xff09;2. 數據鏈路層&#xff08;Data Link Layer&#xff09;3. 網絡層&#xff08;Network Layer&#xff09;4. 傳輸層&#xff08;Transport Layer&#xff09;5. 會話層&#xff08;Session Lay…

研發機構大數據遷移如何保障敏感數據不泄露

隨著云計算和大數據技術的飛速進步&#xff0c;越來越多的企業正試圖通過數據遷移來提升IT基礎設施的效率&#xff0c;減少成本&#xff0c;并增強業務的靈活性。但是&#xff0c;這一過程并非沒有它的挑戰&#xff0c;尤其是在數據安全方面。數據在轉移過程中可能會遭遇黑客攻…

SQL的多表聯查

這里我先附上兩張表的數據&#xff1a; Orders 表: OrderIDCustomerID1321324NULL Customers 表: CustomerIDCustomerName1Alice2Bob3Charlie4David INNER JOIN &#x1f91d; 概念&#xff1a; INNER JOIN&#xff08;內連接&#xff09;返回兩個表中匹配的記錄。如果某條…

解決深度確定問題:使用不相交集合森林

解決深度確定問題&#xff1a;使用不相交集合森林 引言不相交集合森林&#xff08;DSF&#xff09;基礎按秩合并與路徑壓縮深度確定問題的解決方案實現MAKE-TREE修改FIND-SET實現FIND-DEPTH實現GRAFT分析最壞情況運行時間結論參考文獻 引言 在計算機科學中&#xff0c;樹結構是…

時空扭曲:重溫相對論的終極挑戰,探尋真理的腳步

大家都知道&#xff0c;相對論是愛因斯坦提出的劃時代理論&#xff0c;為人類認知時空和引力做出了革命性貢獻。但這個理論真的萬無一失嗎&#xff1f;近日&#xff0c;一項新研究提出了測試時間扭曲的新方法&#xff0c;或許能讓我們重新審視相對論在宇宙大尺度上的適用性。 時…

HTML5好看的通用網站模板源碼

文章目錄 1.設計來源1.1 主界面1.2 模板菜單1 界面1.3 模板菜單2 界面1.4 模板菜單3 界面1.5 下拉菜單1 界面1.6 下拉菜單2 界面1.7 模板菜單4 界面1.8 模板菜單5 界面1.9 界面底部 2.效果和源碼2.1 動態效果2.2 源碼目錄2.3 源代碼 源碼下載 作者&#xff1a;xcLeigh 文章地址…

Python 造數據神器Faker

大家好&#xff0c;在編寫代碼過程中&#xff0c;我們經常需要一些假數據來進行測試或者演示。手動創建這些數據不僅耗時&#xff0c;而且容易出錯。幸運的是&#xff0c;Python有一個非常有用的庫叫做Faker&#xff0c;它可以生成各種類型的假數據&#xff0c;從名字、地址到公…

【驅動】ARM手冊引腳寄存器地址(絕對物理地址)查找(以AM437x為例)

1、問題描述 在配置設備樹時,經常遇到如下宏: XXX_IOPAD(pa, val)實際定義如下: DRA7XX_CORE_IOPAD(pa, val) AM33XX_IOPAD(pa, val) DM816X_IOPAD(pa, val) DM814X_IOPAD(pa, val) AM4372_IOPAD(pa, val)一般注釋中的說明如下: 原文:Macro to allow using the absol…

md5和byte64字符串加密

說明&#xff1a;最近碰到一個需求&#xff0c;網絡請求&#xff0c;傳遞json的時候&#xff0c;必須加密&#xff0c;對字符串加密&#xff0c;然后前端去解密字符串&#xff0c;然后解析json&#xff0c;展示數據&#xff0c;可逆 step1: Md5加密方式 package com.example.…

Java技術精粹:高級面試問題與解答指南(一)

Java 面試問題及答案 問題1&#xff1a;請解釋Java中的多態性&#xff0c;并給出一個例子。 答案&#xff1a; 多態性是Java中的一個重要特性&#xff0c;它允許一個引用類型可以指向多種實際類型的對象&#xff0c;并且可以通過這個引用調用實際對象的方法。多態性主要通過繼…