共用方式為


在 Azure Kubernetes Service (AKS) 中管理系統節點集區 (部分機器翻譯)

在 Azure Kubernetes Service (AKS) 中,具有相同設定的節點會共同組成節點集區。 節點集區包含執行應用程式的基礎 VM。 系統節點集區和使用者節點集區為兩種不同的 AKS 叢集節點集區模式。 系統節點集區主要用來託管 CoreDNSmetrics-server 等關鍵的系統 Pod。 使用者節點集區主要用來託管您的應用程式 Pod。 但是,如果您希望 AKS 叢集中只有一個集區,則可在系統節點集區上排定應用程式 Pod。 每個 AKS 叢集都必須包含至少一個具有兩個節點的系統節點集區。

重要

如果您在生產環境中執行 AKS 叢集的單一系統節點集區,建議您針對該節點集區使用至少三個節點。

本文說明如何在 AKS 中管理系統節點集區。 如需如何使用多個節點集區的相關資訊,請參閱使用多個節點集區

開始之前

您需要安裝 Azure CLI 2.3.1 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

限制

建立及管理支援系統節點集區的 AKS 叢集時,適用下列限制。

  • 請參閱 AKS 中的配額、VM 大小限制和區域可用性
  • 您必須使用 API 版本 2020-03-01 或更新版本才能設定節點集區模式。 在早於 2020-03-01 的 API 版本上所建立的叢集僅包含使用者節點集區,但您可以按照更新集區模式步驟將其移轉,以包含系統節點集區。
  • 節點集區的名稱只能包含小寫英數字元,且開頭必須為小寫字母。 如果是 Linux 節點集區,長度必須介於 1 到 12 個字元之間。 針對 Windows 節點集區,長度必須介於一與六個字元之間。
  • 使用 ARM 範本或直接 API 呼叫時,節點集區模式為必要的屬性且必須明確設定。

系統和使用者節點集區

如果是系統節點集區,AKS 會自動將標籤 kubernetes.azure.com/mode: system 指派給其節點。 這會使 AKS 更傾向在包含此標籤的節點集區上排定系統 Pod。 此標籤不會防止您在系統節點集區上排程應用程式 Pod。 不過,建議您將關鍵系統 Pod 與應用程式 Pod 隔離,以防止設定錯誤或惡意的應用程式 Pod 意外刪除系統 Pod。

您可以建立專用系統節點集區來強制執行此行為。 使用 CriticalAddonsOnly=true:NoSchedule 污點,可防止在系統節點集區上排定應用程式 Pod。

系統節點集區具有下列限制:

  • 系統節點集區至少必須支援 30 個 Pod,如 Pod 的最小值和最大值公式所述。
  • 系統集區的 osType 必須為 Linux。
  • 使用者節點集區的 osType 可為 Linux 或 Windows。
  • 系統集區必須至少包含兩個節點,而且用戶節點集區可能包含零個或多個節點。
  • 系統節點集區需要至少 4 個 vCPU 和 4GB 記憶體的 VM SKU。
  • 系統節點集區不支援 B 系列 VM
  • 建議至少使用 8 個 vCPU 的三個節點或至少 16 個 vCPU 的兩個節點(例如,Standard_DS4_v2),特別是針對大型叢集(多個 CoreDNS Pod 複本、3-4+ 附加元件等等)。
  • 現成節點集區需要使用者節點集區。
  • 新增另一個系統節點集區或變更作為系統節點集區的節點集區時,「不會」自動移動系統 Pod。 即使將節點集區變更為使用者集區,系統 Pod 還是可以繼續在同一節點集區上執行。 如果刪除或縮減執行系統 Pod 的節點集區 (先前為系統節點集區),則這些系統 Pod 將會透過偏好的排程重新部署至新的系統節點集區。

您可以透過節點集區執行下列作業:

  • 建立專用系統節點集區 (傾向將系統 Pod 排定至 mode:system 的節點集區)
  • 將系統節點集區變更為使用者節點集區,前提是您有其他系統節點集區可以取代其在 AKS 叢集中的位置。
  • 將使用者節點集區變更為系統節點集區。
  • 刪除使用者節點集區。
  • 您可以刪除系統節點集區,前提是您有其他系統節點集區可以取代其在 AKS 叢集中的位置。
  • AKS 叢集可以包含多個系統節點集區,且至少要有一個系統節點集區。
  • 如果您要變更現有節點集區上各種不可變的設定,您可以建立新的節點集區來取代這些集區。 舉例來說,您可以使用新的 maxPods 設定新增節點集區,然後刪除舊的節點集區。
  • 使用節點親和性需要偏好,以根據節點標籤來排程節點。 您可以將 key 設定為 kubernetes.azure.com、將 operator 設定為 In,並使用 kubectl apply -f yourYAML.yaml 套用此定義以將 usersystemvalues 設定為您的 YAML。

使用系統節點集區建立新的 AKS 叢集。

當您建立新的 AKS 叢集時,初始節點集區預設為 類型的 system模式。 使用 az aks nodepool add 建立新的節點集區時,除非明確指定模式參數,否則這些節點集區將為使用者節點集區。

下列範例會在 eastus 地區建立名為 myResourceGroup 的資源群組。

az group create --name myResourceGroup --location eastus

使用 az aks create 命令來建立 AKS 叢集。 下列範例會建立名為 myAKSCluster 的叢集,其中一個專用系統集區包含兩個節點。 針對生產工作負載,請確保您使用至少有三個節點的系統節點集區。 此作業可能需要幾分鐘的時間才能完成。

# Create a new AKS cluster with a single system pool
az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 2 --generate-ssh-keys

將專用系統節點集區新增到現有 AKS 叢集

您可以將一或多個系統節點集區新增到現有 AKS 叢集。 建議您在使用者節點集區上排定應用程式 Pod,然後僅針對關鍵的系統 Pod 使用系統節點集區。 這可防止惡意應用程式 Pod 意外刪除系統 Pod。 使用 CriticalAddonsOnly=true:NoSchedule污點為您的系統節點集區強制執行此行為。

下列命令會新增 System 類型模式的專用節點集區,且其預設計數為三個節點。

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name systempool \
    --node-count 3 \
    --node-taints CriticalAddonsOnly=true:NoSchedule \
    --mode System

顯示節點集區的詳細資料

您可以使用下列命令來查看節點集區的詳細資料。

az aks nodepool show --resource-group myResourceGroup --cluster-name myAKSCluster --name systempool

系統已針對系統節點集區定義 System 類型模式,並針對使用者節點集區定義 User 類型模式。 對於系統集區,請確認污點是否已設為 CriticalAddonsOnly=true:NoSchedule,這將可防止在此節點集區上排定應用程式 Pod 。

{
  "agentPoolType": "VirtualMachineScaleSets",
  "availabilityZones": null,
  "count": 3,
  "enableAutoScaling": null,
  "enableNodePublicIp": false,
  "id": "/subscriptions/yourSubscriptionId/resourcegroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/agentPools/systempool",
  "maxCount": null,
  "maxPods": 110,
  "minCount": null,
  "mode": "System",
  "name": "systempool",
  "nodeImageVersion": "AKSUbuntu-1604-2020.06.30",
  "nodeLabels": {},
  "nodeTaints": [
    "CriticalAddonsOnly=true:NoSchedule"
  ],
  "orchestratorVersion": "1.16.10",
  "osDiskSizeGb": 128,
  "osType": "Linux",
  "provisioningState": "Succeeded",
  "proximityPlacementGroupId": null,
  "resourceGroup": "myResourceGroup",
  "scaleSetEvictionPolicy": null,
  "scaleSetPriority": null,
  "spotMaxPrice": null,
  "tags": null,
  "type": "Microsoft.ContainerService/managedClusters/agentPools",
  "upgradeSettings": {
    "maxSurge": null
  },
  "vmSize": "Standard_DS2_v2",
  "vnetSubnetId": null
}

更新現有叢集系統和使用者節點集區

注意

您必須使用 API 版本 2020-03-01 或更新版本才能設定系統節點集區模式。 因此,在早於 2020-03-01 的 API 版本上所建立的叢集僅包含使用者節點集區。 若要獲得系統節點集區功能和較舊叢集的優點,請在最新的 Azure CLI 版本上使用下列命令來更新現有節點集區的模式。

您可以變更系統和使用者節點集區的模式。 只有當 AKS 叢集上已存在其他系統節點集區時,您才能將系統節點集區變更為使用者節點集區。

此命令可將系統節點集區變更為使用者節點集區。

az aks nodepool update --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --mode user

此命令可將使用者節點集區變更為系統節點集區。

az aks nodepool update --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --mode system

刪除系統節點集區

注意

若要在 API 版本 2020-03-02 之前的 AKS 叢集上使用系統節點集區,請新增系統節點集區,然後刪除原始的預設節點集區。

您的 AKS 叢集必須包含至少兩個系統節點集區,您才能刪除其中一個節點集區。

az aks nodepool delete --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool

清除資源

若要刪除叢集,請使用 az group delete 命令來刪除 AKS 資源群組:

az group delete --name myResourceGroup --yes --no-wait

下一步

在本文中,您已學會如何在 AKS 叢集中建立及管理系統節點集區。 如需如何啟動和停止 AKS 節點集區的相關資訊,請參閱啟動和停止 AKS 節點集區