共用方式為


快速入門 - 使用 Azure CLI 建立 Azure Nexus Kubernetes 叢集

  • 使用 Azure CLI 部署 Azure Nexus Kubernetes 叢集。

開始之前

如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶

  • 安裝必要的 Azure CLI 擴充功能最新版。

  • 本文需要 Azure CLI 2.61.0 版或更新版本。 如果您是使用 Azure Cloud Shell,就已安裝最新版本。

  • 如果您有多個 Azure 訂用帳戶,則請使用 az account 命令選取應該從中針對資源計費的適當訂用帳戶識別碼。

  • 如需支援的 VM SKU 清單,請參閱參考區段中的 VM SKU 資料表。

  • 如需支援的 Kubernetes 版本清單,請參閱支援的 Kubernetes 版本

  • 使用 az group create 命令建立資源群組。 Azure 資源群組是部署及管理 Azure 資源所在的邏輯群組。 建立資源群組時,系統會提示您指定位置。 此位置是資源群組中繼資料的儲存位置,如果未在資源建立期間指定另一個區域,此位置也會是您在 Azure 中執行資源的位置。 下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組。

    az group create --name myResourceGroup --location eastus
    

    下列輸出範例類似於成功建立資源群組:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    
  • 若要部署 Bicep 檔案或 ARM 範本,您需要對即將進行部署的資源具備寫入存取權,並可存取 Microsoft.Resources/部署資源類型上的所有作業。 例如,若要部署叢集,您需要 Microsoft.NetworkCloud/kubernetesclusters/write 和 Microsoft.Resources/deployments/* 權限。 如需角色與權限的清單,請參閱 Azure 內建角色

  • 您需要 Azure 運算子連接點叢集的 custom location 資源識別碼。

  • 您必須根據特定的工作負載需求建立各種網路,而且必須為工作負載提供適當的 IP 位址。 為確保順利實作,建議您諮詢相關的支援小組以取得協助。

  • 本快速入門假設您已有 Kubernetes 概念的基本知識。 如需詳細資訊,請參閱 Azure Kubernetes Services (AKS) 的 Kubernetes 核心概念

建立 Azure Nexus Kubernetes 叢集

以下範例會在 eastus 位置的資源群組 myResourceGroup 中建立一個名為 myNexusK8sCluster 的叢集。

執行命令之前,您需要設定數個變數來定義叢集的組態。 以下是您需要設定的變數,以及可用於特定變數的一些預設值:

變數 描述
LOCATION 您想要在其中建立叢集的 Azure 區域。
RESOURCE_GROUP 您想要在其中建立叢集的 Azure 資源群組名稱。
SUBSCRIPTION_ID Azure 訂用帳戶的識別碼。
CUSTOM_LOCATION 此引數會指定連接點執行個體的自訂位置。
CSN_ARM_ID CSN 識別碼是您想要使用的雲端服務網路的唯一識別碼。
CNI_ARM_ID CNI 識別碼是容器執行階段所要使用的網路介面的唯一識別碼。
AAD_ADMIN_GROUP_OBJECT_ID 應在叢集上具有系統管理權限的 Microsoft Entra 群組的物件識別碼。
CLUSTER_NAME 您想要提供給 Nexus Kubernetes 叢集的名稱。
K8S_VERSION 您想要使用的 Kubernetes 版本。
ADMIN_USERNAME 叢集管理員的使用者名稱。
SSH_PUBLIC_KEY 用於與叢集進行安全通訊的 SSH 公開金鑰。
CONTROL_PLANE_COUNT 叢集的控制平面節點數。
CONTROL_PLANE_VM_SIZE 控制平面節點的虛擬機器的大小。
INITIAL_AGENT_POOL_NAME 初始代理程式集區的名稱。
INITIAL_AGENT_POOL_COUNT 初始代理程式集區中的節點數。
INITIAL_AGENT_POOL_VM_SIZE 初始代理程式集區的虛擬機器大小。
POD_CIDR 叢集中 Kubernetes Pod 的網路範圍 (採用 CIDR 標記法)。
SERVICE_CIDR 叢集中 Kubernetes 服務的網路範圍 (採用 CIDR 標記法)。
DNS_SERVICE_IP Kubernetes DNS 服務的 IP 位址。

定義這些變數之後,您可以執行 Azure CLI 命令以建立叢集。 在結尾新增 --debug 旗標,以提供更詳細的輸出以進行疑難排解。

若要定義這些變數,請使用下列集合命令,並將範例值取代為您偏好的值。 您也可以使用部分變數的預設值,如下列範例所示:

RESOURCE_GROUP="myResourceGroup"
SUBSCRIPTION_ID="<Azure subscription ID>"
LOCATION="$(az group show --name $RESOURCE_GROUP --query location --subscription $SUBSCRIPTION_ID -o tsv)"
CUSTOM_LOCATION="/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
CSN_ARM_ID="/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/cloudServicesNetworks/<csn-name>"
CNI_ARM_ID="/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/l3Networks/<l3Network-name>"
AAD_ADMIN_GROUP_OBJECT_ID="00000000-0000-0000-0000-000000000000"
CLUSTER_NAME="myNexusK8sCluster"
K8S_VERSION="v1.24.9"
ADMIN_USERNAME="azureuser"
SSH_PUBLIC_KEY="$(cat ~/.ssh/id_rsa.pub)"
CONTROL_PLANE_SSH_PUBLIC_KEY="$(cat ~/.ssh/id_rsa.pub)"
AGENT_POOL_SSH_PUBLIC_KEY="$(cat ~/.ssh/id_rsa.pub)"
CONTROL_PLANE_COUNT="1"
CONTROL_PLANE_VM_SIZE="NC_G6_28_v1"
INITIAL_AGENT_POOL_NAME="${CLUSTER_NAME}-nodepool-1"
INITIAL_AGENT_POOL_COUNT="1"
INITIAL_AGENT_POOL_VM_SIZE="NC_P10_56_v1"
POD_CIDR="10.244.0.0/16"
SERVICE_CIDR="10.96.0.0/16"
DNS_SERVICE_IP="10.96.0.10"

重要

在執行這些命令之前,必須將 CUSTOM_LOCATION、CSN_ARM_ID、CNI_ARM_ID 和 AAD_ADMIN_GROUP_OBJECT_ID 的預留位置取代為實際值。

定義這些變數之後,您可以執行下列 Azure CLI 命令以建立 Kubernetes 叢集:

az networkcloud kubernetescluster create \
  --name "${CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --subscription "${SUBSCRIPTION_ID}" \
  --extended-location name="${CUSTOM_LOCATION}" type=CustomLocation \
  --location "${LOCATION}" \
  --kubernetes-version "${K8S_VERSION}" \
  --aad-configuration admin-group-object-ids="[${AAD_ADMIN_GROUP_OBJECT_ID}]" \
  --admin-username "${ADMIN_USERNAME}" \
  --ssh-key-values "${SSH_PUBLIC_KEY}" \
  --control-plane-node-configuration \
    count="${CONTROL_PLANE_COUNT}" \
    vm-sku-name="${CONTROL_PLANE_VM_SIZE}" \
    ssh-key-values='["${CONTROL_PLANE_SSH_PUBLIC_KEY}"]' \
  --initial-agent-pool-configurations "[{count:${INITIAL_AGENT_POOL_COUNT},mode:System,name:${INITIAL_AGENT_POOL_NAME},vm-sku-name:${INITIAL_AGENT_POOL_VM_SIZE},ssh-key-values:['${AGENT_POOL_SSH_PUBLIC_KEY}']}]" \
  --network-configuration \
    cloud-services-network-id="${CSN_ARM_ID}" \
    cni-network-id="${CNI_ARM_ID}" \
    pod-cidrs="[${POD_CIDR}]" \
    service-cidrs="[${SERVICE_CIDR}]" \
    dns-service-ip="${DNS_SERVICE_IP}"

如果沒有足夠的容量可部署要求的叢集節點,則會出現錯誤訊息。 不過,此訊息不會提供可用容量的任何詳細資料。 其指出叢集建立由於容量不足而無法繼續。

注意

容量計算會考慮整個平台叢集,而不是僅限於個別機架。 因此,如果代理程式集區是在容量不足的區域 (其中機架等於區域) 中建立,但另一個區域具有足夠的容量,叢集建立會繼續但最終會逾時。只有在建立叢集或代理程式集區期間未指定特定區域時,這個容量檢查方法才有意義。

在幾分鐘之後,此命令就會完成,並傳回叢集的相關資訊。 如需更進階的選項,請參閱快速入門:使用 Bicep 部署 Azure Nexus Kubernetes 叢集

檢閱已部署的資源

部署完成之後,您可以使用 CLI 或 Azure 入口網站檢視資源。

若要檢視 myResourceGroup 資源群組中 myNexusK8sCluster 叢集的詳細資料,請執行下列 Azure CLI 命令:

az networkcloud kubernetescluster show \
  --name myNexusK8sCluster \
  --resource-group myResourceGroup

此外,若要取得與 myResourceGroup 資源群組中 myNexusK8sCluster 叢集相關聯的代理程式集區名稱清單,您可以使用下列 Azure CLI 命令。

az networkcloud kubernetescluster agentpool list \
  --kubernetes-cluster-name myNexusK8sCluster \
  --resource-group myResourceGroup \
  --output table

連線至叢集

現在 Nexus Kubernetes 叢集已成功建立並連線到 Azure Arc,您可以使用叢集連線功能來輕鬆地與其連線。 叢集連線可讓您從任何地方安全地存取和管理叢集,進而方便進行互動式開發、偵錯和叢集管理工作。

如需可用選項的詳細資訊,請參閱連線到 Azure 運算子連接點 Kubernetes 叢集

注意

在建立連接點 Kubernetes 叢集時,連接點會自動建立專用於儲存叢集資源的受控資源群組,並在此群組內建立 Arc 連線的叢集資源。

若要存取叢集,您必須設定叢集連線 kubeconfig。 在使用相關的 Microsoft Entra 實體登入 Azure CLI 後,便可取得從任何位置 (甚至在其周圍的防火牆之外) 與叢集通訊所需的 kubeconfig

  1. 設定 CLUSTER_NAMERESOURCE_GROUPSUBSCRIPTION_ID 變數。

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. 使用 az 來查詢受控資源群組,並將其儲存在 MANAGED_RESOURCE_GROUP

     az account set -s $SUBSCRIPTION_ID
     MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)
    
  3. 下列命令會啟動 connectedk8s Proxy,以讓您連線到指定 Nexus Kubernetes 叢集的 Kubernetes API 伺服器。

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. 使用 kubectl 將要求傳送至叢集:

    kubectl get pods -A
    

    您現在應該會看到叢集的回應,其中包含所有節點的清單。

注意

如果您看到錯誤訊息「無法將存取權杖張貼至用戶端 proxyFailed 以連線到 MSI」,則可能需要執行 az login 以向 Azure 重新驗證。

新增代理程式集區

上一個步驟中建立的叢集有單一節點集區。 讓我們使用 az networkcloud kubernetescluster agentpool create 命令,以新增第二個代理程式集區。 下列範例會建立名為 myNexusK8sCluster-nodepool-2 的代理程式集區:

您也可以使用部分變數的預設值,如下列範例所示:

RESOURCE_GROUP="myResourceGroup"
CUSTOM_LOCATION="/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
CLUSTER_NAME="myNexusK8sCluster"
AGENT_POOL_NAME="${CLUSTER_NAME}-nodepool-2"
AGENT_POOL_VM_SIZE="NC_P10_56_v1"
AGENT_POOL_COUNT="1"
AGENT_POOL_MODE="User"

定義這些變數之後,您可以執行下列 Azure CLI 命令以新增代理程式集區:

az networkcloud kubernetescluster agentpool create \
  --name "${AGENT_POOL_NAME}" \
  --kubernetes-cluster-name "${CLUSTER_NAME}" \
  --resource-group "${RESOURCE_GROUP}" \
  --subscription "${SUBSCRIPTION_ID}" \
  --extended-location name="${CUSTOM_LOCATION}" type=CustomLocation \
  --count "${AGENT_POOL_COUNT}" \
  --mode "${AGENT_POOL_MODE}" \
  --vm-sku-name "${AGENT_POOL_VM_SIZE}"

在幾分鐘之後,此命令就會完成,並傳回代理程式集區的相關資訊。 如需更進階的選項,請參閱快速入門:使用 Bicep 部署 Azure Nexus Kubernetes 叢集

注意

您可以使用初始代理程式集區組態,在叢集本身的初始建立期間新增多個代理程式集區。 不過,如果您想要在初始建立之後新增代理程式集區,您可以使用上述命令為 Nexus Kubernetes 叢集建立其他代理程式集區。

下列輸出範例類似於成功建立代理程式集區。

$ az networkcloud kubernetescluster agentpool list --kubernetes-cluster-name myNexusK8sCluster --resource-group myResourceGroup --output table
This command is experimental and under development. Reference and support levels: https://aka.ms/CLI_refstatus
Count    Location    Mode    Name                          ProvisioningState    ResourceGroup    VmSkuName
-------  ----------  ------  ----------------------------  -------------------  ---------------  -----------
1        eastus      System  myNexusK8sCluster-nodepool-1  Succeeded            myResourceGroup  NC_P10_56_v1
1        eastus      User    myNexusK8sCluster-nodepool-2  Succeeded            myResourceGroup  NC_P10_56_v1

清除資源

不再需要資源群組時,請加以刪除。 資源群組和資源群組中的所有資源都會被刪除。

使用 az group delete 命令,以移除資源群組、Kubernetes 叢集,以及運算子連接點網路資源以外的所有相關資源。

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

下一步

您現在可以直接透過叢集連線或透過 Azure Operator Service Manager 來部署 CNF。