Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
- Разверните кластер Azure Nexus Kubernetes с помощью шаблона Azure Resource Manager.
В этом кратком руководстве описывается, как использовать шаблон Azure Resource Manager (шаблон ARM) для создания кластера Azure Nexus Kubernetes.
Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.
Предпосылки
Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
Если вы предпочитаете запускать справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, подумайте о запуске Azure CLI в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, войдите в Azure CLI с помощью команды az login . Чтобы завершить процесс аутентификации, следуйте шагам, отображаемым в вашем терминале. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI".
Когда вас попросят, установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье Использование расширений и управление ими с помощью Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Установите последнюю версию необходимых расширений Azure CLI.
Для этой статьи требуется версия 2.61.0 или более поздняя версия Azure CLI. Если вы используете Azure Cloud Shell, последняя версия уже установлена.
Если у вас несколько подписок Azure, выберите соответствующий идентификатор подписки, в котором должны выставляться счета за ресурсы с помощью
az accountкоманды.Ознакомьтесь с таблицей SKU виртуальной машины в разделе справочника по списку поддерживаемых номеров SKU виртуальных машин.
Ознакомьтесь с поддерживаемыми версиями Kubernetes для списка поддерживаемых версий Kubernetes.
Создайте группу ресурсов с помощью команды
az group create. Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure. При создании группы ресурсов вам будет предложено указать расположение. Это расположение хранилища метаданных группы ресурсов и место, где ресурсы выполняются в Azure, если вы не указываете другой регион во время создания ресурса. В следующем примере создается группа ресурсов с именем myResourceGroup в расположении eastus.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 locationидентификатор ресурса кластера Nexus оператора Azure.Необходимо создать различные сети в соответствии с вашими требованиями к рабочей нагрузке и иметь соответствующие IP-адреса, доступные для рабочих нагрузок. Чтобы обеспечить плавную реализацию, рекомендуется обратиться к соответствующим группам поддержки за помощью.
В этом руководстве быстрого старта предполагается, что у вас есть базовое понимание концепций Kubernetes. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
Проверьте шаблон
Перед развертыванием шаблона Kubernetes ознакомьтесь с содержимым, чтобы понять его структуру.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"kubernetesClusterName": {
"type": "string",
"metadata": {
"description": "The name of Nexus Kubernetes cluster"
}
},
"location": {
"type": "string",
"metadata": {
"description": "The Azure region where the cluster is to be deployed"
},
"defaultValue": "[resourceGroup().location]"
},
"extendedLocation": {
"type": "string",
"metadata": {
"description": "The custom location of the Nexus instance"
},
"defaultValue": ""
},
"tags": {
"type": "object",
"metadata": {
"description": "The metadata tags to be associated with the cluster resource"
},
"defaultValue": {}
},
"adminUsername": {
"type": "string",
"metadata": {
"description": "The username for the administrative account on the cluster"
},
"defaultValue": "azureuser"
},
"adminGroupObjectIds": {
"type": "array",
"metadata": {
"description": "The object IDs of Azure Active Directory (AAD) groups that will have administrative access to the cluster"
},
"defaultValue": []
},
"cniNetworkId": {
"type": "string",
"metadata": {
"description": "The Azure Resource Manager (ARM) id of the network to be used as the Container Networking Interface (CNI) network"
}
},
"cloudServicesNetworkId": {
"type": "string",
"metadata": {
"description": "The ARM id of the network to be used for cloud services network"
}
},
"podCidrs": {
"type": "array",
"metadata": {
"description": "The CIDR blocks used for Nexus Kubernetes PODs in the cluster"
},
"defaultValue": ["10.244.0.0/16"]
},
"serviceCidrs": {
"type": "array",
"metadata": {
"description": "The CIDR blocks used for k8s service in the cluster"
},
"defaultValue": ["10.96.0.0/16"]
},
"dnsServiceIp": {
"type": "string",
"metadata": {
"description": "The IP address of the DNS service in the cluster"
},
"defaultValue": "10.96.0.10"
},
"agentPoolL2Networks": {
"type": "array",
"metadata": {
"description": "The Layer 2 networks associated with the initial agent pool"
},
"defaultValue": []
/*
{
"networkId": "string",
"pluginType": "SRIOV|DPDK|OSDevice|MACVLAN"
}
*/
},
"agentPoolL3Networks": {
"type": "array",
"metadata": {
"description": "The Layer 3 networks associated with the initial agent pool"
},
"defaultValue": []
/*
{
"ipamEnabled": "True/False",
"networkId": "string",
"pluginType": "SRIOV|DPDK|OSDevice|MACVLAN|IPVLAN"
}
*/
},
"agentPoolTrunkedNetworks": {
"type": "array",
"metadata": {
"description": "The trunked networks associated with the initial agent pool"
},
"defaultValue": []
/*
{
"networkId": "string",
"pluginType": "SRIOV|DPDK|OSDevice|MACVLAN"
}
*/
},
"l2Networks": {
"type": "array",
"metadata": {
"description": "The Layer 2 networks associated with the cluster"
},
"defaultValue": []
/*
{
"networkId": "string",
"pluginType": "SRIOV|DPDK|OSDevice|MACVLAN"
}
*/
},
"l3Networks": {
"type": "array",
"metadata": {
"description": "The Layer 3 networks associated with the cluster"
},
"defaultValue": []
/*
{
"ipamEnabled": "True/False",
"networkId": "string",
"pluginType": "SRIOV|DPDK|OSDevice|MACVLAN|IPVLAN"
}
*/
},
"trunkedNetworks": {
"type": "array",
"metadata": {
"description": "The trunked networks associated with the cluster"
},
"defaultValue": []
/*
{
"networkId": "string",
"pluginType": "SRIOV|DPDK|OSDevice|MACVLAN"
}
*/
},
"ipAddressPools": {
"type": "array",
"metadata": {
"description": "The LoadBalancer IP address pools associated with the cluster"
},
"defaultValue": []
/*
{
"addresses": [
"string"
],
"autoAssign": "True/False",
"name": "sting",
"onlyUseHostIps": "True/False"
}
*/
},
"fabricPeeringEnabled": {
"type": "string",
"metadata": {
"description": "The indicator to specify if the load balancer peers with the network fabric."
},
"defaultValue": "True"
},
"bgpAdvertisements": {
"type": "array",
"metadata": {
"description": "The association of IP address pools to the communities and peers, allowing for announcement of IPs."
},
"defaultValue": []
/*
{
"advertiseToFabric": "True/False",
"communities": [
"string"
],
"ipAddressPools": [
"string"
],
"pools": [
"string"
]
}
*/
},
"bgpPeers": {
"type": "array",
"metadata": {
"description": "The list of additional BgpPeer entities that the Kubernetes cluster will peer with. All peering must be explicitly defined."
},
"defaultValue": []
/*
{
"bfdEnabled": "True/False",
"bgpMultiHop": "True/False",
"myAsn": 0-4294967295,
"name": "string",
"password": "string",
"peerAddress": "string",
"peerPort": 179
}
*/
},
"kubernetesVersion": {
"type": "string",
"metadata": {
"description": "The version of Kubernetes to be used in the Nexus Kubernetes cluster"
},
"defaultValue": "v1.27.1"
},
"controlPlaneCount": {
"type": "int",
"metadata": {
"description": "The number of control plane nodes to be deployed in the cluster"
},
"defaultValue": 1
},
"controlPlaneZones": {
"type": "array",
"metadata": {
"description": "The zones/racks used for placement of the control plane nodes"
},
"defaultValue": []
/* array of strings Example: ["1", "2", "3"] */
},
"agentPoolZones": {
"type": "array",
"metadata": {
"description": "The zones/racks used for placement of the agent pool nodes"
},
"defaultValue": []
/* array of strings Example: ["1", "2", "3"] */
},
"controlPlaneVmSkuName": {
"type": "string",
"metadata": {
"description": "The size of the control plane nodes"
},
"defaultValue": "NC_G6_28_v1"
},
"systemPoolNodeCount": {
"type": "int",
"metadata": {
"description": "The number of worker nodes to be deployed in the initial agent pool"
},
"defaultValue": 1
},
"workerVmSkuName": {
"type": "string",
"metadata": {
"description": "The size of the worker nodes"
},
"defaultValue": "NC_P10_56_v1"
},
"initialPoolAgentOptions": {
"type": "object",
"metadata": {
"description": "The configurations for the initial agent pool"
},
"defaultValue": {}
/*
"hugepagesCount": int,
"hugepagesSize": "2M/1G"
*/
},
"sshPublicKeys": {
"type": "array",
"metadata": {
"description": "The cluster wide SSH public key that will be associated with the given user for secure remote login"
},
"defaultValue": []
/*
{
"keyData": "ssh-rsa AAAAA...."
},
{
"keyData": "ssh-rsa BBBBB...."
}
*/
},
"controlPlaneSshKeys": {
"type": "array",
"metadata": {
"description": "The control plane SSH public key that will be associated with the given user for secure remote login"
},
"defaultValue": []
/*
{
"keyData": "ssh-rsa AAAAA...."
},
{
"keyData": "ssh-rsa BBBBB...."
}
*/
},
"agentPoolSshKeys": {
"type": "array",
"metadata": {
"description": "The agent pool SSH public key that will be associated with the given user for secure remote login"
},
"defaultValue": []
/*
{
"keyData": "ssh-rsa AAAAA...."
},
{
"keyData": "ssh-rsa BBBBB...."
}
*/
},
"labels": {
"type": "array",
"metadata": {
"description": "The labels to assign to the nodes in the cluster for identification and organization"
},
"defaultValue": []
/*
{
"key": "string",
"value": "string"
}
*/
},
"taints": {
"type": "array",
"metadata": {
"description": "The taints to apply to the nodes in the cluster to restrict which pods can be scheduled on them"
},
"defaultValue": []
/*
{
"key": "string",
"value": "string:NoSchedule|PreferNoSchedule|NoExecute"
}
*/
}
},
"resources": [
{
"type": "Microsoft.NetworkCloud/kubernetesClusters",
"apiVersion": "2025-02-01",
"name": "[parameters('kubernetesClusterName')]",
"location": "[parameters('location')]",
"tags": "[parameters('tags')]",
"extendedLocation": {
"name": "[parameters('extendedLocation')]",
"type": "CustomLocation"
},
"properties": {
"kubernetesVersion": "[parameters('kubernetesVersion')]",
"managedResourceGroupConfiguration": {
"name": "[concat(uniqueString(resourceGroup().name), '-', parameters('kubernetesClusterName'))]",
"location": "[parameters('location')]"
},
"aadConfiguration": {
"adminGroupObjectIds": "[parameters('adminGroupObjectIds')]"
},
"administratorConfiguration": {
"adminUsername": "[parameters('adminUsername')]",
"sshPublicKeys": "[if(empty(parameters('sshPublicKeys')), createArray(), parameters('sshPublicKeys'))]"
},
"initialAgentPoolConfigurations": [
{
"name": "[concat(parameters('kubernetesClusterName'), '-nodepool-1')]",
"administratorConfiguration": {
"adminUsername": "[parameters('adminUsername')]",
"sshPublicKeys": "[if(empty(parameters('agentPoolSshKeys')), createArray(), parameters('agentPoolSshKeys'))]"
},
"count": "[parameters('systemPoolNodeCount')]",
"vmSkuName": "[parameters('workerVmSkuName')]",
"mode": "System",
"labels": "[if(empty(parameters('labels')), json('null'), parameters('labels'))]",
"taints": "[if(empty(parameters('taints')), json('null'), parameters('taints'))]",
"agentOptions": "[if(empty(parameters('initialPoolAgentOptions')), json('null'), parameters('initialPoolAgentOptions'))]",
"attachedNetworkConfiguration": {
"l2Networks": "[if(empty(parameters('agentPoolL2Networks')), json('null'), parameters('agentPoolL2Networks'))]",
"l3Networks": "[if(empty(parameters('agentPoolL3Networks')), json('null'), parameters('agentPoolL3Networks'))]",
"trunkedNetworks": "[if(empty(parameters('agentPoolTrunkedNetworks')), json('null'), parameters('agentPoolTrunkedNetworks'))]"
},
"availabilityZones": "[if(empty(parameters('agentPoolZones')), json('null'), parameters('agentPoolZones'))]",
"upgradeSettings": {
"maxSurge": "1"
}
}
],
"controlPlaneNodeConfiguration": {
"administratorConfiguration": {
"adminUsername": "[parameters('adminUsername')]",
"sshPublicKeys": "[if(empty(parameters('controlPlaneSshKeys')), createArray(), parameters('controlPlaneSshKeys'))]"
},
"count": "[parameters('controlPlaneCount')]",
"vmSkuName": "[parameters('controlPlaneVmSkuName')]",
"availabilityZones": "[if(empty(parameters('controlPlaneZones')), json('null'), parameters('controlPlaneZones'))]"
},
"networkConfiguration": {
"cniNetworkId": "[parameters('cniNetworkId')]",
"cloudServicesNetworkId": "[parameters('cloudServicesNetworkId')]",
"dnsServiceIp": "[parameters('dnsServiceIp')]",
"podCidrs": "[parameters('podCidrs')]",
"serviceCidrs": "[parameters('serviceCidrs')]",
"attachedNetworkConfiguration": {
"l2Networks": "[if(empty(parameters('l2Networks')), json('null'), parameters('l2Networks'))]",
"l3Networks": "[if(empty(parameters('l3Networks')), json('null'), parameters('l3Networks'))]",
"trunkedNetworks": "[if(empty(parameters('trunkedNetworks')), json('null'), parameters('trunkedNetworks'))]"
},
"bgpServiceLoadBalancerConfiguration": {
"ipAddressPools": "[if(empty(parameters('ipAddressPools')), json('null'), parameters('ipAddressPools'))]",
"fabricPeeringEnabled": "[if(empty(parameters('fabricPeeringEnabled')), json('null'), parameters('fabricPeeringEnabled'))]",
"bgpAdvertisements": "[if(empty(parameters('bgpAdvertisements')), json('null'), parameters('bgpAdvertisements'))]",
"bgpPeers": "[if(empty(parameters('bgpPeers')), json('null'), parameters('bgpPeers'))]"
}
}
}
}
]
}
После проверки и сохранения файла шаблона с именем kubernetes-deploy.jsonперейдите к следующему разделу, чтобы развернуть шаблон.
Развертывание шаблона
- Создайте файл с именем
kubernetes-deploy-parameters.jsonи добавьте необходимые параметры в формате JSON. В качестве отправной точки можно использовать следующий пример. Замените значения собственными.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"kubernetesClusterName":{
"value": "myNexusK8sCluster"
},
"adminGroupObjectIds": {
"value": [
"00000000-0000-0000-0000-000000000000"
]
},
"cniNetworkId": {
"value": "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/l3Networks/<l3Network-name>"
},
"cloudServicesNetworkId": {
"value": "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.NetworkCloud/cloudServicesNetworks/<csn-name>"
},
"extendedLocation": {
"value": "/subscriptions/<subscription_id>/resourceGroups/<managed_resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
},
"location": {
"value": "eastus"
},
"sshPublicKeys": {
"value": [
{
"keyData": "ssh-rsa AAAAA...."
},
{
"keyData": "ssh-rsa BBBBB...."
}
]
}
}
}
- Разверните шаблон .
az deployment group create \
--resource-group myResourceGroup \
--template-file kubernetes-deploy.json \
--parameters @kubernetes-deploy-parameters.json
Если недостаточно емкости для развертывания запрошенных узлов кластера, появится сообщение об ошибке. Однако это сообщение не содержит никаких сведений о доступной емкости. Он указывает, что создание кластера не может продолжаться из-за нехватки емкости.
Замечание
Вычисление емкости учитывает весь кластер платформы, а не ограничивается отдельными стойками. Таким образом, если пул агентов создается в зоне (где стойка равна зоне) с недостаточной емкостью, но другая зона имеет достаточную емкость, создание кластера продолжается, но в конечном итоге истекает время ожидания. Этот подход к проверке емкости имеет смысл только в том случае, если определенная зона не указана во время создания кластера или пула агентов.
Проверка развернутых ресурсов
После завершения развертывания можно просмотреть ресурсы с помощью интерфейса командной строки или портала 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
Подключение к кластеру
Теперь, когда кластер Nexus Kubernetes успешно создан и подключен к Azure Arc, вы можете легко подключиться к нему с помощью функции подключения кластера. Подключение к кластеру позволяет безопасно получать доступ к кластеру и управлять ими в любом месте, что упрощает интерактивную разработку, отладку и задачи администрирования кластера.
Дополнительные сведения о доступных параметрах см. в разделе "Подключение к кластеру Kubernetes" оператора Azure Nexus.
Замечание
При создании кластера Nexus Kubernetes Приложение Nexus автоматически создает управляемую группу ресурсов, выделенную для хранения ресурсов кластера, в этой группе устанавливается подключенный к Arc ресурс кластера.
Чтобы получить доступ к кластеру, необходимо настроить подключение kubeconfigкластера. После входа в Azure CLI с соответствующей сущностью Microsoft Entra вы можете получить необходимые kubeconfig сведения для взаимодействия с кластером из любого места, даже за пределами брандмауэра, который окружает его.
Задать
CLUSTER_NAMEиRESOURCE_GROUPSUBSCRIPTION_IDпеременные.CLUSTER_NAME="myNexusK8sCluster" RESOURCE_GROUP="myResourceGroup" SUBSCRIPTION_ID=<set the correct subscription_id>Запрос управляемой группы ресурсов с
azпомощью и хранения вMANAGED_RESOURCE_GROUPaz account set -s $SUBSCRIPTION_ID MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)Следующая команда запускает прокси-сервер connectedk8s, который позволяет подключаться к серверу API Kubernetes для указанного кластера Nexus Kubernetes.
az connectedk8s proxy -n $CLUSTER_NAME -g $MANAGED_RESOURCE_GROUP &Используйте
kubectlдля отправки запросов в кластер:kubectl get pods -AТеперь вы увидите ответ из кластера, содержащий список всех узлов.
Замечание
Если появится сообщение об ошибке "Не удалось опубликовать маркер доступа к прокси-серверу клиента для подключения к MSI", может потребоваться выполнить az login повторную проверку подлинности с помощью Azure.
Добавление пула агентов
Кластер, созданный на предыдущем шаге, имеет один пул узлов. Давайте добавим второй пул агентов с помощью шаблона ARM. В следующем примере создается пул агентов с именем myNexusK8sCluster-nodepool-2:
- Изучите шаблон.
Прежде чем добавлять шаблон пула агентов, давайте рассмотрим содержимое, чтобы понять его структуру.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"kubernetesClusterName": {
"type": "string",
"metadata": {
"description": "The name of Nexus Kubernetes cluster"
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The Azure region where the cluster is to be deployed"
}
},
"extendedLocation": {
"type": "string",
"metadata": {
"description": "The custom location of the Nexus instance"
}
},
"adminUsername": {
"type": "string",
"defaultValue": "azureuser",
"metadata": {
"description": "The username for the administrative account on the cluster"
}
},
"agentPoolSshKeys": {
"type": "array",
"metadata": {
"description": "The agent pool SSH public key that will be associated with the given user for secure remote login"
},
"defaultValue": []
/*
{
"keyData": "ssh-rsa AAAAA...."
},
{
"keyData": "ssh-rsa BBBBB...."
}
*/
},
"agentPoolNodeCount": {
"type": "int",
"defaultValue": 1,
"metadata": {
"description": "Number of nodes in the agent pool"
}
},
"agentPoolName": {
"type": "string",
"defaultValue": "nodepool-2",
"metadata": {
"description": "Agent pool name"
}
},
"agentVmSku": {
"type": "string",
"defaultValue": "NC_P10_56_v1",
"metadata": {
"description": "VM size of the agent nodes"
}
},
"agentPoolZones": {
"type": "array",
"defaultValue": [],
"metadata": {
"description": "The zones/racks used for placement of the agent pool nodes"
}
/* array of strings Example: ["1", "2", "3"] */
},
"agentPoolMode": {
"type": "string",
"defaultValue": "User",
"metadata": {
"description": "Agent pool mode"
}
},
"agentOptions": {
"type": "object",
"defaultValue": {},
"metadata": {
"description": "The configurations for the initial agent pool"
}
/*
"hugepagesCount": int,
"hugepagesSize": "2M/1G"
*/
},
"labels": {
"type": "array",
"defaultValue": [],
"metadata": {
"description": "The labels to assign to the nodes in the cluster for identification and organization"
}
/*
{
"key": "string",
"value": "string"
}
*/
},
"taints": {
"type": "array",
"defaultValue": [],
"metadata": {
"description": "The taints to apply to the nodes in the cluster to restrict which pods can be scheduled on them"
}
/*
{
"key": "string",
"value": "string:NoSchedule|PreferNoSchedule|NoExecute"
}
*/
},
"l2Networks": {
"type": "array",
"defaultValue": [],
"metadata": {
"description": "The Layer 2 networks to connect to the agent pool"
}
/*
{
"networkId": "string",
"pluginType": "SRIOV|DPDK|OSDevice|MACVLAN|IPVLAN"
}
*/
},
"l3Networks": {
"type": "array",
"defaultValue": [],
"metadata": {
"description": "The Layer 3 networks to connect to the agent pool"
}
/*
{
"ipamEnabled": "True/False",
"networkId": "string",
"pluginType": "SRIOV|DPDK|OSDevice|MACVLAN|IPVLAN"
}
*/
},
"trunkedNetworks": {
"type": "array",
"defaultValue": [],
"metadata": {
"description": "The trunked networks to connect to the agent pool"
}
/*
{
"networkId": "string",
"pluginType": "SRIOV|DPDK|OSDevice|MACVLAN|IPVLAN"
}
*/
}
},
"resources": [
{
"type": "Microsoft.NetworkCloud/kubernetesClusters/agentpools",
"apiVersion": "2025-02-01",
"name": "[concat(parameters('kubernetesClusterName'), '/', parameters('kubernetesClusterName'), '-', parameters('agentPoolName'))]",
"location": "[parameters('location')]",
"extendedLocation": {
"name": "[parameters('extendedLocation')]",
"type": "CustomLocation"
},
"properties": {
"administratorConfiguration": {
"adminUsername": "[parameters('adminUsername')]",
"sshPublicKeys": "[if(empty(parameters('agentPoolSshKeys')), json('null'), parameters('agentPoolSshKeys'))]"
},
"count": "[parameters('agentPoolNodeCount')]",
"mode": "[parameters('agentPoolMode')]",
"vmSkuName": "[parameters('agentVmSku')]",
"labels": "[if(empty(parameters('labels')), json('null'), parameters('labels'))]",
"taints": "[if(empty(parameters('taints')), json('null'), parameters('taints'))]",
"agentOptions": "[if(empty(parameters('agentOptions')), json('null'), parameters('agentOptions'))]",
"attachedNetworkConfiguration": {
"l2Networks": "[if(empty(parameters('l2Networks')), json('null'), parameters('l2Networks'))]",
"l3Networks": "[if(empty(parameters('l3Networks')), json('null'), parameters('l3Networks'))]",
"trunkedNetworks": "[if(empty(parameters('trunkedNetworks')), json('null'), parameters('trunkedNetworks'))]"
},
"availabilityZones": "[if(empty(parameters('agentPoolZones')), json('null'), parameters('agentPoolZones'))]",
"upgradeSettings": {
"maxSurge": "1"
}
},
"dependsOn": []
}
]
}
После проверки и сохранения файла шаблона с именем kubernetes-add-agentpool.jsonперейдите к следующему разделу, чтобы развернуть шаблон.
- Создайте файл с именем
kubernetes-nodepool-parameters.jsonи добавьте необходимые параметры в формате JSON. В качестве отправной точки можно использовать следующий пример. Замените значения собственными.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"kubernetesClusterName":{
"value": "myNexusK8sCluster"
},
"extendedLocation": {
"value": "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/microsoft.extendedlocation/customlocations/<custom-location-name>"
}
}
}
- Разверните шаблон .
az deployment group create \
--resource-group myResourceGroup \
--template-file kubernetes-add-agentpool.json \
--parameters @kubernetes-nodepool-parameters.json
Замечание
Во время первоначального создания кластера можно добавить несколько пулов агентов с помощью конфигураций начального пула агентов. Однако если вы хотите добавить пулы агентов после первоначального создания, можно использовать приведенную выше команду для создания дополнительных пулов агентов для кластера 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
Дальнейшие шаги
Теперь вы можете развернуть CNFS напрямую через подключение к кластеру или через Диспетчер служб операторов Azure.