你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Azure CLI 创建 Azure Nexus Kubernetes 群集

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

开始之前

如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户

  • 安装必需的 Azure CLI 扩展的最新版本。

  • 本文需要 2.61.0 或更高版本的 Azure CLI。 如果使用 Azure Cloud Shell,则最新版本已安装。

  • 如果你有多个 Azure 订阅,请使用 az account 命令选择应在其中计收资源费用的相应订阅 ID。

  • 有关支持的 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/deployments 资源类型的所有操作具有访问权限。 例如,若要部署群集,需要 Microsoft.NetworkCloud/kubernetesclusters/write 和 Microsoft.Resources/deployments/* 权限。 有关角色和权限的列表,请参阅 Azure 内置角色

  • 需要 Azure Operator Nexus 群集的 custom location 资源 ID。

  • 需要根据特定的工作负载要求创建各种网络,并且必须具有适用于工作负载的相应 IP 地址。 为确保顺利实施,建议咨询相关支持团队以获取帮助。

  • 本快速入门假设读者基本了解 Kubernetes 的概念。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的 Kubernetes 核心概念

创建 Azure Nexus Kubernetes 群集

以下示例在 eastus 位置的 myResourceGroup 资源组中创建名为 myNexusK8sCluster 的群集。

在运行命令之前,需要设置多个变量来定义群集的配置。 下面是需要设置的变量,以及可用于某些变量的一些默认值:

变量 说明
LOCATION 要在其中创建群集的 Azure 区域。
RESOURCE_GROUP 要在其中创建群集的 Azure 资源组的名称。
SUBSCRIPTION_ID Azure 订阅的 ID。
CUSTOM_LOCATION 此参数指定 Nexus 实例的自定义位置。
CSN_ARM_ID CSN ID 是要使用的云服务网络的唯一标识符。
CNI_ARM_ID CNI ID 是供容器运行时使用的网络接口的唯一标识符。
AAD_ADMIN_GROUP_OBJECT_ID 应在群集上具有管理员权限的 Microsoft Entra 组的对象 ID。
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 标志来提供更详细的输出,以便进行故障排除。

若要定义这些变量,请使用以下 set 命令,并将示例值替换为你的首选值。 还可以对某些变量使用默认值,如以下示例所示:

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 Operator Nexus Kubernetes 群集

注意

创建 Nexus Kubernetes 群集时,Nexus 会自动创建专用于存储群集资源的托管资源组,在此组中,会建立 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 代理,你可以通过该代理连接到指定 Nexus Kubernetes 群集的 Kubernetes API 服务器。

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. 使用 kubectl 将请求发送到群集:

    kubectl get pods -A
    

    现在应会看到来自群集的响应,其中包含所有节点的列表。

注意

如果看到错误消息“无法将访问令牌发布到客户端代理,无法连接到 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 群集以及除 Operator Nexus 网络资源外的所有相关资源。

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

后续步骤

现在即可直接通过群集连接或通过 Azure Operator Service Manager 来部署 CNF。