iT邦幫忙

2022 iThome 鐵人賽

DAY 8
1
DevOps

30天準備CKA考試系列 第 8

Day 08:Scheduling

  • 分享至 

  • xImage
  •  

Day 08:Scheduling

所謂Scheduling就是決定Pod在建立時,會被安排到哪個Node上,而在Day 03:Kubernetes的架構中有提到,集群預設是存在Scheduler來負責這件事。

Manual Scheduling

會需要手動做Scheduling的情況為集群中沒有Scheduler時。

如果沒有Sheduler,準備建立的Pod之狀態會停留在Pending,等待系統將其綁定到某個節點上運行,而現在我們可以怎麼做的呢?就是使用Binding來幫它綁定到某個Node上。

apiVersion: v1
kind: Binding
metadata:
  name: nginx # 會自動找這個名字的物件
target:
  apiVersion: v1
  kind: Node
  name: node01

在這邊metadata.name所設定的物件名稱,系統會自動根據這個名稱去尋找,找到這個名稱的物件並綁定到target所指定的Node。

我們也可以在原本的YAML中,使用nodeName來指定Pod到某個Node,要注意的是,Pod其實是無法直接更新的,一定要透過刪除再重建來更新。。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
      - containerPort: 8080
    nodeName: node02

Node Selector

除了使用nodeName以外,我們還可以使用nodeSelector來提供更多元的選擇。

那麼我們首先要來看看怎麼幫Node貼上Label,以及怎麼看Node有哪些Label。

# 看看節點上有哪些Labels
kubectl get nodes --show-labels

# 幫節點貼上Label, size=Large是key=value形式的Label
kubectl label nodes mode-1 size=Large

# 刪除Label,只需要在後面加上減號
kubectl label nodes mode-1 size=Large-

確認Node上面有哪些Label後,我們就可以利用這些Label來將Pod安排到擁有這些Label的節點上運行。

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
      - containerPort: 8080
    nodeSelector:
      size: Large

這邊的作法很類似Service,但是目前主流的作法是使用Affinity,其提供更優秀的Scheduling靈活性。

明天我們再來討論,Taints與Tolerations,還有Affinity~

參考資料

將Pod指派給節點

Certified Kubernetes Administrator (CKA) with Practice Tests


上一篇
Day 07:Service
下一篇
Day 09:Taints and Tolerations vs. Node Affinity
系列文
30天準備CKA考試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言