在 Azure Kubernetes Service (AKS) 中建立和管理叢集的多個節點集區 \(部分機器翻譯\)

在 Azure Kubernetes Service (AKS) 中,相同組態的節點會群組在一起成為節點集區。 這些節點集區包含用來執行應用程式的基礎 VM。 當您建立 AKS 叢集時,會定義初始節點數目及其大小 (SKU) ,這會建立 系統節點集區。 若要支援具有不同計算或儲存體需求的應用程式,您可以建立額外的 使用者節點集區。 系統節點集區是裝載重要系統 Pod 的主要用途,例如 CoreDNS 和通道。 使用者節點集區是裝載應用程式 Pod 的主要用途。 不過,如果您想要在 AKS 叢集中只有一個集區,則可以在系統節點集區上排程應用程式 Pod。 使用者節點集區是您放置應用程式特定 Pod 的位置。 例如,使用這些額外的使用者節點集區來為計算密集型應用程式提供 GPU,或存取高效能 SSD 儲存體。

注意

此功能讓您更準確控制如何建立和管理多個節點集區。 因此,建立/更新/刪除需要個別的命令。 先前透過或 az aks update 使用 managedCluster API 進行叢集作業 az aks create ,而且是變更控制平面和單一節點集區的唯一選項。 這項功能會透過 agentPool API 公開代理程式組件區的個別作業集,並需要使用 az aks nodepool 命令集在個別節點集區上執行作業。

本文說明如何在 AKS 叢集中建立和管理多個節點集區。

開始之前

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

限制

在建立和管理支援多個節點集區的 AKS 叢集時,需遵守下列限制:

  • 請參閱Azure Kubernetes Service (AKS) 中的配額、虛擬機器大小限制和區域可用性
  • 您可以刪除系統節點集區,前提是您有另一個系統節點集區可在 AKS 叢集中進行。
  • 系統集區必須至少包含一個節點,而且使用者節點集區可能包含零個或多個節點。
  • AKS 叢集必須使用標準 SKU 負載平衡器來使用多個節點集區,基本 SKU 負載平衡器不支援此功能。
  • AKS 叢集必須使用節點的虛擬機器擴展集。
  • 建立節點集區之後,您無法變更其 VM 大小。
  • 節點集區的名稱只能包含小寫英數位元,且開頭必須是小寫字母。 針對 Linux 節點集區,長度必須介於 1 到 12 個字元之間,對於 Windows 節點集區,長度必須介於 1 到 6 個字元之間。
  • 所有節點集區都必須位於相同的虛擬網路中。
  • 在叢集建立時建立多個節點集區時,節點集區所使用的所有 Kubernetes 版本都必須符合控制平面的版本設定。 使用每個節點集區作業布建叢集之後,即可更新此情況。

建立 AKS 叢集

重要

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

若要開始使用,請使用單一節點集區建立 AKS 叢集。 下列範例會使用az group create命令,在eastus區域中建立名為myResourceGroup的資源群組。 接著會使用az aks create命令建立名為myAKSCluster 的 AKS叢集。

注意

使用多個節點集區時,不支援基本負載平衡器 SKU。 根據預設,AKS 叢集會使用 Azure CLI的標準負載平衡器SKU 建立,並Azure 入口網站。

# Create a resource group in East US
az group create --name myResourceGroup --location eastus

# Create a basic single-node AKS cluster
az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --vm-set-type VirtualMachineScaleSets \
    --node-count 2 \
    --generate-ssh-keys \
    --load-balancer-sku standard

建立叢集需要幾分鐘的時間。

注意

為了確保叢集能夠可靠地運作,您應該在預設節點集區中執行至少 2 個 (兩個) 節點,因為基本系統服務正在此節點集區上執行。

當叢集準備就緒時,請使用 az aks get-credentials 命令來取得叢集認證,以搭配 kubectl 使用:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

新增節點集區

在上一個步驟中建立的叢集具有單一節點集區。 讓我們使用 az aks nodepool add 命令來 新增第二個節點集區。 下列範例會建立名為 mynodepool 的節點集區,該集區會執行 3 個節點:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-count 3

注意

節點集區的名稱必須以小寫字母開頭,而且只能包含英數位元。 針對 Linux 節點集區,長度必須介於 1 到 12 個字元之間,對於 Windows 節點集區,長度必須介於 1 到 6 個字元之間。

若要查看節點集區的狀態,請使用 az aks node pool list 命令並指定您的資源群組和叢集名稱:

az aks nodepool list --resource-group myResourceGroup --cluster-name myAKSCluster

下列範例輸出顯示已成功在節點集區中使用三個節點建立 mynodepool 。 在上一個步驟中建立 AKS 叢集時,會建立預設 nodepool1 ,其節點計數為 2

[
  {
    ...
    "count": 3,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

提示

如果您在新增節點集區時未指定任何 VmSize,則預設大小會針對Windows節點集區Standard_D2s_v3,而 Linux 節點集區Standard_DS2_v2。 如果未指定 OrchestratorVersion ,則會預設為與控制平面相同的版本。

新增具有唯一子網的節點集區, (預覽)

工作負載可能需要將叢集的節點分割成不同的集區,以進行邏輯隔離。 此隔離可支援叢集中每個節點集區專用的個別子網。 這可以解決需求,例如具有非連續虛擬網路位址空間,以跨節點集區分割。

限制

  • 指派給 nodepools 的所有子網都必須屬於相同的虛擬網路。
  • 系統 Pod 必須能夠存取叢集中的所有節點/Pod,以提供重要功能,例如 DNS 解析和通道 kubectl logs/exec/port-forward Proxy。
  • 如果您在建立叢集之後展開 VNET,則必須更新叢集 (執行任何受控叢集作業,但節點集區作業在原始 cidr 外部新增子網之前,不會計算) 。 雖然我們原本允許,但代理程式組件區上的 AKS 會立即發生錯誤。 如果您不知道如何協調叢集檔案的支援票證。
  • 不支援 Azure 網路原則。
  • Kube-proxy 是針對單一連續 CIDR 所設計,並根據該值優化規則。 使用多個非連續範圍時,這些優化無法發生。 如需詳細資訊,--cluster-cidrkube-proxy請參閱此K.E.P 和引數的檔。 在以 Azure CNI 設定的叢集中, kube-proxy 將會在叢集建立時使用第一個節點集區的子網進行設定。

若要建立具有專用子網的節點集區,請在建立節點集區時傳遞子網資源識別碼作為其他參數。

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-count 3 \
    --vnet-subnet-id <YOUR_SUBNET_RESOURCE_ID>

升級節點集區

注意

如果嘗試傳回錯誤,則無法同時在叢集或節點集區上升級和調整作業。 相反地,每個作業類型都必須在目標資源上完成,才能在該相同資源上的下一個要求。 如需詳細資訊,請參閱 我們的疑難排解指南

本節中的命令說明如何升級單一特定節點集區。 升級控制平面的 Kubernetes 版本與節點集區之間的關聯性,如下 一節所述。

注意

節點集區 OS 映射版本會系結至叢集的 Kubernetes 版本。 您只會在叢集升級之後取得 OS 映射升級。

由於此範例中有兩個節點集區,因此我們必須使用 az aks nodepool 升級來升級 節點集區。 若要查看可用的升級,請使用 az aks get-upgrades

az aks get-upgrades --resource-group myResourceGroup --name myAKSCluster

讓我們升級 mynodepool。 使用 az aks nodepool upgrade 命令來升級節點集區,如下列範例所示:

az aks nodepool upgrade \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --kubernetes-version KUBERNETES_VERSION \
    --no-wait

使用 az aks node pool list 命令再次列出節點集區的狀態。 下列範例顯示mynodepool處於升級狀態,KUBERNETES_VERSION:

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 3,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "KUBERNETES_VERSION",
    ...
    "provisioningState": "Upgrading",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

將節點升級至指定的版本需要幾分鐘的時間。

最佳做法是,您應該將 AKS 叢集中的所有節點集區升級為相同的 Kubernetes 版本。 的預設行為 az aks upgrade 是將所有節點集區與控制平面一起升級,以達成此對齊。 升級個別節點集區的能力可讓您在節點集區之間執行輪流升級和排程 Pod,以在上述條件約束內維護應用程式執行時間。

使用多個節點集區升級叢集控制平面

注意

Kubernetes 使用標準 語意版本設定版本設定 配置。 版本號碼會以 x.y.z表示,其中 x 是主要版本, y 是次要版本,而 z 是修補程式版本。 例如,在 1.12.6版中,1 是主要版本,12 是次要版本,而 6 是修補程式版本。 建立叢集期間會設定控制平面的 Kubernetes 版本和初始節點集區。 新增至叢集時,所有其他節點集區都會設定其 Kubernetes 版本。 Kubernetes 版本在節點集區之間,以及節點集區和控制平面之間可能會有所不同。

AKS 叢集有兩個與 Kubernetes 版本相關聯的叢集資源物件。

  1. 叢集控制平面 Kubernetes 版本。
  2. 具有 Kubernetes 版本的節點集區。

控制平面對應至一或多個節點集區。 升級作業的行為取決於使用哪個 Azure CLI 命令。

升級 AKS 控制平面需要使用 az aks upgrade 。 此命令會升級控制平面版本和叢集中的所有節點集區。

az aks upgrade發出具有旗標的 --control-plane-only 命令只會升級叢集控制平面。 叢集中的相關聯節點集區都不會變更。

升級個別節點集區需要使用 az aks nodepool upgrade 。 此命令只會升級具有指定 Kubernetes 版本的目標節點集區

升級的驗證規則

叢集控制平面和節點集區的有效 Kubernetes 升級會由下列規則集進行驗證。

  • 升級節點集區之有效版本的規則:

    • 節點集區版本必須與控制平面具有相同 的主要 版本。
    • 節點集區 次要 版本必須位於控制平面版本的兩個 次要 版本內。
    • 節點集區版本不能大於控制 major.minor.patch 版本。
  • 提交升級作業的規則:

    • 您無法降級控制平面或節點集區 Kubernetes 版本。
    • 如果未指定節點集區 Kubernetes 版本,行為取決於所使用的用戶端。 Resource Manager範本中的宣告會回復為節點集區定義的現有版本,如果未設定任何設定控制平面版本,則會切換回該版本。
    • 您可以在指定時間升級或調整控制平面或節點集區,無法在單一控制平面或節點集區資源上同時提交多個作業。

手動調整節點集區

當應用程式工作負載需求變更時,您可能需要調整節點集區中的節點數目。 節點數目可以相應增加或減少。

若要調整節點集區中的節點數目,請使用 az aks node pool scale 命令。 下列範例會將 mynodepool 中的節點數目調整為 5

az aks nodepool scale \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name mynodepool \
    --node-count 5 \
    --no-wait

使用 az aks node pool list 命令再次列出節點集區的狀態。 下列範例顯示 mynodepool 處於 縮放 狀態,且新的計數為 5 個節點:

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 5,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Scaling",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

調整作業需要幾分鐘的時間才能完成。

啟用叢集自動調整程式,自動調整特定節點集區

AKS 提供個別的功能,以使用稱為 叢集自動調整程式的功能來自動調整節點集區。 這項功能可以針對每個節點集區啟用,每個節點集區具有唯一的最小和最大縮放計數。 瞭解如何 使用每個節點集區的叢集自動調整程式

刪除節點集區

如果您不再需要集區,您可以將其刪除並移除基礎 VM 節點。 若要刪除節點集區,請使用 az aks node pool delete 命令並指定節點集區名稱。 下列範例會刪除在先前步驟中建立的 mynodepool

警告

當您刪除節點集區時,AKS 不會執行纜線和清空,而且刪除節點集區時可能會發生任何資料遺失的復原選項。 如果 Pod 無法在其他節點集區上排程,這些應用程式就會變成無法使用。 當使用中的應用程式沒有資料備份或能夠在叢集中的其他節點集區上執行時,請確定您不會刪除節點集區。 若要將目前正在節點集區上執行的重新排程 Pod 中斷降到最低,請先在節點集區中的所有節點上執行纜線並清空,再刪除。 如需詳細資訊,請參閱 cordon 和清空節點集區

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name mynodepool --no-wait

az aks node pool list 命令的下列範例輸出顯示 mynodepool 處於 [刪除] 狀態:

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 5,
    ...
    "name": "mynodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Deleting",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

刪除節點和節點集區需要幾分鐘的時間。

將容量保留群組與節點集區建立關聯 (預覽)

重要

AKS 預覽功能是以自助、加入宣告為基礎提供。 預覽提供「依原狀」和「可用」,而且會從服務等級協定和有限保固中排除。 AKS 預覽會以最佳方式由客戶支援部分涵蓋。 因此,這些功能不適合用于生產環境。 如需詳細資訊,請參閱下列支援文章:

當您的應用程式工作負載需求時,您可以將節點集區與先前建立的容量保留群組建立關聯。 這可確保為節點集區配置保證的容量。

如需容量保留群組的詳細資訊,請參閱 容量保留群組

您可以使用 az aks nodepool add 命令來建立節點集區與現有容量保留群組的關聯,並使用 --capacityReservationGroup 旗標指定容量保留群組」,容量保留群組應該已經存在,否則節點集區將會新增至叢集,但不會產生任何容量保留群組的關聯。

az aks nodepool add -g MyRG --cluster-name MyMC -n myAP --capacityReservationGroup myCRG

您可以使用 az aks create 命令,將系統節點集區與現有的容量保留群組建立關聯。 如果指定的容量保留群組不存在,則會發出警告,並建立叢集而不需要任何容量保留群組關聯。

az aks create -g MyRG --cluster-name MyMC --capacityReservationGroup myCRG

刪除節點集區命令會在刪除該節點集區之前,隱含地解除節點集區與任何相關聯的容量保留群組的關聯。

az aks nodepool delete -g MyRG --cluster-name MyMC -n myAP

刪除叢集命令會隱含地解除叢集中所有節點集區與其相關聯容量保留群組的關聯。

az aks delete -g MyRG --cluster-name MyMC

指定節點集區的 VM 大小

在先前建立節點集區的範例中,預設 VM 大小是用於叢集中建立的節點。 較常見的案例是讓您建立具有不同 VM 大小和功能的節點集區。 例如,您可以建立節點集區,其中包含具有大量 CPU 或記憶體的節點,或提供 GPU 支援的節點集區。 在下一個步驟中,您會 使用 taints 和 toleration 來 告知 Kubernetes 排程器如何限制在這些節點上執行的 Pod 存取。

在下列範例中,建立使用 STANDARD_NC6 VM 大小的 GPU 型節點集區。 這些 VM 是由 NVIDIA Tesla K80 卡所提供。 如需可用 VM 大小的資訊,請參閱 Azure 中 Linux 虛擬機器的大小

使用 az aks node pool add 命令再次建立節點集區 。 這次,請指定名稱 gpunodepool,並使用 --node-vm-size 參數來指定 Standard_NC6 大小:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name gpunodepool \
    --node-count 1 \
    --node-vm-size Standard_NC6 \
    --no-wait

az aks node pool list命令的下列範例輸出顯示gpunodepool是使用指定的VmSize建立節點:

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 1,
    ...
    "name": "gpunodepool",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Creating",
    ...
    "vmSize": "Standard_NC6",
    ...
  },
  {
    ...
    "count": 2,
    ...
    "name": "nodepool1",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Succeeded",
    ...
    "vmSize": "Standard_DS2_v2",
    ...
  }
]

成功建立 gpunodepool需要幾分鐘的時間。

指定節點集區的 Taint、標籤或標籤

建立節點集區時,您可以將 Taint、標籤或標籤新增至該節點集區。 當您新增 taint、label 或 tag 時,該節點集區內的所有節點也會取得該 taint、label 或 tag。

重要

應該使用 az aks nodepool 針對整個節點集區,將 taint、標籤或標籤新增至節點。 不建議使用 將 taint、標籤或標籤套用 kubectl 至節點集區中的個別節點。

設定 nodepool taints

若要使用 taint 建立節點集區,請使用 az aks nodepool add。 指定 名稱 taintnp ,並使用 --node-taints 參數來指定 taint 的 sku=gpu:NoSchedule

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name taintnp \
    --node-count 1 \
    --node-taints sku=gpu:NoSchedule \
    --no-wait

az aks nodepool list命令的下列範例輸出顯示taintnp是使用指定的nodeTaints建立節點:

az aks nodepool list -g myResourceGroup --cluster-name myAKSCluster
[
  {
    ...
    "count": 1,
    ...
    "name": "taintnp",
    "orchestratorVersion": "1.15.7",
    ...
    "provisioningState": "Creating",
    ...
    "nodeTaints":  [
      "sku=gpu:NoSchedule"
    ],
    ...
  },
 ...
]

在 Kubernetes 中可看見擷取資訊,以處理節點的排程規則。 Kubernetes 排程器可以使用污點和容差來限制可以在節點上執行的工作負載。

  • 污點會套用至節點,該節點指示僅可以在其上排程特定的 pod。
  • 然後容差會套用至容器,允許它們容許節點的污點。

如需如何使用進階 Kubernetes 排程功能的詳細資訊,請參閱 AKS 中進階排程器功能的最佳做法

在上一個步驟中,您在建立節點集區時套用 sku=gpu:NoSchedule 污點。 下列基本範例 YAML 資訊清單使用容忍,以允許 Kubernetes 排程器在該節點集區的節點上執行 NGINX Pod。

建立名為 nginx-toleration.yaml 的檔案,然後將下列範例 YAML 複製進來:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - image: mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine
    name: mypod
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 1
        memory: 2G
  tolerations:
  - key: "sku"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

使用 kubectl apply -f nginx-toleration.yaml 命令排程 Pod:

kubectl apply -f nginx-toleration.yaml

排程 Pod 並提取 NGINX 映射需要幾秒鐘的時間。 使用 kubectl 描述 Pod 命令來檢視 Pod 狀態。 下列壓縮的範例輸出顯示已套用 sku=gpu:NoSchedule toleration。 在 [事件] 區段中,排程器已將 Pod 指派給 aks-taintnp-28993262-vmss0000000 節點

kubectl describe pod mypod
[...]
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
                 sku=gpu:NoSchedule
Events:
  Type    Reason     Age    From                Message
  ----    ------     ----   ----                -------
  Normal  Scheduled  4m48s  default-scheduler   Successfully assigned default/mypod to aks-taintnp-28993262-vmss000000
  Normal  Pulling    4m47s  kubelet             pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
  Normal  Pulled     4m43s  kubelet             Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.9-alpine"
  Normal  Created    4m40s  kubelet             Created container
  Normal  Started    4m40s  kubelet             Started container

只有套用此容忍的 Pod 可以在 taintnp中的節點上排程。 任何其他 Pod 都會排程在 nodepool1 節點集區中。 如果您建立其他節點集區,您可以使用額外的 Taint 和 Toleration 來限制這些節點資源上可排程的 Pod。

設定 nodepool 標籤

如需搭配節點集區使用標籤的詳細資訊,請參閱在Azure Kubernetes Service (AKS) 叢集中使用標籤

設定 nodepool Azure 標籤

如需搭配節點集區使用 Azure 標籤的詳細資訊,請參閱在 AKS Azure Kubernetes Service () 中使用 Azure 標籤

新增已啟用 FIPS 的節點集區

聯邦資訊處理標準 (FIPS) 140-2 是美國政府標準,可定義資訊技術產品和系統中密碼編譯模組的最低安全性需求。 AKS 可讓您建立已啟用 FIPS 140-2 的 Linux 節點集區。 在已啟用 FIPS 的節點集區上執行的部署可以使用這些密碼編譯模組來提供更高的安全性,並協助符合 FedRAMP 合規性的安全性控制。 如需 FIPS 140-2 的詳細資訊,請參閱美國聯邦 資訊處理標準 (FIPS) 140-2

先決條件

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

已啟用 FIPS 的節點集區有下列限制:

  • 目前,您只能在 Ubuntu 18.04 上執行已啟用 FIPS 的 Linux 節點集區。
  • 已啟用 FIPS 的節點集區需要 Kubernetes 1.19 版和更新版本。
  • 若要更新 FIPS 所使用的基礎套件或模組,您必須使用 節點映射升級
  • FIPS 節點上的容器映射尚未評估 FIPS 合規性。

重要

啟用 FIPS 的 Linux 映射與用於 Linux 節點集區的預設 Linux 映射不同。 若要在節點集區上啟用 FIPS,您必須建立新的以 Linux 為基礎的節點集區。 您無法在現有的節點集區上啟用 FIPS。

啟用 FIPS 的節點映射可能會有不同的版本號碼,例如核心版本,而不是未啟用 FIPS 的映射。 此外,啟用 FIPS 的節點集區和節點映射的更新週期可能與未啟用 FIPS 的節點集區和映射不同。

若要建立已啟用 FIPS 的節點集區,請在建立節點集區時,使用 az aks nodepool add 搭配 --enable-fips-image 參數。

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name fipsnp \
    --enable-fips-image

注意

您也可以在建立叢集以在預設節點集區上啟用 FIPS 時,搭配az aks create使用--enable-fips-image參數。 以這種方式將節點集區新增至建立的叢集時,您仍然必須在新增節點集區以建立已啟用 FIPS 的節點集區時,使用 --enable-fips-image 參數。

若要確認節點集區已啟用 FIPS,請使用az aks show來檢查agentPoolProfiles中的enableFIPS值。

az aks show --resource-group myResourceGroup --cluster-name myAKSCluster --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" -o table

下列範例輸出顯示 fipsnp 節點集區已啟用 FIPS,且 nodepool1 未啟用。

Name       enableFips
---------  ------------
fipsnp     True
nodepool1  False  

您也可以在已啟用 FIPS 的節點集區中,使用 kubectl debug 來確認部署可以存取 FIPS 密碼編譯程式庫。 用來 kubectl get nodes 列出節點:

$ kubectl get nodes
NAME                                STATUS   ROLES   AGE     VERSION
aks-fipsnp-12345678-vmss000000      Ready    agent   6m4s    v1.19.9
aks-fipsnp-12345678-vmss000001      Ready    agent   5m21s   v1.19.9
aks-fipsnp-12345678-vmss000002      Ready    agent   6m8s    v1.19.9
aks-nodepool1-12345678-vmss000000   Ready    agent   34m     v1.19.9

在上述範例中,開頭 aks-fipsnp 為 的節點是已啟用 FIPS 的節點集區的一部分。 使用 kubectl debug 在已啟用 FIPS 的節點集區中,于其中一個節點上執行具有互動式會話的部署。

kubectl debug node/aks-fipsnp-12345678-vmss000000 -it --image=mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11

您可以從互動式會話確認 FIPS 密碼編譯程式庫已啟用:

root@aks-fipsnp-12345678-vmss000000:/# cat /proc/sys/crypto/fips_enabled
1

啟用 FIPS 的節點集區也有 kubernetes.azure.com/fips_enabled=true 標籤,可供部署以這些節點集區為目標。

使用Resource Manager範本管理節點集區

當您使用 Azure Resource Manager 範本來建立和管理資源時,您通常可以更新範本中的設定,並重新部署以更新資源。 使用 AKS 中的節點集區時,一旦建立 AKS 叢集之後,就無法更新初始節點集區設定檔。 此行為表示您無法更新現有的Resource Manager範本、變更節點集區,以及重新部署。 相反地,您必須建立個別Resource Manager範本,只更新現有 AKS 叢集的節點集區。

建立範本,例如 aks-agentpools.json 並貼上下列範例資訊清單。 此範例範本會設定下列設定:

  • 更新名為myagentpoolLinux節點集區,以執行三個節點。
  • 設定節點集區中的節點,以執行 Kubernetes 1.15.7 版
  • 將節點大小定義為 Standard_DS2_v2

視需要更新、新增或刪除節點集區,請編輯這些值:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "clusterName": {
            "type": "string",
            "metadata": {
                "description": "The name of your existing AKS cluster."
            }
        },
        "location": {
            "type": "string",
            "metadata": {
                "description": "The location of your existing AKS cluster."
            }
        },
        "agentPoolName": {
            "type": "string",
            "defaultValue": "myagentpool",
            "metadata": {
                "description": "The name of the agent pool to create or update."
            }
        },
        "vnetSubnetId": {
            "type": "string",
            "defaultValue": "",
            "metadata": {
                "description": "The Vnet subnet resource ID for your existing AKS cluster."
            }
        }
    },
    "variables": {
        "apiVersion": {
            "aks": "2020-01-01"
        },
        "agentPoolProfiles": {
            "maxPods": 30,
            "osDiskSizeGB": 0,
            "agentCount": 3,
            "agentVmSize": "Standard_DS2_v2",
            "osType": "Linux",
            "vnetSubnetId": "[parameters('vnetSubnetId')]"
        }
    },
    "resources": [
        {
            "apiVersion": "2020-01-01",
            "type": "Microsoft.ContainerService/managedClusters/agentPools",
            "name": "[concat(parameters('clusterName'),'/', parameters('agentPoolName'))]",
            "location": "[parameters('location')]",
            "properties": {
                "maxPods": "[variables('agentPoolProfiles').maxPods]",
                "osDiskSizeGB": "[variables('agentPoolProfiles').osDiskSizeGB]",
                "count": "[variables('agentPoolProfiles').agentCount]",
                "vmSize": "[variables('agentPoolProfiles').agentVmSize]",
                "osType": "[variables('agentPoolProfiles').osType]",
                "storageProfile": "ManagedDisks",
                "type": "VirtualMachineScaleSets",
                "vnetSubnetID": "[variables('agentPoolProfiles').vnetSubnetId]",
                "orchestratorVersion": "1.15.7"
            }
        }
    ]
}

使用 az deployment group create 命令部署此範本,如下列範例所示。 系統會提示您輸入現有的 AKS 叢集名稱和位置:

az deployment group create \
    --resource-group myResourceGroup \
    --template-file aks-agentpools.json

提示

您可以在範本中新增 tag 屬性,將卷 新增至節點集區,如下列範例所示。

...
"resources": [
{
  ...
  "properties": {
    ...
    "tags": {
      "name1": "val1"
    },
    ...
  }
}
...

視您在Resource Manager範本中定義的節點集區設定和作業而定,可能需要幾分鐘的時間更新 AKS 叢集。

為您的節點集區指派每個節點的公用 IP

AKS 節點不需要自己的公用 IP 位址來進行通訊。 不過,案例可能需要節點集區中的節點接收自己的專用公用 IP 位址。 常見的案例是遊戲工作負載,其中主控台需要直接連線到雲端虛擬機器,以將躍點降到最低。 您可以使用節點公用 IP 在 AKS 上達成此案例。

首先,建立新的資源群組。

az group create --name myResourceGroup2 --location eastus

建立新的 AKS 叢集,並連結節點的公用 IP。 節點集區中的每個節點都會接收唯一的公用 IP。 您可以查看虛擬機器擴展集實例來確認這一點。

az aks create -g MyResourceGroup2 -n MyManagedCluster -l eastus  --enable-node-public-ip

針對現有的 AKS 叢集,您也可以新增節點集區,並為節點附加公用 IP。

az aks nodepool add -g MyResourceGroup2 --cluster-name MyManagedCluster -n nodepool2 --enable-node-public-ip

使用公用 IP 首碼

使用公用 IP 前置詞有許多優點。 AKS 支援在建立新的叢集或新增節點集區時,使用旗標 node-public-ip-prefix 傳遞資源識別碼,以使用節點現有公用 IP 前置詞中的位址。

首先,使用 az network public-ip prefix create 建立公用 IP 首碼

az network public-ip prefix create --length 28 --location eastus --name MyPublicIPPrefix --resource-group MyResourceGroup3

檢視輸出,並記下 id 前置詞的 :

{
  ...
  "id": "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix",
  ...
}

最後,建立新的叢集或新增節點集區時,請使用 旗標 node-public-ip-prefix 並傳入前置詞的資源識別碼:

az aks create -g MyResourceGroup3 -n MyManagedCluster -l eastus --enable-node-public-ip --node-public-ip-prefix /subscriptions/<subscription-id>/resourcegroups/MyResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix

尋找節點的公用 IP

您可以透過各種方式找出節點的公用 IP:

重要

節點資源群組包含節點及其公用 IP。 執行命令以尋找節點的公用 IP 時,請使用節點資源群組。

az vmss list-instance-public-ips -g MC_MyResourceGroup2_MyManagedCluster_eastus -n YourVirtualMachineScaleSetName

清除資源

在本文中,您已建立包含 GPU 型節點的 AKS 叢集。 若要降低不必要的成本,建議您刪除 gpunodepool或整個 AKS 叢集。

若要刪除 GPU 型節點集區,請使用 az aks nodepool delete 命令,如下列範例所示:

az aks nodepool delete -g myResourceGroup --cluster-name myAKSCluster --name gpunodepool

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

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

您也可以刪除針對節點集區案例的公用 IP 建立的其他叢集。

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

後續步驟

深入瞭解 系統節點集區

在本文中,您已瞭解如何在 AKS 叢集中建立和管理多個節點集區。 如需如何控制節點集區間 Pod 的詳細資訊,請參閱 AKS 中進階排程器功能的最佳做法

若要建立和使用 Windows Server 容器節點集區,請參閱在 AKS 中建立Windows伺服器容器

使用 鄰近放置群組 來減少 AKS 應用程式的延遲。