本頁面提供 Google Distributed Cloud 的汙點和容許度總覽。當您排定工作負載以部署在叢集上時,節點 taint 可協助您控制工作負載能在哪些節點上執行。
總覽
將工作負載提交至叢集執行時,排程器會決定要將與工作負載相關聯的 Pod 放置在何處。排程器可將 Pod 放置在任何滿足 Pod CPU、記憶體和自訂資源需求的節點上。
如果您的叢集會執行各種工作負載,您可能會想要控制哪些工作負載可在特定的節點集區執行。
節點 taint 可讓您標示節點,避免或禁止排程器在特定 Pod 使用此節點。您可以使用互補功能「容許條件」,指定可在「taint」節點上使用的 Pod。
taint 和容許條件會搭配運作,確保 Pod 不會排程到不合適的節點上。
汙點是與「效果」相關聯的「鍵/值組合」。下表列出可用的效果:
效果 | 說明 |
---|---|
NoSchedule |
系統不會把無法容許此 taint 的 Pod 排程到節點上,也不會將現有的 Pod 自節點中移除。 |
PreferNoSchedule |
Kubernetes 會避免將無法容許此 taint 的 Pod 排程到節點上。 |
NoExecute |
如果 Pod 已在節點運作,就會從節點中剔除;如果尚未在節點運作,則不會排定於節點運作。 |
在 Google Distributed Cloud 中設定節點汙點的優點
雖然您可以使用 kubectl taint
指令設定節點汙點,但使用 gkectl
或 Google Cloud 主控台設定節點汙點,相較於 kubectl
具有下列優點:
- 重新啟動或替換節點時,系統會保留 taint。
- 節點新增至節點集區時,系統會自動建立汙點。
- 使用
gkectl
新增汙點時,系統會在叢集自動調度資源期間自動建立汙點。(目前無法為在Google Cloud 控制台中建立的節點集區啟用自動調度資源功能)。
設定節點 taint
您可以在建立使用者叢集時,或在叢集建立後,設定節點集區中的節點汙染。本節說明如何將汙點新增至已建立的叢集,但建立新叢集時的程序類似。
您可以新增節點集區並設定汙點,也可以更新現有節點集區並設定汙點。新增其他節點集區前,請先確認叢集有足夠的可用 IP 位址。
如果您在 Google Cloud 控制台中建立叢集,可以使用Google Cloud 控制台新增或更新節點集區。
在新節點集區中設定汙點
控制台
在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。
選取使用者叢集所在的 Google Cloud 專案。
在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」。
按一下
「Add node pool」(新增節點集區)。設定節點集區:
- 輸入「節點集區名稱」。
- 輸入集區中每個節點的 vCPUs 數量 (每個使用者叢集工作站至少須有 4 個)。
- 輸入集區中每個節點的記憶體大小 (以 MiB 為單位,每個使用者叢集工作站節點至少須有 8192 MiB,且必須為 4 的倍數)。
- 在「副本」欄位中,輸入集區中的節點數量 (最少 3 個)。
選取「OS image type」(作業系統映像檔類型):Ubuntu Containerd 或 COS。
以 GiB 為單位輸入開機磁碟大小 (預設為 40 GiB)。
在「節點集區中繼資料 (選用)」部分,按一下「+ 新增 Taint」。 輸入汙染的「鍵」、「值」和「效果」。視需要重複執行這個步驟。
(選用) 按一下「+ Add Kubernetes Labels」(新增 Kubernetes 標籤)。輸入標籤的「Key」(鍵) 和「Value」(值)。視需要重複上述步驟。
點選「建立」。
Google Cloud 控制台會顯示「叢集狀態:變更進度」。按一下「顯示詳細資料」,即可查看資源狀態條件和狀態訊息。
指令列
-
您必須指定下列欄位:
nodePools.[i].name
nodePools[i].cpus
nodePools.[i].memoryMB
nodePools.[i].replicas
以下欄位為選填項目。如未加入
nodePools[i].bootDiskSizeGB
或nodePools[i].osImageType
, 系統會使用預設值。 填寫「
nodePools[i].taints
」部分。例如:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
視需要填寫下列部分:
nodePools[i].labels
nodePools[i].bootDiskSizeGB
nodePools[i].osImageType
nodePools[i].vsphere.datastore
nodePools[i].vsphere.tags
執行下列指令:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
更改下列內容:
[ADMIN_CLUSTER_KUBECONFIG]
,並提供管理員叢集的 kubeconfig 檔案路徑。[USER_CLUSTER_CONFIG]
,並提供使用者叢集設定檔的路徑。
在現有節點集區中設定汙點
控制台
在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。
選取使用者叢集所在的 Google Cloud 專案。
在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」。
按一下「Nodes」(節點) 分頁標籤。
按一下要修改的節點集區名稱。
按一下「節點集區中繼資料 (選用)」部分旁的「編輯」
,然後按一下「+ 新增汙點」。 輸入汙染的「鍵」、「值」和「效果」。視需要重複執行這個步驟。按一下 [完成]。
按一下
即可返回上一頁。Google Cloud 控制台會顯示「叢集狀態:變更進度」。按一下「顯示詳細資料」,即可查看資源狀態條件和狀態訊息。
指令列
填入
nodePools[i].taints
例如:nodePools: - name: "my-node-pool" taints: - key: "staging" value: "true" effect: "NoSchedule"
執行下列指令:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
更改下列內容:
[ADMIN_CLUSTER_KUBECONFIG]
,並提供管理員叢集的 kubeconfig 檔案路徑。[USER_CLUSTER_CONFIG]
,並提供使用者叢集設定檔的路徑。
設定 Pod 容許汙點
您可以在 Pod 的規格中加入 tolerations
欄位,將 Pod 設定為容許汙點。在下列範例中,Pod 可排入具有 dedicated=experimental:NoSchedule
汙染的節點:
tolerations:
- key: dedicated
operator: Equal
value: experimental
effect: NoSchedule
如需其他範例,請參閱「Taints and Tolerations」。