本活動在微信公衆號【個人小碗湯】上舉行,有送書活動!這裏參與答題不能參與到送書活動哦!
經過命令行,建立兩個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
nodeSelector是節點選擇約束的最簡單推薦形式。 nodeSelector是PodSpec下的一個字段。它指定鍵值對的映射。爲了使Pod能夠在節點上運行,該節點必須具備每一個指定的鍵值對做爲label。shell
語法格式:map[string]string 做用:
– 匹配node.labels
– 排除不包含nodeSelector中指定label的全部node
– 匹配機制 —— 徹底匹配
節點親和性在概念上相似於nodeSelector,它能夠根據節點上的標籤來限制Pod能夠被調度在哪些節點上。
紅色框爲硬性過濾:排除不具有指定label的node;在預選階段起做用;segmentfault
綠色框爲軟性評分:不具有指定label的node打低分, 下降node被選中的概率;在優選階段起做用;api
– 引入運算符:In,NotIn (labelselector語法)
– 支持枚舉label可能的取值,如 zone in [az1, az2, az3...]
– 支持硬性過濾和軟性評分
– 硬性過濾規則支持指定多條件之間的邏輯或運算
– 軟性評分規則支持 設置條件權重值
Pod親和性和反親和性能夠基於已經在節點上運行的Pod上的標籤而不是基於節點上的標籤,來限制Pod調度的節點。微信
規則的格式爲:
若是該X已經在運行一個或多個知足規則Y的Pod,則該Pod應該(或者在反親和性的狀況下不該該)在X中運行。
Y表示爲LabelSelector。X是一個拓撲域,例如節點,機架,雲提供者區域,雲提供者區域等。
紅框硬性過濾: 排除不具有指定pod的node組;在預選階段起做用;
綠框軟性評分: 不具有指定pod的node組打低分, 下降該組node被選中的概率;在優選階段起做用;
– 定義在PodSpec中,親和與反親和規則具備對稱性
– labelSelector的匹配對象爲Pod
– 對node分組,依據label-key=topologyKey,每一個labelvalue取值爲一組
– 硬性過濾規則,條件間只有邏輯與運算
– 匹配過程相同
– 最終處理調度結果時取反
即
– 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等開發、運維知識等提高硬實力的文章,期待你的關注。轉載說明:務必註明來源(註明:來源於公衆號:個人小碗湯,做者:小碗湯)