iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 12
0
DevOps

從開源雲到邊緣運算系列 第 12

[Day 12]KubeEdge 部屬 - Pod 指定 Node 派送

  • 分享至 

  • xImage
  •  

當你的叢集裡面有很多個edge node的時候,又想把服務部到特定的edge node上時,就需要指定一個edge node做派送,那要如何指定呢?這就是今天的重點了!


Node Selector

  1. 顯示目前可用之Node Labels
kubectl get node --show-labels

https://ithelp.ithome.com.tw/upload/images/20190926/20121071Oi5HzON84D.png

  1. 撰寫服務 yaml 檔nginx-selectnode.yaml

    • 使用 nodeSelector 指定 Node
      https://ithelp.ithome.com.tw/upload/images/20190926/20121071so5Nk7nW1Q.png
  2. 派送服務 yaml 檔

kubectl apply -f nginx-selectnode.yaml
  1. 查看派送狀態
kubectl get pod -o wide

https://ithelp.ithome.com.tw/upload/images/20190926/20121071JpsUXYdP2V.png


Node Affinity hardMode

Node 環境必需(完全)滿足 Pod 配置才可進行派送,否則 Pod 將創建失敗

  1. 新增標籤至指定的 Node 上
kubectl label node edge-1 disktype=hdd

https://ithelp.ithome.com.tw/upload/images/20190926/20121071ltfq9SLA3i.png

  1. 顯示node上的Labels
kubectl get node --show-labels

https://ithelp.ithome.com.tw/upload/images/20190926/20121071R9KxpsKGjV.png

3.撰寫服務 yaml檔NodeAffinityhardMode-hdd.yaml&NodeAffinityhardMode-ssd.yaml

  • 使用 affinity 指定使用 Node affinity (不存在 Node Anti affinity 防護機制)
  • 使用 requiredDuringSchedulingIgnoredDuringExecution 選用需求符合配置
  • 指定 label 中的兩種 disktype 為部屬參考 (HDD / SSD)
    NodeAffinityhardMode-hdd.yaml
    https://ithelp.ithome.com.tw/upload/images/20190926/20121071E0GrpVdYmo.png
    NodeAffinityhardMode-ssd.yaml
    https://ithelp.ithome.com.tw/upload/images/20190926/20121071tkf7V0aVyx.png

完全符合需求配置方案-選用機制說明

  • Node Label 變動後,若無法符合 Pod 需求,刪除 Pod 重新進行節點選擇
    requiredDuringSchedulingRequiredDuringExecution
  • Node Label 變動後,Pod 持續保留在原節點上,以 yaml 檔派送當下為基準
    requiredDuringSchedulingIgnoredDuringExecution
  • 附註說明
    • nodeSelectorTerms 設定選擇規則方案(可擁有多個設置,多個選擇方案間相互獨立)
    • matchExpressions 可使用多層匹配(Pod 會在所有需同時滿足時進行執行派送與建立)
    • key 等同於 Node Label Name
    • values 等同於 Node Label 對應的 values
    • operator 提供多種對於 values 篩選機制
      In:指定 values 的值存在 Label 列表中
      NotIn:指定 values 的值不存在 Label 列表中
      Exists:指定的 Label 存在 (不考慮 values)
      DoesNotExist: 指定的 Label 不存在
      Gt:Label 對應的值大於 values (字串比對)
      Lt:Label 對應的值小於 values (字串比對)
  1. 派送服務 yaml檔
kubectl apply -f NodeAffinityhardMode-hdd.yaml
kubectl apply -f NodeAffinityhardMode-ssd.yaml
  1. 查看派送狀態
kubectl get pod -o wide

https://ithelp.ithome.com.tw/upload/images/20190926/20121071E02647t7rU.png
到這裡大家可以看到有標籤hdd的pod成功部屬服務到edge node上,反之ssd的會處於pending狀態

Node Affinity softMode

Pod 優先找尋相同配置 Node 環境,若所有 Node 皆無法匹配,則將 Pod 啟動於 權重評分較高資源使用率較低 的 Node 之上

  1. 新增標籤至指定的 Node 上
kubectl label node edge-2 os.version=16.04
  1. 顯示所有node上之Labels
kubectl get node --show-labels
  1. 撰寫服務 yaml檔NodeAffinitysoftMode-1.yaml&NodeAffinitysoftMode-2.yaml
    • 使用 affinity 指定使用 Node affinity (不存在 Node Anti affinity 防護機制)
    • 使用 preferredDuringSchedulingIgnoredDuringExecution 選用需求參考配置
    • 指定 label 中的兩種 os.version 為部屬參考 (16.04 / 18.04)
      NodeAffinitysoftMode-1.yaml
      https://ithelp.ithome.com.tw/upload/images/20190926/20121071rr9PGM9NWh.png
      NodeAffinitysoftMode-2.yaml
      https://ithelp.ithome.com.tw/upload/images/20190926/20121071SGuQsZ0Ygb.png
    • 附註說明
      • weight 為參考方案設計部屬權重值(優先派送 Pod 參考規則對於 Node 總評分較高者)
      • preference 設定需求規則參考方案(可擁有多個設置,多個選擇方案配對中增加權重)
      • matchExpressions 可使用多層匹配(Pod 會在滿足時進行執行 增加權重值)
      • key 等同於 Node Label Name
      • values 等同於 Node Label 對應的 values
      • operator 提供多種對於 values 篩選機制
        In:指定 values 的值存在 Label 列表中
        NotIn:指定 values 的值不存在 Label 列表中
        Exists:指定的 Label 存在 (不考慮 values)
        DoesNotExist: 指定的 Label 不存在
        Gt:Label 對應的值大於 values (字串比對)
        Lt:Label 對應的值小於 values (字串比對)
  2. 派送服務 yaml檔
kubectl apply -f NodeAffinitysoftMode-1.yaml
kubectl apply -f NodeAffinitysoftMode-2.yaml
  1. 查看派送狀態
kubectl get pod -o wide

https://ithelp.ithome.com.tw/upload/images/20190926/20121071S6S25VQsb3.png
在這裡兩個pod都成功派送了,這是因為在SofrMode裡設定的條件只是參考,如果都沒有符合的話就會選一個負載較輕的edge node進行派送


Node Affinity hardMode + softMode

測試方案 : 將node Affinity 的 hardMode和softMode的配置同時執行排送

  1. 顯示所有node上之Labels
kubectl get node --show-labels

https://ithelp.ithome.com.tw/upload/images/20190926/20121071OxoaMPxJg5.png

  1. 撰寫服務 yaml檔nodeaffinity-hardandsoftmode.yaml
    • 使用 requiredDuringSchedulingIgnoredDuringExecution 選用需求符合配置
    • 指定 label 中的兩種 disktype 為部屬參考 (HDD / SSD)
    • 使用preferredDuringSchedulingIgnoredDuringExecution 選用需求參考配置
    • 參考 label 中的兩種 os.version 為部屬參考 (16.04)
apiVersion: v1
kind: Pod
metadata:
  name: affinity-1
  labels:
    app: nginx
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - hdd
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: os.version
            operator: In
            values:
            - "16.04"
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
      hostPort: 80
---
apiVersion: v1
kind: Pod
metadata:
  name: affinity-2
  labels:
    app: nginx
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            operator: In
            values:
            - ssd
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: os.version
            operator: In
            values:
            - "16.04"
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
      hostPort: 80
  1. 派送服務 yaml檔
kubectl apply -f nodeaffinity-hardandsoftmode.yaml
  1. 查看服務派送狀態
kubectl get pod -o wide

https://ithelp.ithome.com.tw/upload/images/20190926/20121071Ri4kiIB8J1.png
https://ithelp.ithome.com.tw/upload/images/20190926/20121071sQsPSfpI08.png
因無法找到匹配 Pod hardMode需求設置的 Node,Pod 無法進行派送與啟動


上一篇
[Day 11]KubeEdge 部屬 - 滾動更新(RollingUpdate)/回復舊版(RollBack)
下一篇
[Day 13]KubeEdge 部屬 - Pod 相依/互斥 派送
系列文
從開源雲到邊緣運算30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言