你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure PowerShell 部署 Azure Nexus Kubernetes 群集。
本快速入门指南旨在帮助用户开始使用 Nexus Kubernetes 群集。 按照本指南中所述的步骤操作,可以快速轻松地创建满足特定需求和要求的自定义 Kubernetes 群集。 无论你是 Nexus 网络的初学者还是专家,本指南都可以帮助你。 了解自定义和创建 Nexus Kubernetes 群集所需的全部内容。
开始之前
如果没有 Azure 帐户,请在开始前创建一个免费帐户。
- 在 Azure PowerShell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 中的 PowerShell 快速入门。
如果你在本地运行 PowerShell,请安装 Az PowerShell 模块,并使用 Connect-AzAccount cmdlet 连接到 Azure 帐户。 有关安装 Az PowerShell 模块的详细信息,请参阅安装 Azure PowerShell。
如果你有多个 Azure 订阅,请使用 Set-AzContext cmdlet 选择应在其中计收资源费用的相应订阅 ID。 设置订阅时,每次执行 PowerShell 命令时,都不需要传递“SubscriptionID”。
有关支持的 VM SKU 列表,请参阅参考部分中的 VM SKU 表。
有关受支持的 Kubernetes 版本的列表,请参阅受支持的 Kubernetes 版本。
使用 New-AzResourceGroup cmdlet 创建资源组。 Azure 资源组是用于部署和管理 Azure 资源的逻辑组。 创建资源组时,系统会提示你指定一个位置。 此位置是资源组元数据的存储位置,也是资源在 Azure 中运行的位置(如果你在创建资源期间未指定其他区域)。 以下示例在“eastus”位置创建名为“myResourceGroup”的资源组。
New-AzResourceGroup -Name myResourceGroup -Location eastus
以下输出示例类似于成功创建资源组:
ResourceGroupName : myResourceGroup Location : eastus ProvisioningState : Succeeded Tags : ResourceId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup
需要 Azure Operator Nexus 群集的
custom location
资源 ID。需要根据特定的工作负载要求创建各种网络,并且必须具有适用于工作负载的相应 IP 地址。 为确保顺利实施,建议咨询相关支持团队以获取帮助。
本快速入门假设读者基本了解 Kubernetes 的概念。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的 Kubernetes 核心概念。
创建 Azure Nexus Kubernetes 群集
以下示例在 eastus 位置的 myResourceGroup 资源组中创建名为 myNexusK8sCluster 的群集。
在运行命令之前,需要设置多个变量来定义群集的配置。 下面是需要设置的变量,以及可用于某些变量的一些默认值:
变量 | 说明 |
---|---|
位置 | 要在其中创建群集的 Azure 区域。 |
RESOURCE_GROUP | 要在其中创建群集的 Azure 资源组的名称。 |
SUBSCRIPTION_ID(订阅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公钥) | 用于与群集进行安全通信的 SSH 公钥。 |
CONTROL_PLANE_COUNT | 群集的控制平面节点数。 |
CONTROL_PLANE_VM_SIZE | 控制平面节点的虚拟机大小。 |
INITIAL_AGENT_POOL_NAME | 初始代理池的名称。 |
INITIAL_AGENT_POOL_COUNT | 初始代理池的节点数。 |
INITIAL_AGENT_POOL_VM_SIZE | 初始代理池的虚拟机大小。 |
模式 | 包含节点的代理池的模式,值应用 System 或 User 或 NotApplicable |
AGENT_POOL_CONFIGURATION | 该参数指定为运行关键系统服务和工作负载而创建的代理池。 |
POD_CIDR | 群集中 Kubernetes Pod 的网络范围(采用 CIDR 表示法)。 |
SERVICE_CIDR | 群集中 Kubernetes 服务的网络范围(采用 CIDR 表示法)。 |
DNS_SERVICE_IP | Kubernetes DNS 服务的 IP 地址。 |
定义这些变量后,可以运行 Azure PowerShell 命令来创建群集。 在末尾添加 -Debug
标志来提供更详细的输出,以便进行故障排除。
若要定义这些变量,请使用以下 set 命令,并将示例值替换为你的首选值。 还可以对某些变量使用默认值,如以下示例所示:
# Azure parameters
$RESOURCE_GROUP="myResourceGroup"
$SUBSCRIPTION="<Azure subscription ID>"
$CUSTOM_LOCATION="/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
$CUSTOM_LOCATION_TYPE="CustomLocation"
$LOCATION="<ClusterAzureRegion>"
# Network parameters
$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>"
$POD_CIDR="10.244.0.0/16"
$SERVICE_CIDR="10.96.0.0/16"
$DNS_SERVICE_IP="10.96.0.10"
# AgentPoolConfiguration parameters
$INITIAL_AGENT_POOL_COUNT="1"
$MODE="System"
$INITIAL_AGENT_POOL_NAME="agentpool1"
$INITIAL_AGENT_POOL_VM_SIZE="NC_P10_56_v1"
# NAKS Cluster Parameters
$CLUSTER_NAME="myNexusK8sCluster"
$SSH_PUBLIC_KEY = @{
KeyData = "$(cat ~/.ssh/id_rsa.pub)"
}
$K8S_VERSION="1.24.9"
$AAD_ADMIN_GROUP_OBJECT_ID="3d4c8620-ac8c-4bd6-9a92-f2b75923ef9f"
$ADMIN_USERNAME="azureuser"
$CONTROL_PLANE_COUNT="1"
$CONTROL_PLANE_VM_SIZE="NC_G6_28_v1"
$AGENT_POOL_CONFIGURATION = New-AzNetworkCloudInitialAgentPoolConfigurationObject `
-Count $INITIAL_AGENT_POOL_COUNT `
-Mode $MODE `
-Name $INITIAL_AGENT_POOL_NAME `
-VmSkuName $INITIAL_AGENT_POOL_VM_SIZE
重要
在运行这些命令之前,必须用实际值替换 CUSTOM_LOCATION、CSN_ARM_ID、CNI_ARM_ID 和 AAD_ADMIN_GROUP_OBJECT_ID 的占位符。
定义这些变量后,可以通过执行以下 Azure PowerShell 命令来创建 Kubernetes 群集:
New-AzNetworkCloudKubernetesCluster -KubernetesClusterName $CLUSTER_NAME `
-ResourceGroupName $RESOURCE_GROUP `
-SubscriptionId $SUBSCRIPTION `
-Location $LOCATION `
-ExtendedLocationName $CUSTOM_LOCATION `
-ExtendedLocationType $CUSTOM_LOCATION_TYPE `
-KubernetesVersion $K8S_VERSION `
-AadConfigurationAdminGroupObjectId $AAD_ADMIN_GROUP_OBJECT_ID `
-AdminUsername $ADMIN_USERNAME `
-SshPublicKey $SSH_PUBLIC_KEY `
-ControlPlaneNodeConfigurationCount $CONTROL_PLANE_COUNT `
-ControlPlaneNodeConfigurationVMSkuName $CONTROL_PLANE_VM_SIZE `
-InitialAgentPoolConfiguration $AGENT_POOL_CONFIGURATION `
-NetworkConfigurationCloudServicesNetworkId $CSN_ARM_ID `
-NetworkConfigurationCniNetworkId $CNI_ARM_ID `
-NetworkConfigurationPodCidr $POD_CIDR `
-NetworkConfigurationDnsServiceIP $SERVICE_CIDR `
-NetworkConfigurationServiceCidr $DNS_SERVICE_IP
如果没有足够的容量来部署请求的群集节点,则会显示一条错误消息。 但是,此消息不提供任何有关可用容量的详细信息。 它会指出群集创建由于容量不足而无法继续。
注意
容量计算考虑到了整个平台群集,而不是仅限于单个机架。 因此,如果在容量不足的某个区域(这里,一个机架等于一个区域)中创建代理池,但另一个区域具有足够的容量,则群集创建将继续,但最终会超时。仅当在创建群集或代理池期间未指定特定区域时,这种容量检查方法才有意义。
几分钟后,该命令将完成并返回有关群集的信息。 有关更多高级选项,请参阅快速入门:使用 Bicep 部署 Azure Nexus Kubernetes 群集。
查看已部署的资源
部署完成后,可以使用 PowerShell 或 Azure 门户查看资源。
若要查看 myNexusK8sCluster
资源组中 myResourceGroup
群集的详细信息,请执行以下 Azure PowerShell 命令:
Get-AzNetworkCloudKubernetesCluster -KubernetesClusterName myNexusK8sCluster `
-ResourceGroupName myResourceGroup `
-SubscriptionId <mySubscription>
此外,若要获取与 myNexusK8sCluster
资源组中的 myResourceGroup
群集关联的代理池名称列表,可以使用以下 Azure PowerShell 命令。
Get-AzNetworkCloudAgentPool -KubernetesClusterName myNexusK8sCluster `
-ResourceGroupName myResourceGroup `
-SubscriptionId <mySubscription>
连接到群集
请注意,成功创建 Nexus Kubernetes 群集并将其连接到 Azure Arc 后,可以使用群集连接功能轻松连接到它。 通过群集连接,可以从任意位置安全地访问和管理群集,方便执行交互式开发、调试和群集管理任务。
有关可用选项的更多详细信息,请参阅连接到 Azure Operator Nexus Kubernetes 群集。
注意
创建 Nexus Kubernetes 群集时,Nexus 会自动创建专用于存储群集资源的托管资源组。 在此组中,将建立 Arc 连接的群集资源。
要访问群集,需要设置群集连接 kubeconfig
。 使用相关 Microsoft Entra 实体登录到 Azure PowerShell 后,可以获取从任意位置(甚至在群集周围的防火墙以外)与群集通信所需的 kubeconfig
。
设置 CLUSTER_NAME、RESOURCE_GROUP、LOCATION 和 SUBSCRIPTION_ID 变量。
$CLUSTER_NAME="myNexusK8sCluster" $LOCATION="<ClusterAzureRegion>" $MANAGED_RESOURCE_GROUP=(Get-AzNetworkCloudKubernetesCluster -KubernetesClusterName $CLUSTER_NAME ` -SubscriptionId <mySubscription> ` -ResourceGroupName myResourceGroup ` |Select-Object -Property ManagedResourceGroupConfigurationName)
运行以下命令以连接到群集。
New-AzConnectedKubernetes -ClusterName $CLUSTER_NAME -ResourceGroupName $MANAGED_RESOURCE_GROUP -Location $LOCATION
使用
kubectl
将请求发送到群集:kubectl get pods -A
现在应会看到来自群集的响应,其中包含所有节点的列表。
注意
如果看到错误消息“无法将访问令牌发布到客户端代理,无法连接到 MSI”,则可能需要执行 az login
以使用 Azure 重新进行身份验证。
添加代理池
在上一步骤中创建的群集包含单个节点池。 我们使用 New-AzNetworkCloudAgentPool
创建命令添加第二个代理池。 以下示例创建一个名为 myNexusK8sCluster-nodepool-2
的代理池:
还可以对某些变量使用默认值,如以下示例所示:
$RESOURCE_GROUP="myResourceGroup"
$SUBSCRIPTION="<Azure subscription ID>"
$CUSTOM_LOCATION="/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
$CUSTOM_LOCATION_TYPE="CustomLocation"
$LOCATION="<ClusterAzureRegion>"
$CLUSTER_NAME="myNexusK8sCluster"
$AGENT_POOL_NAME="myNexusK8sCluster-nodepool-2"
$AGENT_POOL_VM_SIZE="NC_P10_56_v1"
$AGENT_POOL_COUNT="1"
$AGENT_POOL_MODE="User"
定义这些变量后,可以通过执行以下 Azure PowerShell 命令来添加代理池:
New-AzNetworkCloudAgentPool -KubernetesClusterName $CLUSTER_NAME `
-Name $AGENT_POOL_NAME `
-ResourceGroupName $RESOURCE_GROUP `
-SubscriptionId $SUBSCRIPTION `
-ExtendedLocationName $CUSTOM_LOCATION `
-ExtendedLocationType $CUSTOM_LOCATION_TYPE `
-Location $LOCATION `
-Count $AGENT_POOL_COUNT `
-Mode $AGENT_POOL_MODE `
-VMSkuName $AGENT_POOL_VM_SIZE
几分钟后,该命令将完成并返回有关代理池的信息。 有关更多高级选项,请参阅快速入门:使用 Bicep 部署 Azure Nexus Kubernetes 群集。
注意
可以使用初始代理池配置在群集本身的初始创建期间添加多个代理池。 但是,如果要在初始创建之后添加代理池,可以使用上述命令为 Nexus Kubernetes 群集创建其他代理池。
以下输出示例成功创建了代理池。
Get-AzNetworkCloudAgentPool -KubernetesClusterName myNexusK8sCluster `
-ResourceGroupName myResourceGroup `
-SubscriptionId <mySubscription>
Location Name SystemDataCreatedAt SystemDataCreatedBy SystemDataCreatedByType SystemDataLastModifiedAt SystemDataLastModifiedBy
-------- ---- ------------------- ------------------- ----------------------- ------------------------ ------------
eastus myNexusK8sCluster-nodepool-1 09/21/2023 18:14:59 <identity> User 07/18/2023 17:46:45 <identity>
eastus myNexusK8sCluster-nodepool-2 09/25/2023 17:44:02 <identity> User 07/18/2023 17:46:45 <identity>
清理资源
不再需要资源组时,可将其删除。 资源组和资源组中的所有资源都会被删除。
使用 Remove-AzResourceGroup cmdlet 可删除资源组、Kubernetes 群集以及除 Operator Nexus 网络资源外的所有相关资源。
Remove-AzResourceGroup -Name myResourceGroup
后续步骤
现在即可直接通过群集连接或通过 Azure Operator Service Manager 来部署 CNF。