Avvio rapido: distribuire un cluster Kubernetes usando un modello di Azure Resource Manager
Si applica a: Azure Stack HCI, versione 23H2
Questa guida introduttiva illustra come distribuire un cluster Kubernetes in AKS Arc usando un modello di Azure Resource Manager. Azure Arc estende le funzionalità di gestione di Azure ai cluster Kubernetes ovunque, fornendo un approccio unificato alla gestione di ambienti diversi.
Prima di iniziare
Questo articolo presuppone una conoscenza di base dei concetti relativi a Kubernetes.
Per distribuire un modello di Resource Manager, è necessario accedere in scrittura alle risorse distribuite e accedere a tutte le operazioni sul tipo di risorsa Microsoft.Resources/deployments. Ad esempio, per distribuire una macchina virtuale, sono necessarie autorizzazioni Microsoft.Compute/virtualMachines/write e Microsoft.Resources/deployments/* . Per un elenco dei ruoli e delle autorizzazioni, vedere Ruoli predefiniti di Azure.
Prerequisiti
- Un account Azure con una sottoscrizione attiva.
- Cluster Azure Stack HCI 23H2.
- Versione più recente dell'interfaccia della riga di comando di Azure.
Passaggio 1: preparare l'account Azure
Accedere ad Azure: aprire il prompt dei comandi o il terminale e accedere all'account Azure usando l'interfaccia della riga di comando di Azure:
az login
Impostare la sottoscrizione: sostituire
<your-subscription-id>
con l'ID sottoscrizione:az account set --subscription "<your-subscription-id>"
Passaggio 2: creare una coppia di chiavi SSH con l'interfaccia della riga di comando di Azure
az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"
oppure creare una coppia di chiavi SSH usando ssh-keygen:
ssh-keygen -t rsa -b 4096
Per distribuire il modello, è necessario specificare la chiave pubblica dalla coppia SSH. Per recuperare la chiave pubblica, usare il az sshkey show
comando:
az sshkey show --name "mySSHKey" --resource-group "myResourceGroup" --query "publicKey"
Per impostazione predefinita, i file di chiave SSH vengono creati nella directory ~/.ssh . Eseguire il az sshkey create
comando o ssh-keygen
per sovrascrivere qualsiasi coppia di chiavi SSH esistente con lo stesso nome.
Per altre informazioni su come creare le chiavi SSH, vedere Creare e gestire chiavi SSH per l'autenticazione in una macchina virtuale Linux in Azure.
Passaggio 3: Esaminare il modello
Il modello usato in questa guida introduttiva è dal repository modelli di avvio rapido di Azure:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"provisionedClusterName": {
"type": "string",
"defaultValue": "aksarc-armcluster",
"metadata": {
"description": "The name of the AKS Arc Cluster resource."
}
},
"location": {
"type": "string",
"defaultValue": "eastus",
"metadata": {
"description": "The location of the AKS Arc Cluster resource."
}
},
"resourceTags": {
"type": "object",
"defaultValue": {}
},
"sshRSAPublicKey": {
"type": "string",
"metadata": {
"description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH '"
}
},
"enableAHUB": {
"type": "string",
"defaultValue": "NotApplicable",
"metadata": {
"description": "Azure Hybrid Benefit for Windows Server licenses. NotApplicable, True, False."
}
},
"agentName": {
"type": "string",
"defaultValue": "nodepool",
"metadata": {
"description": "The name of the node pool."
}
},
"agentVMSize": {
"type": "string",
"defaultValue": "Standard_A4_v2",
"metadata": {
"description": "The VM size for node pools."
}
},
"agentCount": {
"type": "int",
"defaultValue": 1,
"minValue": 1,
"maxValue": 50,
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentOsType": {
"type": "string",
"defaultValue": "Linux",
"metadata": {
"description": "The OS Type for the agent pool. Values are Linux and Windows."
}
},
"loadBalancerCount": {
"type": "int",
"defaultValue": 0,
"metadata": {
"description": "The number of load balancers."
}
},
"kubernetesVersion": {
"type": "string",
"metadata": {
"description": "The version of Kubernetes."
}
},
"controlPlaneNodeCount": {
"type": "int",
"defaultValue": 1,
"minValue": 1,
"maxValue": 5,
"metadata": {
"description": "The number of control plane nodes for the cluster."
}
},
"controlPlaneIp": {
"type": "string",
"defaultValue": "<default_value>",
"metadata": {
"description": "Control plane IP address."
}
},
"controlPlaneVMSize": {
"type": "string",
"defaultValue": "Standard_A4_v2",
"metadata": {
"description": "The VM size for control plane."
}
},
"vnetSubnetIds": {
"type": "array",
"metadata": {
"description": "List of subnet Ids for the AKS cluster."
}
},
"podCidr": {
"type": "string",
"defaultValue": "10.244.0.0/16",
"metadata": {
"description": "The VM size for control plane."
}
},
"networkPolicy": {
"type": "string",
"defaultValue": "calico",
"metadata": {
"description": "Network policy to use for Kubernetes pods. Only options supported is calico."
}
},
"customLocation": {
"type": "string",
"metadata": {
"description": "Fully qualified custom location resource Id."
}
}
},
"resources": [
{
"apiVersion": "2024-01-01",
"type": "Microsoft.Kubernetes/ConnectedClusters",
"kind": "ProvisionedCluster",
"location": "[parameters('location')]",
"name": "[parameters('provisionedClusterName')]",
"tags": "[parameters('resourceTags')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"agentPublicKeyCertificate":"" ,
"aadProfile": {
"enableAzureRBAC": false
}
}
},
{
"apiVersion": "2024-01-01",
"type": "microsoft.hybridcontainerservice/provisionedclusterinstances",
"name": "default",
"scope": "[concat('Microsoft.Kubernetes/ConnectedClusters', '/', parameters('provisionedClusterName'))]",
"dependsOn": [
"[resourceId('Microsoft.Kubernetes/ConnectedClusters', parameters('provisionedClusterName'))]"
],
"properties": {
"agentPoolProfiles": [
{
"count": "[parameters('agentCount')]",
"name":"[parameters('agentName')]",
"osType": "[parameters('agentOsType')]",
"vmSize": "[parameters('agentVMSize')]"
}
],
"cloudProviderProfile": {
"infraNetworkProfile": {
"vnetSubnetIds": "[parameters('vnetSubnetIds')]"
}
},
"controlPlane": {
"count": "[parameters('controlPlaneNodeCount')]",
"controlPlaneEndpoint": {
"hostIP": "[parameters('controlPlaneIp')]"
},
"vmSize": "[parameters('controlPlaneVMSize')]"
},
"licenseProfile": {
"azureHybridBenefit": "[parameters('enableAHUB')]"
},
"kubernetesVersion": "[parameters('kubernetesVersion')]",
"linuxProfile": {
"ssh": {
"publicKeys": [
{
"keyData": "[parameters('sshRSAPublicKey')]"
}
]
}
},
"networkProfile": {
"loadBalancerProfile": {
"count": "[parameters('loadBalancerCount')]"
},
"networkPolicy": "[parameters('networkPolicy')]",
"podCidr": "[parameters('podCidr')]"
},
"storageProfile": {
"nfsCsiDriver": {
"enabled": false
},
"smbCsiDriver": {
"enabled": false
}
}
},
"extendedLocation": {
"name": "[parameters('customLocation')]",
"type": "CustomLocation"
}
}
]
}
Passaggio 4: Distribuire il modello
Per distribuire il modello, eseguire il comando seguente per distribuire il cluster Kubernetes:
az deployment group create \
--name "<deployment-name>" \
--resource-group "<resource-group-name>" \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.kubernetes/aks-arc/azuredeploy.json" \
--parameters provisionedClusterName="<cluster-name> location="eastus" sshRSApublicKey="" etc..."
La creazione del cluster richiede alcuni minuti. Attendere il completamento della distribuzione del cluster prima di procedere al passaggio successivo.
Passaggio 5: Verificare la distribuzione
Al termine della distribuzione, usare il comando seguente per verificare che il cluster Kubernetes sia attivo ed in esecuzione:
az aksarc show --resource-group "<resource-group-name>" --name "<cluster-name>" --output table
Passaggio 6: Connettersi al cluster
Per connettersi al cluster, eseguire il
az connectedk8s proxy
comando . Il comando scarica ed esegue un file binario proxy nel computer client e recupera un file kubeconfig associato al cluster:az connectedk8s proxy --name <cluster name> -g <resource group>
In alternativa, usare il client della riga di comando Kubernetes, kubectl. Se si usa Azure Cloud Shell, kubectl è già installato. Per installare ed eseguire kubectl in locale, eseguire il
az aksarc install-cli
comando.Configurare kubectl per connettersi al cluster Kubernetes usando il
az aksarc get-credentials
comando . Questo comando scarica le credenziali e configura l'interfaccia della riga di comando di Kubernetes per usarle:az aksarc get-credentials --resource-group "<resource-group-name>" --name "<cluster-name>"
Verificare la connessione al cluster usando il
kubectl get
comando . Questo comando restituisce un elenco dei nodi del cluster:kubectl get nodes -A --kubeconfig .\<path to kubecofig>
L'output dell'esempio seguente mostra i tre nodi creati nei passaggi precedenti. Assicurarsi che lo stato del nodo sia Pronto:
NAME STATUS ROLES AGE VERSION aks-agentpool-27442051-vmss000000 Ready agent 10m v1.27.7 aks-agentpool-27442051-vmss000001 Ready agent 10m v1.27.7 aks-agentpool-27442051-vmss000002 Ready agent 11m v1.27.7
Risorse del modello
connectedClusters
Nome | Descrizione | Valore |
---|---|---|
type |
Tipo di risorsa. | Microsoft.Kubernetes/ConnectedClusters |
apiVersion |
Versione dell'API risorsa. | 2024-01-01 |
name |
Nome della risorsa. | Stringa (obbligatoria) Limite di caratteri: 1-63 Caratteri validi: alfanumerici, caratteri di sottolineatura e trattini. Deve iniziare e terminare con un carattere alfanumerico. |
location |
Posizione geografica in cui vive la risorsa. | Stringa (obbligatoria). |
tags |
Tag di risorse. | Dizionario dei nomi e dei valori dei tag. Vedere Tag nei modelli. |
extendedLocation |
Percorso esteso della macchina virtuale. | ExtendedLocation |
identity |
Identità del cluster connesso, se configurata. | |
properties |
Proprietà di un cluster connesso. |
ProvisionedClusterInstances
Nome | Descrizione | Valore |
---|---|---|
type |
Tipo di risorsa | microsoft.hybridcontainerservice/provisionedclusterinstances |
apiVersion |
Versione dell'API delle risorse | 2024-01-01 |
name |
Nome della risorsa | Stringa (obbligatoria). Non modificare questa impostazione dal valore predefinito. |
properties |
Proprietà di un cluster connesso. | |
extendedLocation |
Posizione estesa del cluster. | ExtendedLocation |
ExtendedLocation
Nome | Descrizione | Valore |
---|---|---|
name |
ID della posizione estesa. | string |
type |
Tipo della posizione estesa. | CustomLocation |