如要進一步瞭解排程,請參閱 Kubernetes 說明文件的「排程、搶占和驅逐」一節。
本頁說明如何在 Kubernetes 資訊清單中,為主要和讀取集區執行個體指定容許度和節點親和性排程設定。
如要瞭解如何在節點上定義 taint,請參閱 Kubernetes 說明文件中的「Taints and Tolerations」(Taint 和容許條件)。
指定容許度
如要將 AlloyDB Omni Pod 排程至沒有其他應用程式 Pod 的節點,或比對這些節點上定義的特定汙點,請對節點套用一或多個容許條件,如下所示:
- 修改 AlloyDB Omni Kubernetes 運算子叢集的資訊清單,在下列任一區段的
schedulingConfig
區段中加入tolerations
區段:primarySpec
主要執行個體spec
讀取集區執行個體
tolerations: - key: "TAINT_KEY" operator: "OPERATOR_VALUE" value: "VALUE" effect: "TAINT_EFFECT"
更改下列內容:
TAINT_KEY
:現有汙點鍵的專屬名稱,例如節點的主機名稱,或是容許度適用的其他本機推斷值。節點上已定義汙點鍵。如果欄位空白且OPERATOR_VALUE
設為exists
,表示容許度必須符合所有值和所有鍵。OPERATOR_VALUE
:代表鍵與一組值的關係。將參數設為下列其中一個值:exists
:如果定義了汙點,Kubernetes 會比對任何值,無論汙點的值為何。equal
:如果值不同,Kubernetes 不會將 Pod 排程至節點。運算子需要 tainttrue
值。
VALUE
:容許事項比對的汙染值。如果運算子為 Exists,值會是空白,否則為一般字串。例如:true
。TAINT_EFFECT
:指出要比對的汙染效果。如果欄位空白,表示所有汙染效果都必須相符。將參數設為下列其中一個值:NoSchedule
:Kubernetes 不會在受汙染的節點上排程新的 Pod。PreferNoSchedule
:Kubernetes 會避免將新的 Pod 放置在遭汙染的節點上 (除非必要)。NoExecute
:Kubernetes 會逐出無法容忍 taint 的現有 Pod。
- 重新套用資訊清單。
定義節點相依性
Kubernetes 排程器會使用節點親和性做為一組規則,決定要將 Pod 放置在何處。節點相依性是節點選取器的彈性較高且用途多元的版本。
如要指定必須排定哪些節點來執行資料庫,請按照下列步驟操作:
- 修改資料庫叢集資訊清單,在主要執行個體的
primarySpec
或讀取集區執行個體的spec
schedulingConfig
區段中,於tolerations
區段後加入nodeaffinity
區段:nodeaffinity: NODE_AFFINITY_TYPE: - weight: WAIT_VALUE preference: matchExpressions: - key: LABEL_KEY operator: OPERATOR_VALUE values: - LABEL_KEY_VALUE
更改下列內容:
-
NODE_AFFINITY_TYPE
:將參數設為下列其中一個值:requiredDuringSchedulingIgnoredDuringExecution
:Kubernetes 會根據定義的規則排定 Pod。preferredDuringSchedulingIgnoredDuringExecution
:Kubernetes 排程器會嘗試尋找符合排程定義規則的節點。不過,如果沒有這類節點,Kubernetes 會排程至叢集中的其他節點。
WAIT_VALUE
:表示指定節點的偏好權重。值越大表示偏好程度越高。有效值介於1
到100
之間。LABEL_KEY
:節點的標籤,用於做為位置指標,並協助在叢集中平均分配 Pod。例如:disktype=ssd
。OPERATOR_VALUE
:代表鍵與一組值的關係。將參數設為下列其中一個值:-
In
:值陣列不得為空。 -
NotIn
:值陣列不得為空。 -
Exists
:值陣列必須為空白。 -
DoesNotExist
:值陣列必須為空白。 -
Gt
:值陣列必須包含單一元素,且會解讀為整數。 -
Lt
:值陣列必須包含單一元素,且會解讀為整數。
-
LABEL_KEY_VALUE
:標籤鍵的值。將參數設為字串值陣列,如下所示:- 如果運算子為
In
或NotIn
,值陣列不得為空。 - 如果運算子是
Exists
或DoesNotExist
,值陣列必須為空。 - 如果運算子為
Gt
或Lt
,值陣列必須只有一個元素,且會解譯為整數。
- 如果運算子為
-
- 重新套用資訊清單。
範例
以下範例說明如何在 AlloyDB Omni Kubernetes 運算子的主要和讀取集區執行個體中排定 Pod。這類排程設定可確保資料庫叢集的主要執行個體排定在適當的節點上,同時允許節點選取作業具有彈性。這項彈性功能有助於平衡負載、最佳化資源用量,或遵守特定節點角色和特徵。
schedulingconfig:
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule"
nodeaffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value
由於下列詳細資料,範例容許度可讓 Pod 在標示為控制層節點的節點上排程:
node-role.kubernetes.io/control-plane
汙點鍵表示節點有控制層節點。Exists
運算子表示容許度符合任何具有指定汙點鍵的汙點,不論值為何。NoSchedule
效果表示除非 Pod 具有相符的容許條件,否則不會排程到控制層節點上。
preferredDuringSchedulingIgnoredDuringExecution
節點親和性類型會指定節點親和性定義的規則為偏好設定,但排程時並非必要。如果偏好的節點無法使用,Pod 仍可能會排程至其他節點。1
權重值表示偏好程度較低。節點選取條件定義於 preference
區段。matchExpressions
區段包含用於比對節點的運算式陣列。another-node-label-key
鍵代表要比對的節點標籤鍵。In
運算子表示節點必須具有索引鍵,且該索引鍵的值為指定值之一。another-node-label-key
鍵必須具有 another-node-label-value
值。
範例節點親和性規則指出,系統應優先將 Pod 排定在具有 another-node-label-key
標籤和 another-node-label-value
值的節點上。偏好設定的強度較弱,因此並非必要條件。
這個範例結合了下列項目:
- 容許條件,可容許
NoSchedule
taint,讓 Pod 排程到控制層節點。 - 節點親和性偏好具有特定標籤的節點,但並非嚴格要求,因此排程具有彈性。