Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
- Stellen Sie einen Azure Nexus Kubernetes-Cluster mithilfe einer Azure Resource Manager-Vorlage bereit.
In dieser Schnellstartanleitung wird beschrieben, wie Sie eine Azure Resource Manager-Vorlage (ARM-Vorlage) zum Erstellen eines Azure Nexus Kubernetes-Clusters verwenden.
Eine Azure Resource Manager-Vorlage ist eine JSON (JavaScript Object Notation)-Datei, welche die Infrastruktur und die Konfiguration für Ihr Projekt definiert. Die Vorlage verwendet eine deklarative Syntax. Sie beschreiben Ihre geplante Bereitstellung, ohne die Abfolge der Programmierbefehle zu schreiben, mit denen die Bereitstellung erstellt wird.
Voraussetzungen
Wenn Sie nicht über ein Azure-Konto verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter "Erste Schritte mit Azure Cloud Shell".
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen möchten, installieren Sie die Azure CLI. Wenn Sie mit Windows oder macOS arbeiten, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Um den Authentifizierungsprozess abzuschließen, führen Sie die schritte aus, die in Ihrem Terminal angezeigt werden. Weitere Anmeldeoptionen finden Sie unter Authentifizieren bei Azure mithilfe der Azure CLI.
Wenn Sie dazu aufgefordert werden, installieren Sie die Azure CLI-Erweiterung bei der ersten Verwendung. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden und Verwalten von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um auf die neueste Version zu aktualisieren.
Installieren Sie die neueste Version der erforderlichen Azure CLI-Erweiterungen.
Dieser Artikel erfordert Version 2.61.0 oder höher der Azure CLI. Wenn Sie Azure Cloud Shell verwenden, ist die neueste Version bereits installiert.
Wenn Sie über mehrere Azure-Abonnements verfügen, wählen Sie die entsprechende Abonnement-ID aus, in der die Ressourcen mit dem
az accountBefehl in Rechnung gestellt werden sollen.Die VM-SKU-Tabelle finden Sie im Referenzabschnitt für die Liste der unterstützten VM-SKUs.
Die unterstützten Kubernetes-Versionen finden Sie in der Liste der unterstützten Kubernetes-Versionen.
Erstellen Sie eine Ressourcengruppe mit dem Befehl
az group create. Eine Azure-Ressourcengruppe ist eine logische Gruppe, in der Azure-Ressourcen bereitgestellt und verwaltet werden. Wenn Sie eine Ressourcengruppe erstellen, werden Sie zur Angabe eines Speicherorts aufgefordert. An diesem Speicherort werden die Metadaten Ihrer Ressourcengruppe gespeichert. Darüber hinaus werden dort die Ressourcen in Azure ausgeführt, wenn Sie während der Ressourcenerstellung keine andere Region angeben. Das folgende Beispiel erstellt eine Ressourcengruppe mit dem Namen myResourceGroup am Standort eastus.az group create --name myResourceGroup --location eastusDas folgende Ausgabebeispiel ähnelt der erfolgreichen Erstellung der Ressourcengruppe:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null }Zum Bereitstellen einer Bicep-Datei oder ARM-Vorlage benötigen Sie Schreibzugriff auf die Ressourcen, die Sie bereitstellen, und Zugriff auf alle Vorgänge für den Ressourcentyp Microsoft.Resources/deployments. Um beispielsweise einen Cluster bereitzustellen, benötigen Sie Microsoft.NetworkCloud/kubernetesclusters/write und Microsoft.Resources/deployments/* Berechtigungen. Eine Liste der Rollen und Berechtigungen finden Sie in den integrierten Azure-Rollen.
Sie benötigen die
custom locationRessourcen-ID Ihres Azure Operator Nexus-Clusters.Sie müssen verschiedene Netzwerke entsprechend Ihren spezifischen Workloadanforderungen erstellen, und es ist wichtig, dass die entsprechenden IP-Adressen für Ihre Workloads verfügbar sind. Um eine reibungslose Implementierung sicherzustellen, empfiehlt es sich, die entsprechenden Supportteams zur Unterstützung zu konsultieren.
Für diese Schnellstartanleitung werden Grundkenntnisse in Bezug auf die Kubernetes-Konzepte vorausgesetzt. Weitere Informationen finden Sie unter Kubernetes-Kernkonzepte für Azure Kubernetes Service (AKS).
Überprüfen der Vorlage
Bevor Sie die Kubernetes-Vorlage bereitstellen, überprüfen wir den Inhalt, um seine Struktur zu verstehen.
{
"$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'))]"
}
}
}
}
]
}
Nachdem Sie die Vorlagendatei überprüft kubernetes-deploy.jsonund gespeichert haben, fahren Sie mit dem nächsten Abschnitt fort, um die Vorlage bereitzustellen.
Implementieren der Vorlage
- Erstellen Sie eine Datei namens
kubernetes-deploy-parameters.json, und fügen Sie die erforderlichen Parameter im JSON-Format hinzu. Sie können das folgende Beispiel als Ausgangspunkt verwenden. Ersetzen Sie die Werte durch Ihre eigenen.
{
"$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...."
}
]
}
}
}
- Stellen Sie die Vorlage bereit.
az deployment group create \
--resource-group myResourceGroup \
--template-file kubernetes-deploy.json \
--parameters @kubernetes-deploy-parameters.json
Wenn nicht genügend Kapazität zum Bereitstellen angeforderter Clusterknoten vorhanden ist, wird eine Fehlermeldung angezeigt. Diese Meldung enthält jedoch keine Details zur verfügbaren Kapazität. Es gibt an, dass die Clustererstellung aufgrund unzureichender Kapazität nicht fortgesetzt werden kann.
Hinweis
Bei der Kapazitätsberechnung wird der gesamte Plattformcluster berücksichtigt, anstatt auf einzelne Racks beschränkt zu sein. Wenn also ein Agentpool in einer Zone (in der ein Rack einer Zone entspricht) mit unzureichender Kapazität erstellt wird, aber eine andere Zone über genügend Kapazität verfügt, wird die Clustererstellung fortgesetzt, wird aber letztendlich ein Timeout ausgeführt. Dieser Ansatz zur Kapazitätsüberprüfung ist nur sinnvoll, wenn während der Erstellung des Cluster- oder Agentpools keine bestimmte Zone angegeben wird.
Überprüfen der bereitgestellten Ressourcen
Nach Abschluss der Bereitstellung können Sie die Ressourcen mithilfe der CLI oder des Azure-Portals anzeigen.
Führen Sie den folgenden Azure CLI-Befehl aus, um die Details des myNexusK8sCluster Clusters in der myResourceGroup Ressourcengruppe anzuzeigen:
az networkcloud kubernetescluster show \
--name myNexusK8sCluster \
--resource-group myResourceGroup
Um eine Liste der Agentpoolnamen abzurufen, die dem myNexusK8sCluster Cluster in der myResourceGroup Ressourcengruppe zugeordnet sind, können Sie außerdem den folgenden Azure CLI-Befehl verwenden.
az networkcloud kubernetescluster agentpool list \
--kubernetes-cluster-name myNexusK8sCluster \
--resource-group myResourceGroup \
--output table
Herstellen einer Verbindung mit dem Cluster
Nachdem der Nexus Kubernetes-Cluster erfolgreich erstellt und mit Azure Arc verbunden wurde, können Sie mit der Clusterverbindungsfunktion problemlos eine Verbindung damit herstellen. Mithilfe von Clusterverbindungen können Sie von praktisch überall aus auf Ihren Cluster zugreifen und diesen verwalten, sodass sie praktisch für interaktive Entwicklungs-, Debugging- und Clusterverwaltungsaufgaben geeignet ist.
Ausführlichere Informationen zu verfügbaren Optionen finden Sie unter Herstellen einer Verbindung mit einem Azure Operator Nexus Kubernetes-Cluster.
Hinweis
Wenn Sie einen Nexus Kubernetes-Cluster erstellen, erstellt Nexus automatisch eine verwaltete Ressourcengruppe, die zum Speichern der Clusterressourcen in dieser Gruppe dient, wird die mit Arc verbundene Clusterressource eingerichtet.
Um auf Ihren Cluster zuzugreifen, müssen Sie die Clusterverbindung kubeconfigeinrichten. Nachdem Sie sich bei Azure CLI mit der relevanten Microsoft Entra-Entität angemeldet haben, können Sie die kubeconfig erforderliche Kommunikation mit dem Cluster von praktisch überall aus abrufen, auch außerhalb der Firewall, die sie umgibt.
Festlegen
CLUSTER_NAMEundRESOURCE_GROUPSUBSCRIPTION_IDVariablen.CLUSTER_NAME="myNexusK8sCluster" RESOURCE_GROUP="myResourceGroup" SUBSCRIPTION_ID=<set the correct subscription_id>Abfrage verwalteter Ressourcengruppe mit
azund Speichern inMANAGED_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)Der folgende Befehl startet einen connectedk8s-Proxy, mit dem Sie eine Verbindung mit dem Kubernetes-API-Server für den angegebenen Nexus Kubernetes-Cluster herstellen können.
az connectedk8s proxy -n $CLUSTER_NAME -g $MANAGED_RESOURCE_GROUP &Wird
kubectlverwendet, um Anforderungen an den Cluster zu senden:kubectl get pods -ANun sollte eine Antwort des Clusters mit der Liste aller Knoten angezeigt werden.
Hinweis
Wenn die Fehlermeldung "Fehler beim Bereitstellen des Zugriffstokens an ClientproxyFailed zum Herstellen einer Verbindung mit MSI" angezeigt wird, müssen Sie möglicherweise eine az login erneute Authentifizierung bei Azure durchführen.
Hinzufügen eines Agentpools
Der im vorherigen Schritt erstellte Cluster verfügt über einen einzelnen Knotenpool. Fügen wir nun einen zweiten Agentpool mithilfe der ARM-Vorlage hinzu. Im folgenden Beispiel wird ein Agentpool mit dem Namen myNexusK8sCluster-nodepool-2erstellt:
- Überprüfen Sie die Vorlage.
Bevor Sie die Agentpoolvorlage hinzufügen, überprüfen wir den Inhalt, um seine Struktur zu verstehen.
{
"$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": []
}
]
}
Nachdem Sie die Vorlagendatei überprüft kubernetes-add-agentpool.jsonund gespeichert haben, fahren Sie mit dem nächsten Abschnitt fort, um die Vorlage bereitzustellen.
- Erstellen Sie eine Datei namens
kubernetes-nodepool-parameters.json, und fügen Sie die erforderlichen Parameter im JSON-Format hinzu. Sie können das folgende Beispiel als Ausgangspunkt verwenden. Ersetzen Sie die Werte durch Ihre eigenen.
{
"$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>"
}
}
}
- Stellen Sie die Vorlage bereit.
az deployment group create \
--resource-group myResourceGroup \
--template-file kubernetes-add-agentpool.json \
--parameters @kubernetes-nodepool-parameters.json
Hinweis
Sie können während der ersten Erstellung Ihres Clusters mehrere Agentpools selbst hinzufügen, indem Sie die anfänglichen Agentpoolkonfigurationen verwenden. Wenn Sie jedoch Agentpools nach der ersten Erstellung hinzufügen möchten, können Sie den obigen Befehl verwenden, um zusätzliche Agentpools für Ihren Nexus Kubernetes-Cluster zu erstellen.
Das folgende Ausgabebeispiel ähnelt der erfolgreichen Erstellung des Agentpools.
$ 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
Bereinigen von Ressourcen
Wenn sie nicht mehr benötigt wird, löschen Sie die Ressourcengruppe. Die Ressourcengruppe und alle Ressourcen in der Ressourcengruppe werden gelöscht.
Verwenden Sie den Befehl " az group delete ", um die Ressourcengruppe, den Kubernetes-Cluster und alle zugehörigen Ressourcen außer den Operator Nexus-Netzwerkressourcen zu entfernen.
az group delete --name myResourceGroup --yes --no-wait
Nächste Schritte
Sie können die CNFs jetzt entweder direkt über cluster connect oder über Azure Operator Service Manager bereitstellen.