Avvio rapido: Distribuire un Host contenitore Linux di Azure per un cluster del servizio Azure Kubernetes tramite un modello di ARM
Introduzione all'host contenitore Linux di Azure usando un modello di Azure Resource Manager (ARM) per distribuire un cluster Host contenitore Linux di Azure. Dopo aver installato i prerequisiti, si creerà una coppia di chiavi SSH, si esaminerà il modello, si distribuirà il modello e lo si convalida e quindi si distribuirà un'applicazione.
Un modello di Azure Resource Manager è un file JSON (JavaScript Object Notation) che definisce l'infrastruttura e la configurazione del progetto. Il modello utilizza la sintassi dichiarativa. Si descrive la distribuzione prevista senza scrivere la sequenza di comandi di programmazione necessari per creare la distribuzione.
Prerequisiti
-
Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
Usare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Avvio rapido in Azure Cloud Shell - Bash.
Se si preferisce eseguire i comandi di riferimento dell'interfaccia della riga di comando in locale, installare l'interfaccia della riga di comando di Azure. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se si usa un'installazione locale, accedere all'interfaccia della riga di comando di Azure con il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Accedere tramite l'interfaccia della riga di comando di Azure.
Quando richiesto, al primo utilizzo installare l'estensione dell'interfaccia della riga di comando di Azure. Per altre informazioni sulle estensioni, vedere Usare le estensioni con l'interfaccia della riga di comando di Azure.
Eseguire az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, eseguire az upgrade.
Se il kubectl non è già installato, installarlo tramite l'interfaccia della riga di comando di Azure usando
az aks install-cli
o seguire le istruzioni upstream.Per creare un cluster del servizio Azure Kubernetes usando un modello di Resource Manager, è necessario fornire una chiave pubblica SSH. Se è necessaria questa risorsa, vedere la sezione successiva. In caso contrario, andare alla sezione Esaminare il modello.
L'identità usata per creare il cluster ha le autorizzazioni minime adeguate. Per altre informazioni sull'accesso e l'identità per il servizio Azure Kubernetes, vedere Opzioni di accesso e identità per il servizio Azure Kubernetes.
Per distribuire un file Bicep o un modello di ARM, è necessario l'accesso in scrittura alle risorse distribuite e l'accesso per tutte le operazioni sul tipo di risorsa Microsoft.Resources/deployments. Ad esempio, per distribuire una macchina virtuale, sono necessarie le autorizzazioni Microsoft.Compute/virtualMachines/write e Microsoft.Resources/deployments/*. Per un elenco dei ruoli e delle autorizzazioni, vedere Ruoli predefiniti di Azure.
Creare una coppia di chiavi SSH
Per accedere ai nodi del servizio Azure Kubernetes, connettersi usando una coppia di chiavi SSH (pubblica e privata), generata usando il comando ssh-keygen
. Per impostazione predefinita, questi file vengono creati nella directory ~/.ssh. L'esecuzione del comando ssh-keygen
sovrascrive qualsiasi coppia di chiavi SSH con lo stesso nome già esistente nella posizione specificata.
Passare a https://shell.azure.com per aprire Cloud Shell nel browser.
Eseguire il comando
ssh-keygen
. L'esempio seguente crea una coppia di chiavi SSH usando la crittografia RSA e una lunghezza in bit pari a 4096:ssh-keygen -t rsa -b 4096
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.
Rivedere il modello
La distribuzione seguente usa un modello di ARM da modelli di avvio rapido di Azure.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"clusterName": {
"type": "string",
"defaultValue": "azurelinuxakscluster",
"metadata": {
"description": "The name of the Managed Cluster resource."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location of the Managed Cluster resource."
}
},
"dnsPrefix": {
"type": "string",
"metadata": {
"description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
}
},
"osDiskSizeGB": {
"type": "int",
"defaultValue": 0,
"minValue": 0,
"maxValue": 1023,
"metadata": {
"description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
}
},
"agentCount": {
"type": "int",
"defaultValue": 3,
"minValue": 1,
"maxValue": 50,
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentVMSize": {
"type": "string",
"defaultValue": "Standard_DS2_v2",
"metadata": {
"description": "The size of the Virtual Machine."
}
},
"linuxAdminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Linux Virtual Machines."
}
},
"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 azureuser@linuxvm'"
}
},
"osType": {
"type": "string",
"defaultValue": "Linux",
"allowedValues": [
"Linux"
],
"metadata": {
"description": "The type of operating system."
}
},
"osSKU": {
"type": "string",
"defaultValue": "AzureLinux",
"allowedValues": [
"AzureLinux",
"Ubuntu"
],
"metadata": {
"description": "The Linux SKU to use."
}
}
},
"resources": [
{
"type": "Microsoft.ContainerService/managedClusters",
"apiVersion": "2021-03-01",
"name": "[parameters('clusterName')]",
"location": "[parameters('location')]",
"properties": {
"dnsPrefix": "[parameters('dnsPrefix')]",
"agentPoolProfiles": [
{
"name": "agentpool",
"mode": "System",
"osDiskSizeGB": "[parameters('osDiskSizeGB')]",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "[parameters('osType')]",
"osSKU": "[parameters('osSKU')]",
"storageProfile": "ManagedDisks"
}
],
"linuxProfile": {
"adminUsername": "[parameters('linuxAdminUsername')]",
"ssh": {
"publicKeys": [
{
"keyData": "[parameters('sshRSAPublicKey')]"
}
]
}
}
},
"identity": {
"type": "SystemAssigned"
}
}
],
"outputs": {
"controlPlaneFQDN": {
"type": "string",
"value": "[reference(parameters('clusterName')).fqdn]"
}
}
}
Per aggiungere Azure Linux a un modello di ARM esistente, è necessario aggiungere "osSKU": "AzureLinux"
e "mode": "System"
a agentPoolProfiles
e impostare l'apiVersion su 2021-03-01 o versione successiva ("apiVersion": "2021-03-01"
).
Distribuire il modello
Selezionare il pulsante seguente per accedere ad Azure e aprire un modello.
Selezionare o immettere i valori seguenti.
Per questo modello di avvio rapido, lasciare i valori predefiniti per Dimensioni disco sistema operativo, Numero di agenti, Dimensioni macchina virtuale agente, Tipo di sistema operativo e Versione di Kubernetes. Specificare i valori personalizzati per i parametri del modello seguenti:
- Sottoscrizione: selezionare una sottoscrizione di Azure.
- Gruppo di risorse: selezionare Crea nuovo. Specificare un nome univoco per il gruppo di risorse, ad esempio testAzureLinuxResourceGroup quindi scegliere OK.
- Località: selezionare una località, ad esempio Stati Uniti orientali.
- Nome cluster: immettere un nome univoco per il cluster del servizio Azure Kubernetes, ad esempio testAzureLinuxCluster.
- Prefisso DNS: inserire un prefisso DNS univoco per il cluster, ad esempio myAzureLinuxCluster.
- Nome utente amministratore Linux: immettere un nome utente per connettersi tramite SSH, ad esempio azureuser.
- Chiave pubblica SSH RSA: copiare e incollare la parte pubblica della coppia di chiavi SSH (per impostazione predefinita, il contenuto di ~/.ssh/id_rsa.pub).
Selezionare Rivedi e crea.
La creazione del cluster Host contenitore Linux di Azure richiede alcuni minuti. Attendere il completamento della distribuzione del cluster prima di procedere al passaggio successivo.
Convalidare la distribuzione
Stabilire la connessione al cluster
Per gestire un cluster Kubernetes, usare il client da riga di comando kubernetes kubectl.
Eseguire l'installazione
kubectl
in locale usando il comandoaz aks install-cli
:az aks install-cli
Configurare
kubectl
per connettersi al cluster Kubernetes usando il comandoaz aks get-credentials
. Questo comando scarica le credenziali e configura l'interfaccia della riga di comando di Kubernetes per usarli.az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
Verificare la connessione al cluster usando il comando
kubectl get
. Questo comando restituisce un elenco dei nodi del cluster.kubectl get nodes
L'esempio di output seguente mostra i tre nodi creati nei passaggi precedenti. Assicurarsi che lo stato del nodo sia Pronto:
NAME STATUS ROLES AGE VERSION aks-agentpool-41324942-0 Ready agent 6m44s v1.12.6 aks-agentpool-41324942-1 Ready agent 6m46s v1.12.6 aks-agentpool-41324942-2 Ready agent 6m45s v1.12.6
Distribuire l'applicazione
Un file manifesto Kubernetes definisce lo stato desiderato di un cluster, ad esempio le immagini del contenitore da eseguire.
In questo avvio rapido: si usa un manifesto per creare tutti gli oggetti necessari per eseguire l'applicazione Azure Vote. Questo manifesto include due distribuzioni Kubernetes:
- Applicazioni Python di Azure Vote di esempio.
- Istanza di Redis.
Vengono creati anche due servizi Kubernetes:
- Servizio interno per l'istanza di Redis.
- Un servizio esterno per accedere all'applicazione Azure Vote da Internet.
Creare un file denominato
azure-vote.yaml
.- Se si usa Azure Cloud Shell, questo file può essere creato usando
code
,vi
onano
come se si usasse un sistema virtuale o fisico
- Se si usa Azure Cloud Shell, questo file può essere creato usando
Copiare al suo interno la definizione YAML seguente:
apiVersion: apps/v1 kind: Deployment metadata: name: azure-vote-back spec: replicas: 1 selector: matchLabels: app: azure-vote-back template: metadata: labels: app: azure-vote-back spec: nodeSelector: "kubernetes.io/os": linux containers: - name: azure-vote-back image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 env: - name: ALLOW_EMPTY_PASSWORD value: "yes" resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 6379 name: redis --- apiVersion: v1 kind: Service metadata: name: azure-vote-back spec: ports: - port: 6379 selector: app: azure-vote-back --- apiVersion: apps/v1 kind: Deployment metadata: name: azure-vote-front spec: replicas: 1 selector: matchLabels: app: azure-vote-front template: metadata: labels: app: azure-vote-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: azure-vote-front image: mcr.microsoft.com/azuredocs/azure-vote-front:v1 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80 env: - name: REDIS value: "azure-vote-back" --- apiVersion: v1 kind: Service metadata: name: azure-vote-front spec: type: LoadBalancer ports: - port: 80 selector: app: azure-vote-front
Per un dettaglio dei file manifesto YAML, vedere Distribuzioni e manifesti YAML.
Distribuire l'applicazione usando il comando kubectl apply e specificare il nome del manifesto YAML:
kubectl apply -f azure-vote.yaml
L'esempio seguente è simile all'output che mostra distribuzioni e servizi creati correttamente:
deployment "azure-vote-back" created service "azure-vote-back" created deployment "azure-vote-front" created service "azure-vote-front" created
Testare l'applicazione
Quando l'applicazione viene eseguita, un servizio Kubernetes espone il front-end dell'applicazione a Internet. Questo processo può richiedere alcuni minuti.
Monitorare lo stato usando il comando kubectl get service con l'argomento --watch
.
kubectl get service azure-vote-front --watch
L'output EXTERNAL-IP per il servizio azure-vote-front
verrà visualizzato inizialmente come in sospeso.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Quando l'indirizzo EXTERNAL-IP passa da in sospeso a un effettivo indirizzo IP pubblico, usare CTRL-C
per arrestare il processo di controllo kubectl
. L'output di esempio seguente mostra un indirizzo IP pubblico valido assegnato al servizio:
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Per visualizzare l'app Azure Vote in azione, aprire un browser Web all'indirizzo IP esterno del servizio.
Eliminare il cluster
Se non si intende continuare con le esercitazioni seguenti, per evitare addebiti di Azure per pulire le risorse non necessarie. Usare il comando az group delete
per rimuovere il gruppo di risorse e tutte le risorse correlate.
az group delete --name testAzureLinuxCluster --yes --no-wait
Passaggi successivi
In questo avvio rapido è stato distribuito un cluster Host contenitore Linux di Azure. Per altre informazioni sull'Host contenitore Linux di Azure ed eseguire un esempio completo di distribuzione e gestione del cluster, continuare con l'esercitazione sull'host contenitore Linux di Azure.