相关文章推荐

建立 AKS 叢集的過程中,可能需要自訂叢集設定來配合您的需求。 本文會介紹幾種可用來自訂 AKS 叢集的選項。

OS 設定

AKS 支援 Ubuntu 22.04 作為 Kubernetes 1.25 和更新版本的叢集唯一節點作業系統 (作業系統) 。 您也可以在建立 Kubernetes 1.24 版和以下版本的 Nodepool 時指定 Ubuntu 18.04。

AKS 支援 Windows Server 2022 作為 Windows 節點集區的預設作業系統 (作業系統) ,且具有 Kubernetes 1.25 和更新版本。 您也可以在建立 Kubernetes 1.32 版和以下版本的 Nodepool 時指定 Windows Server 2019。 Windows Server 2019 在 Kubernetes 1.32 版達到生命週期結束 (EOL) 之後即將淘汰,未來版本不支援。 如需此淘汰的詳細資訊,請參閱 AKS 版本資訊

容器執行階段設定

容器執行階段是在節點上執行容器和管理容器映像的軟體。 執行階段可協助去除系統呼叫或作業系統 (OS) 特定功能的抽象化,以在 Linux 或 Windows 上執行容器。 針對 Linux 節點集區, containerd 會在 Kubernetes 1.19 版和更新版本上使用。 針對 Windows Server 2019 和 2022 節點集區, containerd 已正式推出,而且是 Kubernetes 1.23 版和更新版本的唯一執行時間選項。 Docker 即將淘汰,自 2023 年 5 月起不支援。 如需此淘汰的詳細資訊,請參閱 AKS 版本資訊

Containerd 是遵循 OCI (開放式容器方案) 的核心容器執行階段,可提供執行容器和管理節點上映像的最低必要功能集。 Containerd 已于 2017 年 3 月 (至 CLOUD Native Compute Foundation) 。 AKS 所使用的目前 Moby (上游 Docker) 版本建置在 之上 containerd

containerd 有了以 節點和節點集區為基礎的節點集區, dockershim kubelet 會直接與 containerd 使用 CRI (容器執行時間介面) 外掛程式交談,移除與 Docker CRI 實作相較之下資料流程的額外躍點。 因此,您會看到較佳的 Pod 啟動延遲,以及較少的資源 (CPU 和記憶體) 使用量。

透過針對 AKS 節點使用 containerd ,將可改善 Pod 啟動延遲,並減少容器執行階段的節點資源耗用量。 透過這個新架構的這些改善,可讓 kubelet 透過 CRI 外掛程式直接與 containerd 通訊。 在 Moby/docker 架構中,kubelet 會在到達 containerd 之前與 dockershim 和 docker 引擎通訊,因此資料流程中有額外的躍點。

Containerd 適用于 AKS 中的每個 GA 版 Kubernetes,以及 v1.19 以上每個較新的 Kubernetes 版本,並支援所有 Kubernetes 和 AKS 功能。

在 Kubernetes v1.19 或更新版本上建立的 Linux 節點集區叢集,其容器執行階段預設為 containerd 。 舊版支援 Kubernetes 上具有節點集區的叢集會為其容器執行階段接收 Docker。 一旦節點集區 Kubernetes 版本更新為支援 containerd 的版本,Linux 節點集區就會更新為 containerd

containerd Windows Server 2019 和 2022 節點集區已正式推出,而且是 Kubernetes 1.23 和更新版本中唯一的容器執行時間選項。 您可以在 1.23 之前的版本中繼續使用 Docker 節點集區和叢集,但自 2023 年 5 月起不再支援 Docker。 如需詳細資訊,請參閱 使用 containerd 新增 Windows 伺服器節點集區

強烈建議您先使用 containerd 測試 AKS 節點集區上的叢集,再針對節點集區使用叢集搭配支援 containerd 的 Kubernetes 版本。

Containerd 限制/差異

  • 針對 containerd ,我們建議使用 crictl 作為取代 CLI,而不是 Docker CLI,以針對 Kubernetes 節點上的 Pod、容器和容器映射 進行疑難排解 。 如需 的詳細資訊 crictl ,請參閱 一般用法 用戶端組態選項

  • Containerd 不提供 Docker CLI 的完整功能。 它僅適用于疑難排解。
  • crictl 提供更方便使用的 Kubernetes 容器檢視,其中包含 Pod 等概念。正在呈現。
  • Containerd 使用標準化 cri 記錄格式來設定記錄 (這與您目前從 Docker 的 json 驅動程式取得的記錄不同)。 您的記錄解決方案必須支援 cri 記錄格式 (例如 適用於容器的 Azure 監視器 )

  • 您無法再存取 Docker 引擎、 /var/run/docker.sock ,或使用 Docker-in-Docker (DinD)。

  • 如果您目前從 Docker 引擎擷取應用程式記錄或監視資料,請改用 Container Insights 。 AKS 不支援在可能導致不穩定的代理程式節點上執行任何頻外命令。
  • 不建議使用稍早所述的方法來建置映射,並直接使用 Docker 引擎。 Kubernetes 不會完全瞭解這些耗用的資源,而且這些方法會如 這裡 這裡 所述,呈現許多問題。
  • 建置映射 - 除非您在 AKS 叢集內建置映射,否則您可以繼續使用目前的 Docker 建置工作流程。 在此情況下,請考慮切換至使用 ACR 工作 來建置映射的建議方法,或更安全的叢集中選項,例如 Docker Buildx

    第 2 代虛擬機器

    Azure 支援 第 2 代 (Gen2) 虛擬機器 (VM) 。 第 2 代 VM 支援第 1 代 VM (Gen1) 不支援的主要功能。 這些功能包括記憶體增加、Intel Software Guard Extensions (Intel SGX) 和虛擬化的持續性記憶體 (vPMEM)。

    第 2 代 VM 捨棄第 1 代 VM 所使用的 BIOS 架構,改用新式的 UEFI 開機架構。 只有特定的 SKU 和大小支援 Gen2 VM。 請檢查 支援大小的清單 ,以查看您的 SKU 是否支援或需要 Gen2。

    此外,並非所有 VM 映射都支援 Gen2 VM。 在 AKS 上,Gen2 VM 會使用 AKS Ubuntu 22.04 或 18.04 映射 AKS Windows Server 2022 映射 。 這些映射支援所有 Gen2 SKU 和大小。

    Linux 上支援 Gen2 VM。 WS2022 僅支援 Windows 上的 Gen2 VM。

    Windows (預覽版第 2 代虛擬機器)

    AKS 預覽版功能可透過自助服務,以加入方式使用。 預覽會以「現狀」和「可供使用時」提供,其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

  • AKS 支援原則
  • Azure 支援常見問題集
  • 只有 WS2022 的 Windows 才支援第 2 代 VM。
  • 第 2 代 VM 預設為大於或等於 Kubernetes 1.25 的 Windows 叢集。
  • 如果您的 Kubernetes 版本大於 1.25,您只需要設定 vm_size 來取得第 2 代節點集區。 如果您在 中 os_sku 定義 ,您仍然可以使用 WS2019 第 1 代。
  • 如果您的 Kubernetes 版本小於 1.25,您可以將 設定 os_sku 為 WS2022,並將 設定 vm_size 為第 2 代,以取得第 2 代節點集區。
  • 安裝 aks-preview Azure CLI 延伸模組

  • 使用 az extension add az extension update 命令來安裝或更新 aks-preview Azure CLI 擴充功能。

    # Install the aks-preview extension
    az extension add --name aks-preview
    # Update to the latest version of the aks-preview extension
    az extension update --name aks-preview
    

    註冊 AKSWindows2022Gen2Preview 功能旗標

  • 使用 az feature register 命令註冊 AKSWindows2022Gen2Preview 功能旗標。

    az feature register --namespace "Microsoft.ContainerService" --name "AKSWindows2022Gen2Preview"
    

    狀態需要幾分鐘的時間才會顯示「已註冊」

  • 使用 az feature show 命令確認註冊。

    az feature show --namespace "Microsoft.ContainerService" --name "AKSWindows2022Gen2Preview"
    
  • 當狀態反映已註冊時,請使用 az provider register 命令重新整理資源提供者的 Microsoft.ContainerService 註冊。

    az provider register --namespace "Microsoft.ContainerService"
    

    使用第 2 代 VM 新增 Windows 節點集區

  • 使用 命令在 Windows 上新增具有第 2 代 VM 的 az aks nodepool add 節點集區。

    # Sample command
    az aks nodepool add --resource-group myResourceGroup --cluster-name myAKSCluster --name gen2np 
    --kubernetes-version 1.23.5 --node-vm-size Standard_D32_v4 --os-type Windows --os-sku Windows2022
    # Default command
    az aks nodepool add --resource-group myResourceGroup --cluster-name myAKSCluster --name gen2np --os-type Windows --kubernetes-version 1.23.5
    
  • 使用 命令判斷您使用的是第 1 代或第 2 az aks nodepool show 代,並檢查 nodeImageVersion 是否包含 gen2

    az aks nodepool show
    
  • 使用 az vm list 命令檢查可用的第 2 代 VM 大小。

    az vm list -skus -l $region
    

    如需詳細資訊,請參閱 Azure 上第二代 VM 的支援

    預設 OS 磁碟大小調整

    當您建立新的叢集或將新的節點集區新增至現有的叢集時,OS 磁片大小預設取決於 vCPU 的數目。 vCPU 數目是以 VM SKU 為基礎,下表列出預設值:

    VM SKU Cores (vCPU) 預設 OS 磁碟層 佈建的 IOPS 布建的輸送量 (Mbps)

    預設 OS 磁片大小調整只有在不支援暫時 OS 磁片且未指定預設 OS 磁片大小時,才會用於新的叢集或節點集區。 預設 OS 磁片大小可能會影響叢集的效能或成本,而且您無法在叢集或節點集區建立之後變更 OS 磁片大小。 此預設磁片大小調整會影響在 2022 年 7 月或更新版本建立的叢集或節點集區。

    在新叢集上使用暫時性 OS

    設定叢集以在建立叢集時使用暫時 OS 磁片。 --node-osdisk-type使用 引數將暫時 OS 設定為新叢集的 OS 磁片類型。

    az aks create --name myAKSCluster --resource-group myResourceGroup -s Standard_DS3_v2 --node-osdisk-type Ephemeral
    

    如果您想要使用網路連接的 OS 磁片建立一般叢集,您可以藉由指定 --node-osdisk-type=Managed 引數來執行此動作。 您也可以選擇新增其他暫時 OS 節點集區,如下所述。

    在現有的叢集上使用暫時性 OS

    設定新的節點集區以使用暫時性 OS 磁碟。 --node-osdisk-type使用 引數將 設定為 OS 磁片類型做為該節點集區的 OS 磁片類型。

    az aks nodepool add --name ephemeral --cluster-name myAKSCluster --resource-group myResourceGroup -s Standard_DS3_v2 --node-osdisk-type Ephemeral
    

    透過暫時性 OS,您可以部署 VM 快取的大小的 VM 和執行個體映像。 在 AKS 案例中,預設節點 OS 磁碟設定會使用 128 GB,這表示您需要快取大於 128 GB 的 VM 大小。 預設 Standard_DS2_v2 的快取大小為 86 GB,容量不足。 Standard_DS3_v2 的快取大小為 172 GB,符合需求。 您也可以使用 --node-osdisk-size 來減少 OS 磁碟的預設大小。 AKS 映像的大小下限為 30 GB。

    如果您想要建立具有網路連接 OS 磁碟的節點集區,您可以藉由指定 --node-osdisk-type Managed 來執行此動作。

    適用于 AKS 的 Azure Linux 容器主機

    您可以透過 Azure CLI 或 ARM 範本部署的 Azure Linux 容器主機。

  • 您需要安裝並設定 Azure CLI 2.44.1 版或更新版本。 執行 az --version 以尋找目前安裝的版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI
  • 如果您尚未安裝 kubectl,請使用 az aks install-cli 或遵循上游指示,透過 Azure CLI 加以安裝。
  • 使用 Azure CLI 部署 Azure Linux AKS 叢集

    使用下列範例命令來建立 Azure Linux 叢集。

    az group create --name AzureLinuxTest --location eastus
    az aks create --name testAzureLinuxCluster --resource-group AzureLinuxTest --os-sku AzureLinux --generate-ssh-keys
    az aks get-credentials --resource-group AzureLinuxTest --name testAzureLinuxCluster
    kubectl get pods --all-namespaces
    

    使用 ARM 範本部署 Azure Linux AKS 叢集

    若要將 Azure Linux 新增至現有的 ARM 範本,您需要執行下列動作:

  • 將 和 "mode": "System" 新增 "osSKU": "AzureLinux" 至 agentPoolProfiles 屬性。
  • 將 apiVersion 設定為 2021-03-01 或更新版本: "apiVersion": "2021-03-01"
  • 下列部署使用 ARM 範本 azurelinuxaksarm.json

    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.1", "parameters": { "clusterName": { "type": "string", "defaultValue": "azurelinuxakscluster", "metadata": { "description": "The name of the Managed Cluster resource." "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "The location of the Managed Cluster resource." "dnsPrefix": { "type": "string", "defaultValue": "azurelinux", "metadata": { "description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN." "osDiskSizeGB": { "type": "int", "defaultValue": 0, "minValue": 0, "maxValue": 1023, "metadata": { "description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize." "agentCount": { "type": "int", "defaultValue": 3, "minValue": 1, "maxValue": 50, "metadata": { "description": "The number of nodes for the cluster." "agentVMSize": { "type": "string", "defaultValue": "Standard_DS2_v2", "metadata": { "description": "The size of the Virtual Machine." "linuxAdminUsername": { "type": "string", "metadata": { "description": "User name for the Linux Virtual Machines." "sshRSAPublicKey": { "type": "string", "metadata": { "description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm'" "osType": { "type": "string", "defaultValue": "Linux", "allowedValues": [ "Linux" "metadata": { "description": "The type of operating system." "osSKU": { "type": "string", "defaultValue": "azurelinux", "allowedValues": [ "AzureLinux", "Ubuntu", "metadata": { "description": "The Linux SKU to use." "resources": [ "type": "Microsoft.ContainerService/managedClusters", "apiVersion": "2021-03-01", "name": "[parameters('clusterName')]", "location": "[parameters('location')]", "properties": { "dnsPrefix": "[parameters('dnsPrefix')]", "agentPoolProfiles": [ "name": "agentpool", "mode": "System", "osDiskSizeGB": "[parameters('osDiskSizeGB')]", "count": "[parameters('agentCount')]", "vmSize": "[parameters('agentVMSize')]", "osType": "[parameters('osType')]", "osSKU": "[parameters('osSKU')]", "storageProfile": "ManagedDisks" "linuxProfile": { "adminUsername": "[parameters('linuxAdminUsername')]", "ssh": { "publicKeys": [ "keyData": "[parameters('sshRSAPublicKey')]" "identity": { "type": "SystemAssigned" "outputs": { "controlPlaneFQDN": { "type": "string", "value": "[reference(parameters('clusterName')).fqdn]"

    在您的系統上建立此檔案,並包含檔案中 azurelinuxaksarm.json 定義的設定。

    az group create --name AzureLinuxTest --location eastus
    az deployment group create --resource-group AzureLinuxTest --template-file azurelinuxaksarm.json --parameters linuxAdminUsername=azureuser sshRSAPublicKey=`<contents of your id_rsa.pub>`
    az aks get-credentials --resource-group AzureLinuxTest --name testAzureLinuxCluster
    kubectl get pods --all-namespaces
    

    使用 Terraform 部署 Azure Linux AKS 叢集

    若要使用 Terraform 部署 Azure Linux 叢集,您必須先將 azurerm 提供者設定為 2.76 版或更高版本。

    required_providers {
      azurerm = {
        source = "hashicorp/azurerm"
        version = "~> 2.76"
    

    更新 azurerm 提供者之後,您可以在 中 default_node_pool 指定 AzureLinux os_sku

    default_node_pool {
      name = "default"
      node_count = 2
      vm_size = "Standard_D2_v2"
      os_sku = "AzureLinux"
    

    同樣地,您可以在 中 azurerm_kubernetes_cluster_node_pool 指定 AzureLinux os_sku

    自訂資源群組名稱

    當您在 Azure 中部署Azure Kubernetes Service叢集時,它也會為背景工作節點建立第二個資源群組。 根據預設,AKS 會將節點資源群組 MC_resourcegroupname_clustername_location 命名為 ,但您可以指定自訂名稱。

    若要指定自訂資源組名,請安裝 aks-preview Azure CLI 擴充功能 0.3.2 版或更新版本。 使用 Azure CLI 時,請使用 命令來包含 --node-resource-group 參數 az aks create ,以指定資源群組的自訂名稱。 若要使用 Azure Resource Manager 範本部署 AKS 叢集,您可以使用 屬性來定義資源組名 nodeResourceGroup

    az aks create --name myAKSCluster --resource-group myResourceGroup --node-resource-group myNodeResourceGroup
    

    您自己訂用帳戶中的 Azure 資源提供者會自動建立第二個資源群組。 您只能在叢集建立期間指定自訂資源組名。

    當使用節點資源群組時,您無法進行以下動作:

  • 指定現有的資源群組做為節點資源群組。
  • 為節點資源群組指定不同的訂閱。
  • 在建立叢集之後變更節點資源組名。
  • 指定節點資源群組內受控資源的名稱。
  • 修改或刪除節點資源群組內由 Azure 建立的受控資源標籤。
  • 節點限制 (預覽)

    節點限制許可控制器會限制 kubelet 可以修改的 Node 和 Pod 物件。 AKS 1.24+ 叢集中預設會開啟節點限制。 如果您使用舊版,請使用下列命令來建立具有節點限制的叢集,或更新現有的叢集以新增節點限制。

    AKS 預覽版功能可透過自助服務,以加入方式使用。 預覽會以「現狀」和「可供使用時」提供,其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

  • AKS 支援原則
  • Azure 支援常見問題集
  • 您必須先安裝下列資源:

  • Azure CLI
  • aks-preview 延伸模組 0.5.95 版或更新版本
  • 安裝 aks-preview CLI 延伸模組

    # Install the aks-preview extension
    az extension add --name aks-preview
    # Update the extension to make sure you have the latest version installed
    az extension update --name aks-preview
    

    使用節點限制建立 AKS 叢集

    使用節點限制建立叢集。

    az aks create -n aks -g myResourceGroup --enable-node-restriction
    

    使用節點限制更新 AKS 叢集

    更新叢集以使用節點限制。

    az aks update -n aks -g myResourceGroup --enable-node-restriction
    

    從 AKS 叢集移除節點限制

    從叢集移除節點限制。

    az aks update -n aks -g myResourceGroup --disable-node-restriction
    

    (Preview) 完全受控資源群組

    AKS 會將基礎結構部署至您的訂用帳戶,以連線和執行您的應用程式。 直接對 節點資源群組 中的資源所做的變更可能會影響叢集作業或稍後造成問題。 例如,調整、儲存體或網路設定應該透過 Kubernetes API,而不是直接在這些資源上。

    若要防止對節點資源群組進行變更,您可以套用拒絕指派,並封鎖使用者修改在 AKS 叢集中建立的資源。

    AKS 預覽版功能可透過自助服務,以加入方式使用。 預覽會以「現狀」和「可供使用時」提供,其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

  • AKS 支援原則
  • Azure 支援常見問題集
  • 您必須先安裝下列資源:

  • Azure CLI 2.44.0 版或更新版本。 執行 az --version 以尋找目前的版本,如果您需要安裝或升級,請參閱 安裝 Azure CLI
  • 延伸 aks-preview 模組 0.5.126 版或更新版本
  • 安裝 aks-preview CLI 延伸模組

    # Install the aks-preview extension
    az extension add --name aks-preview
    # Update the extension to make sure you have the latest version installed
    az extension update --name aks-preview
    

    註冊 'NRGLockdownPreview' 功能旗標

    使用 az feature register 命令以註冊 NRGLockdownPreview 功能旗標,如下列範例所示:

    az feature register --namespace "Microsoft.ContainerService" --name "NRGLockdownPreview"
    

    狀態需要幾分鐘的時間才會顯示「已註冊」。 使用 az feature show 命令來確認註冊狀態:

    az feature show --namespace "Microsoft.ContainerService" --name "NRGLockdownPreview"
    

    當狀態反映已註冊時,請使用az provider register命令重新整理Microsoft.ContainerService資源提供者的註冊:

    az provider register --namespace Microsoft.ContainerService
    

    建立具有節點資源群組鎖定的 AKS 叢集

    若要使用節點資源群組鎖定建立叢集,請將 設定 --nrg-lockdown-restriction-levelReadOnly。 這可讓您檢視資源,但無法加以修改。

    az aks create -n aksTest -g aksTest –-nrg-lockdown-restriction-level ReadOnly
    

    使用節點資源群組鎖定更新現有的叢集

    az aks update -n aksTest -g aksTest –-nrg-lockdown-restriction-level ReadOnly
    

    從叢集移除節點資源群組鎖定

    az aks update -n aksTest -g aksTest –-nrg-lockdown-restriction-level Unrestricted
    
  • 了解如何在您的叢集中升級節點映像
  • 檢閱Azure Kubernetes Service (AKS) 叢集的基準架構,以瞭解建議的基準基礎結構架構。
  • 請參閱升級 Azure Kubernetes Service (AKS) 叢集,了解如何將叢集升級至最新版本的 Kubernetes。
  • 深入了解 containerd 和 Kubernetes
  • 關於 AKS 常見問題的解答,請參閱 AKS 的常見問題集
  • 閱讀了解暫時性 OS 磁碟
  •  
    推荐文章