kubernetes支持多種資源調度模式,前面講過簡單的基於nodeName
和nodeSelector
的服務器資源調度,我們稱之為用戶綁定策略
,下面簡要描述基於PriorityClass
的同一node下不同pod資源的優先級調度,我們稱其為搶占式調度策略
現在版本支持Pod優先級搶占,通過PriorityClass來實現同一個Node節點內部的Pod對象搶占。根據 Pod 中運行的作業類型判定各個 Pod 的優先級,對於高優先級的 Pod 可以搶占低優先級 Pod 的資源。Pod priority指的是Pod的優先級,高優先級的Pod會優先被調度,或者在資源不足低情況犧牲低優先級的Pod,以便於重要的Pod能夠得到資源部署.
定義PriorityClass對象:
apiVersion: scheduling.k8s.io/v1alpha1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for XYZ service pods only."
在Pod的spec. priorityClassName中指定已定義的PriorityClass名稱
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
priorityClassName: high-priority
當節點沒有足夠的資源供調度器調度Pod、導致Pod處於pending時,搶占(preemption)邏輯會被觸發。Preemption會嘗試從一個節點刪除低優先級的Pod,從而釋放資源使高優先級的Pod得到節點資源進行部署。