pod調度

kube-scheduler 是 Kubernetes 集群的默認調度器; 在做調度決定時需要考慮的因素包括: 單獨和整體的資源請求煎娇、硬件/軟件/策略限制二庵、親和以及反親和要求、數據局域性缓呛、負載間 的干擾等等

一催享,指定nodeName

一,指定nodeName:(與containers同級別) 

示例:

spec:
  containers:
  - name: nginx
    image: nginx
  nodeName: node1

1)如果節(jié)點沒有資源容納pod哟绊,則調度失敗 
2)節(jié)點不存在因妙,調度失敗


二,nodeSelector

二票髓,nodeSelector(與containers同級別) 
示例:

# 給node1打標簽
kubectl label nodes node1 disktype=ssd

#指定按照標簽選擇節(jié)點 
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    disktype: ssd 

1) 如果沒有匹配到標簽會無法運行pod攀涵,pending狀態(tài)
2) 刪除node標簽不會影響已運行的pod,伸縮或者重新部署會pending



三洽沟,親和/反親和



(基于上面的nodeSelector擴展以故,nodeSelector匹配不到標簽會調度失敗,可以發(fā)現(xiàn)規(guī)則是“軟”/“偏好”裆操,而不是硬性要求怒详,因此,如果調度器無法滿足該要求踪区,仍然調度該pod)

節(jié)點親和
? requiredDuringSchedulingIgnoredDuringExecution 必須滿足
? preferredDuringSchedulingIgnoredDuringExecution 傾向滿足
? IgnoreDuringExecution 表示如果在Pod運行期間Node的標簽發(fā)生變化昆烁,導致 親和性策略不能滿足,則繼續(xù)運行當前的Pod缎岗。


nodeaffinity還支持多種規(guī)則匹配條件的配置:
? In: label 的值在列表內
? NotIn: label 的值不在列表內
? Gt: label 的值大于設置的值静尼,不支持Pod親和性 ? Lt:label 的值小于設置的值,不支持pod親和性 ? Exists:設置的label 存在
? DoesNotExist: 設置的 label 不存在


示例1: spec:
  containers:
  - name: nginx
    image: nginx
      spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: disktype
                    operator: In
                    values:
                      - ssd

必須滿足,調度到標簽為disktype=ssd的節(jié)點上





示例2: 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:   
            - preference:
                matchExpressions:
                  - key: disktype
                    operator: In
                    values:
                      - ssd
              weight: 1
          requiredDuringSchedulingIgnoredDuringExecution:     
            nodeSelectorTerms:
              - matchExpressions:
                  - key: kubernetes.io/hostnme
                    operator: NotIn
                    values:
                      - cn-shanghai.192.168.50.27

1) 傾向滿足調度到鼠渺,標簽為disktype=ssd的節(jié)點上
2) 必須滿足蜗元,不調度在節(jié)點cn-shanghai.192.168.50.27上






示例3:

  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - podAffinityTerm:
                labelSelector:
                  matchExpressions:
                    - key: disktype
                      operator: In
                      values:
                        - ssd
                topologyKey: kubernetes.io/hostname
              weight: 100
反親和
不調度到,標簽為disktype=ssd的節(jié)點


四系冗,污點

# ? Taints(污點)是Node的一個屬性奕扣,設置了Taints后,所以Kubernetes是不會將 Pod調度到這個Node上的掌敬,

于是Kubernetes就給Pod設置了個屬性Tolerations(容忍)惯豆, 只要 Pod能夠容忍Node上的污點,那么Kubernetes就會忽略Node上的污點奔害,就能夠(不是必須)把Pod調度過去


tolerations中定義的key楷兽、value、effect华临,要與node上設置的taint保持一致: 
? 如果 operator 是 Exists 芯杀,value可以省略。
? 如果 operator 是 Equal 雅潭,則key與value之間的關系必須相等揭厚。
? 如果不指定operator屬性,則默認值為Equal

還有兩個特殊值:
? 當不指定key扶供,再配合Exists 就能匹配所有的key與value 筛圆,可以容忍所有污點。 ? 當不指定effect 椿浓,則匹配所有的effect太援。
#必須滿足

 # 添加污點
kubectl taint node node1 node-role.kubernetes.io/master:NoSchedule

#Toleration(容忍) 
operator可以定義為:
Equal:表示key是否等于value,默認 Exists:表示key是否存在扳碍,此時無需定義value
tain 的 effect 定義對 Pod 排斥效果 

NoSchedule:僅影響調度過程提岔,對現(xiàn)存的Pod對象不產生影響; 
NoExecute:既影響調度過程,也影響顯著的Pod對象;不容忍的Pod對象將被驅逐
PreferNoSchedule: 表示盡量不調度




#示例1: 

spec:
      containers:
      - name: myapp
        image: myapp:v1
      tolerations:
        - effect: NoExecute
          key: kafka
          operator: Equal
          value: kafkadaptation
#以上的配置容忍kafka=kafkadaptation笋敞,則打了污點的標簽可以調度(如果沒有這個配置的容器碱蒙,不可以被調度打了污點的節(jié)點上)






#示例2: containers:
      - name: myapp
        image: myapp:v1
      tolerations:
      - operator: "Exists"
        effect: "NoSchedule"
tolerationSeconds: 6000(當 pod 需要被驅逐時,可以繼續(xù)在 node 上 運行的時間)

# 當不指定key液样,再配合Exists 就能匹配所有的key與value 振亮,可以容忍所有污點巧还。(容忍后有污點的節(jié)點都可以調度)

1)如果effect是NoSchedule(如上)鞭莽,則打了污點的NoSchedule節(jié)點也會被調度
2)如果effect是NoExecute,則打了污點的NoExecute節(jié)點可以被調度
3)如果不指定effect麸祷,則忽視所有污點澎怒,所有打了污點的標簽都可以被調度(如示例3)



#示例3:

      containers:
      - name: myapp
        image: myapp:v1
      tolerations:
      - operator: "Exists"
# ? 當不指定effect ,則匹配所有的effect。即所有污點都會忽視





PS1:
如果想讓一個deployment不管有多少個pod都在一個節(jié)點上喷面,
      tolerations:
        - effect: NoExecute
          key: wd
          operator: Equal
          value: wd

只能NoExecute才可以做到




PS2:
如果10個節(jié)點打了一樣的污點星瘾,有10個deployment需要在這10臺機器跑,并且各個服務之間的pod不能再用一個節(jié)點上(10個deployment各只有一個pod為例)


# 設置pod反親和
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: adaptor
                    operator: In
                    values:
                      - adaptor
              topologyKey: kubernetes.io/hostname
      containers:
... ...
          resources:
            requests:
              cpu: 250m
              memory: 64Mi
      terminationGracePeriodSeconds: 30
# 增加容忍度
      tolerations:
        - effect: NoExecute
          key: kafka
          operator: Equal
          value: kafkadaptation
      volumes:
        - hostPath:
            path: /etc/localtime
            type: ''
          name: volume-localtime

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末惧辈,一起剝皮案震驚了整個濱河市琳状,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盒齿,老刑警劉巖念逞,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異边翁,居然都是意外死亡翎承,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門符匾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叨咖,“玉大人,你說我怎么就攤上這事啊胶〉楦鳎” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵焰坪,是天一觀的道長痴晦。 經常有香客問我,道長琳彩,這世上最難降的妖魔是什么能庆? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮雨涛,結果婚禮上笛园,老公的妹妹穿的比我還像新娘。我一直安慰自己瘟仿,他們只是感情好箱锐,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劳较,像睡著了一般驹止。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上观蜗,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天臊恋,我揣著相機與錄音,去河邊找鬼墓捻。 笑死抖仅,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播撤卢,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼环凿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了放吩?” 一聲冷哼從身側響起智听,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渡紫,沒想到半個月后瞭稼,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡腻惠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年环肘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片集灌。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡悔雹,死狀恐怖,靈堂內的尸體忽然破棺而出欣喧,到底是詐尸還是另有隱情腌零,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布唆阿,位于F島的核電站益涧,受9級特大地震影響,放射性物質發(fā)生泄漏驯鳖。R本人自食惡果不足惜闲询,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浅辙。 院中可真熱鬧扭弧,春花似錦、人聲如沸记舆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泽腮。三九已至御蒲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诊赊,已是汗流浹背厚满。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留豪筝,地道東北人痰滋。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓摘能,卻偏偏與公主長得像续崖,于是被迫代替她去往敵國和親敲街。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容

  • 視頻教程連接:kubernetes快速入門 寫在前面 上一篇文章中kubernetes系列教程(六)kuberne...
    HappyLau談云計算閱讀 760評論 0 0
  • kubernets中負責pod調度的重要模塊是kube-schduler严望。kube-scheduler就是調度安排...
    ywhu閱讀 3,332評論 0 4
  • 在Kubernetes平臺上多艇,我們很少會直接創(chuàng)建一個Pod,在大多數情況下會通過RC像吻、Deployment峻黍、Dae...
    childhood_1013閱讀 518評論 0 0
  • Taint(污點)和Toleration(容忍) Taint需要與Toleration配合使用,讓pod避開那些不...
    childhood_1013閱讀 462評論 0 0
  • nodeSelector pod只會運行在匹配nodeSelector的node上拨匆。 要使用這個功能需要先配置no...
    AlienPaul閱讀 320評論 0 2