管理多集區 Kubernetes 叢集上的 pod

已完成

Contoso 開發人員正致力於將內部開發的 Windows 和 Linux 應用程式轉換成以 Docker 為基礎的映射,並使用 Helm 圖來部署。 在您規劃在 Azure Stack HCI 上執行 Kubernetes 叢集時,您必須確保同時支援這兩種作業系統平臺。

Kubernetes 叢集中的節點集區位於 Azure Stack HCI

Azure Stack HCI 上的 AKS 支援相同 Kubernetes 叢集中的多個節點集區。 每個集區都是根據您在布建該集區時所指定的設定,由相同設定的 VM 所組成。

藉由將節點群組至不同的集區,您可以將 pod 部署的目標設定為適合的一組 VM。 例如,您可能只有 Windows 作業系統支援的容器化工作負載,或需要特殊硬體,例如:圖形處理器單位。

在 Azure Stack HCI 上將 pod 的部署控制到 Kubernetes 叢集中的節點集區

根據預設,Kubernetes 會排程在任何可用的背景工作節點上布建容器化工作負載,以優化資源的使用方式。 若要變更此行為,您可以根據您指定的自訂準則,在選擇的節點上套用條件約束。 這些條件約束包括節點選取器和污點和容許處。

節點選取器

節點選取器是在以 YAML 為基礎的 pod 定義內的設定,或是用來識別可排定對應 pod 之目標節點的部署。 如果您想要根據其作業系統指定目標節點,則可以依賴 Kubernetes 自動指派給節點的內建標籤。 視預定的作業系統而定,節點選取器會採用格式 kubernetes.io/os = Windowskubernetes.io/os = Linux。 例如,下列 YAML 為基礎的 pod 資訊清單會將 Linux 節點指定為部署目標:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
  nodeSelector:
    kubernetes.io/os = Linux

汙點和容許處

污點和容許處提供控制 pod 放置的替代方法。 使用此方法時,污點是節點設定的一部分,而容許處是 pod 規格的一部分。 藉由標示汙點在節點,您可以有效地防止它裝載任何 pod,而不需要對應的標點容許處。

例如,在 Azure Stack HCI 的 AKS 中,如果您想要允許在 Windows 節點上排程 pod,則應該將下列容許處新增至其定義:

tolerations:
- key: node.kubernetes.io/os
  operator: Equal
  value: Windows
  effect: NoSchedule

此外,您還需要將污點新增 node.kubernetes.io/os=Windows:NoSchedule 至每個您想要專門用來部署具有對應 容許處之 pod 的 Windows 節點。 若要完成此動作,您可以使用 kubectl 命令列公用程式,然後在連接到目標叢集之後,針對範圍 (中的每個節點執行下列命令,其中預留位置會 <node_name> 指定目標節點的名稱) :

kubectl taint node <node_name> node.kubernetes.io/os=Windows:NoSchedule

注意

節點選取器會強制將 pod 放置在一組特定的節點上。 容許處可讓 pod 在一組指定的汙點節點上執行,但不會防止它們放置在沒有污點的節點上。

知識檢查

1.

Contoso 打算將 Windows 和 Linux 容器化工作負載部署到 Azure Stack HCI 上的 AKS。 您必須記錄程式,以確保以 Windows 為基礎的 pod 已部署至執行 Windows 的 Kubernetes 叢集節點。 您決定基於此目的使用污點和容許處。 您應該將污點套用至哪個叢集元件?