備戰CKA每日一題——第6天 | kube-scheduler調度器高級調度:親和性反親和性調度,Deployment升級回滾

本活動在微信公衆號【個人小碗湯】上舉行,有送書活動!這裏參與答題不能參與到送書活動哦!

昨日考題

經過命令行,建立兩個deployment。java

    • 須要集羣中有2個節點 ;
    • 第1個deployment名稱爲cka-1122-01,使用nginx鏡像,有2個pod,並配置該deployment自身的pod之間在節點級別反親和;
    • 第2個deployment名稱爲cka-1122-02,使用nginx鏡像,有2個pod,並配置該deployment的pod與第1個deployment的pod在節點級別親和;

    最好提交最精簡的deployment yaml,若是評論被限制,請提交反親和性配置塊yaml,也可屢次評論提交node

    昨日答案

    第一個deployment:cka-1122-01linux

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: cka-1122-01
      name: cka-1122-01
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: cka-1122-01
      template:
        metadata:
          labels:
            app: cka-1122-01
        spec:
          containers:
          - image: nginx
            name: cka-1122-01  
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                  labelSelector:
                    matchExpressions:
                    - key: app
                      operator: In
                      values:
                      - cka-1122-01
                  topologyKey: "kubernetes.io/hostname"

    第二個deployment:cka-1122-02nginx

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: cka-1122-02
      name: cka-1122-02
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: cka-1122-02
      template:
        metadata:
          labels:
            app: cka-1122-02
        spec:
          containers:
          - image: nginx
            name: cka-1122-02
          affinity:
            podAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - cka-1122-01
                topologyKey: "kubernetes.io/hostname"

    最終調度結果:golang

    NAME                           READY     STATUS    RESTARTS   AGE       IP           NODE
    cka-1122-01-5df9bdf8c9-qwd2v    1/1         Running      0       8m     10.192.4.2     node-1
    cka-1122-01-5df9bdf8c9-r4rhs    1/1      Running      0       8m     10.192.4.3     node-2  
    cka-1122-02-749cd4b846-bjhzq     1/1      Running      0       10m    10.192.4.4    node-1
    cka-1122-02-749cd4b846-rkgpo     1/1      Running      0       10m    10.192.4.5    node-2

    昨日解析

    考點:k8s中的高級調度及用法。
    親和性和反親和性調度官方文檔:
    https://kubernetes.io/docs/co...docker

    將 Pod 調度到特定的 Node 上:nodeSelector

    nodeSelector是節點選擇約束的最簡單推薦形式。 nodeSelector是PodSpec下的一個字段。它指定鍵值對的映射。爲了使Pod能夠在節點上運行,該節點必須具備每一個指定的鍵值對做爲label。
    在這裏插入圖片描述shell

    語法格式:map[string]string 做用:
    – 匹配node.labels
    – 排除不包含nodeSelector中指定label的全部node
    – 匹配機制 —— 徹底匹配

    nodeSelector 升級版:nodeAffinity

    節點親和性在概念上相似於nodeSelector,它能夠根據節點上的標籤來限制Pod能夠被調度在哪些節點上。
    在這裏插入圖片描述
    紅色框爲硬性過濾:排除不具有指定label的node;在預選階段起做用;segmentfault

    綠色框爲軟性評分:不具有指定label的node打低分, 下降node被選中的概率;在優選階段起做用;api

    與nodeSelector關鍵差別

    – 引入運算符:In,NotIn (labelselector語法)
    – 支持枚舉label可能的取值,如 zone in [az1, az2, az3...]
    – 支持硬性過濾和軟性評分
    – 硬性過濾規則支持指定多條件之間的邏輯或運算
    – 軟性評分規則支持 設置條件權重值

    讓某些 Pod 分佈在同一組 Node 上:podAffinity

    Pod親和性和反親和性能夠基於已經在節點上運行的Pod上的標籤而不是基於節點上的標籤,來限制Pod調度的節點。微信

    規則的格式爲:

    若是該X已經在運行一個或多個知足規則Y的Pod,則該Pod應該(或者在反親和性的狀況下不該該)在X中運行。

    Y表示爲LabelSelector。X是一個拓撲域,例如節點,機架,雲提供者區域,雲提供者區域等。
    在這裏插入圖片描述
    紅框硬性過濾: 排除不具有指定pod的node組;在預選階段起做用;

    綠框軟性評分: 不具有指定pod的node組打低分, 下降該組node被選中的概率;在優選階段起做用;

    與nodeAffinity的關鍵差別

    – 定義在PodSpec中,親和與反親和規則具備對稱性
    – labelSelector的匹配對象爲Pod
    – 對node分組,依據label-key=topologyKey,每一個labelvalue取值爲一組
    – 硬性過濾規則,條件間只有邏輯與運算

    避免某些 Pod 分佈在同一組 Node 上:podAntiAffinity

    在這裏插入圖片描述

    與podAffinity的差別

    – 匹配過程相同
    – 最終處理調度結果時取反

    – podAffinity中可調度節點,在podAntiAffinity中爲不可調度
    – podAffinity中高分節點,在podAntiAffinity中爲低分

    今日考題

    經過命令行,建立1個deployment,副本數爲3,鏡像爲nginx:latest。而後滾動升 級到nginx:1.9.1,再回滾到原來的版本
    要求:Deployment的名稱爲cka-1125,貼出用到的相關命令。
    最好附帶建立的Deployment完整yaml,以及和升級回滾有關的命令。

    做者簡介

    做者:小碗湯,一位熱愛、認真寫做的小夥,目前維護原創公衆號:『個人小碗湯』,專一於寫linux、golang、docker、kubernetes等知識等提高硬實力的文章,期待你的關注。轉載說明:務必註明來源(註明:來源於公衆號:個人小碗湯, 做者:小碗湯)

    做者簡潔

    做者:小碗湯,一位熱愛、認真寫做的小夥,目前維護原創公衆號:『個人小碗湯』,專一於寫go語言、docker、kubernetes、java等開發、運維知識等提高硬實力的文章,期待你的關注。轉載說明:務必註明來源(註明:來源於公衆號:個人小碗湯,做者:小碗湯)
    相關文章
    相關標籤/搜索