- 使用 Azure CLI 部署 Azure Nexus Kubernetes 群集。
在您开始之前
如果没有 Azure 帐户,请在开始前创建一个免费帐户。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 使用和管理 Azure CLI 中的扩展。
运行az version命令,以查看已安装的版本和依赖库。 若要升级到最新版本,请运行az upgrade。
本文需要 Azure CLI 2.61.0 或更高版本。 如果使用 Azure Cloud Shell,则最新版本已安装。
如果有多个 Azure 订阅,请选择相应的订阅 ID,其中应使用
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/deployments 资源类型的所有操作具有访问权限。 例如,若要部署群集,需要Microsoft.NetworkCloud/kubernetesclusters/write 和 Microsoft.Resources/deployments/* 权限。 有关角色和权限的列表,请参阅 Azure 内置角色。
需要
custom locationAzure 运营商 Nexus 群集的资源 ID。需要根据特定的工作负荷要求创建 各种网络 ,并且必须具有适用于工作负荷的相应 IP 地址。 为了确保顺利实施,建议咨询相关支持团队以获取帮助。
本快速入门假设读者基本了解 Kubernetes 的概念。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的 Kubernetes 核心概念。
创建 Azure Nexus Kubernetes 群集
以下示例在 eastus 位置的资源组 myResourceGroup 中创建名为 myNexusK8sCluster 的群集。
在运行命令之前,需要设置多个变量来定义群集的配置。 下面是需要设置的变量,以及可用于某些变量的某些默认值:
| Variable | Description |
|---|---|
| 位置 | 要在其中创建群集的 Azure 区域。 |
| RESOURCE_GROUP | 要在其中创建群集的 Azure 资源组的名称。 |
| SUBSCRIPTION_ID(订阅ID) | Azure 订阅的 ID。 |
| CUSTOM_LOCATION | 此参数指定 Nexus 实例的自定义位置。 |
| CSN_ARM_ID | CSN ID 是您想要使用的云服务网络的唯一标识符。 |
| CNI_ARM_ID | CNI ID 是容器运行时要使用的网络接口的唯一标识符。 |
| Azure Active Directory管理员组对象ID | 应对群集具有管理员权限的 Microsoft Entra 组的对象 ID。 |
| CLUSTER_NAME | 您要为 Nexus Kubernetes 群集指定的名称。 |
| K8S_VERSION | 要使用的 Kubernetes 版本。 |
| ADMIN_USERNAME | 群集管理员的用户名。 |
| SSH_PUBLIC_KEY | 用于与群集进行安全通信的 SSH 公钥。 |
| 控制平面计数 | 群集的控制平面节点数。 |
| 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 门户查看资源。
若要查看资源组中myNexusK8sCluster群集的详细信息myResourceGroup,请执行以下 Azure CLI 命令:
az networkcloud kubernetescluster show \
--name myNexusK8sCluster \
--resource-group myResourceGroup
此外,若要获取与资源组中的myNexusK8sCluster群集关联的myResourceGroup代理池名称列表,可以使用以下 Azure CLI 命令。
az networkcloud kubernetescluster agentpool list \
--kubernetes-cluster-name myNexusK8sCluster \
--resource-group myResourceGroup \
--output table
连接至群集
成功创建并连接到 Azure Arc 的 Nexus Kubernetes 群集后,可以使用群集连接功能轻松连接到它。 通过群集连接,可以从任意位置安全地访问和管理群集,从而方便交互式开发、调试和群集管理任务。
有关可用选项的更多详细信息,请参阅 连接到 Azure 操作员 Nexus Kubernetes 群集。
注释
创建 Nexus Kubernetes 群集时,Nexus 会自动创建一个专用于存储群集资源的托管资源组,在此组中建立 Arc 连接的群集资源。
若要访问群集,需要设置群集连接 kubeconfig。 登录具有相关 Microsoft Entra 实体的 Azure CLI 后,可以获取 kubeconfig,以便从任何位置与群集进行通信,即使在包围群集的防火墙之外也是如此。
设置
CLUSTER_NAME、RESOURCE_GROUP和SUBSCRIPTION_ID变量。CLUSTER_NAME="myNexusK8sCluster" RESOURCE_GROUP="myResourceGroup" SUBSCRIPTION_ID=<set the correct subscription_id>使用
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)以下命令启动 connectedk8s 代理,该代理允许连接到指定的 Nexus Kubernetes 群集的 Kubernetes API 服务器。
az connectedk8s proxy -n $CLUSTER_NAME -g $MANAGED_RESOURCE_GROUP &使用
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 群集和除操作员 Nexus 网络资源以外的所有相关资源。
az group delete --name myResourceGroup --yes --no-wait
后续步骤
现在,可以通过 群集连接 或 Azure 操作员服务管理器直接部署 CNF。