本頁面提供 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」。