Distribuire un contenitore Windows Server in un cluster del servizio Azure Kubernetes usando l'interfaccia della riga di comando di Azure
Il servizio Azure Kubernetes è un servizio Kubernetes gestito che permette di distribuire e gestire rapidamente i cluster. In questo articolo si usa l'interfaccia della riga di comando di Azure per distribuire un cluster del servizio Azure Kubernetes che esegue contenitori di Windows Server. Si distribuisce anche un'applicazione di esempio ASP.NET in un contenitore di Windows Server nel cluster.
Nota
Per iniziare ad effettuare un veloce provisioning di un cluster del servizio Azure Kubernetes, questo articolo include i passaggi per la distribuzione di un cluster con impostazioni predefinite a solo scopo di valutazione. Prima di distribuire un cluster pronto per la produzione, è consigliabile acquisire familiarità con l'architettura di riferimento di base per valutare il modo in cui è allineato ai requisiti aziendali.
Operazioni preliminari
Questa guida introduttiva presuppone una comprensione di base dei concetti relativi a Kubernetes. Per altre informazioni, vedere Concetti di base relativi a Kubernetes per il servizio Azure Kubernetes.
- 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 su Bash in Azure Cloud Shell.
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.
- Questo articolo richiede la versione 2.0.64 o successiva dell'interfaccia della riga di comando di Azure. Se si sta usando Azure Cloud Shell, la versione più recente è già installata.
- Assicurarsi che l'identità usata per creare il cluster disponga delle autorizzazioni minime adeguate. Per maggiori informazioni sull'accesso e l'identità per il servizio Azure Kubernetes, vedere Opzioni di accesso e identità per il servizio Azure Kubernetes (AKS).
- Se si hanno più sottoscrizioni di Azure, selezionare l'ID sottoscrizione appropriato in cui devono essere fatturate le risorse, usando il comando set account az. Per altre informazioni, vedere Come gestire le sottoscrizioni di Azure - Interfaccia della riga di comando di Azure.
Creare un gruppo di risorse
Un gruppo di risorse di Azure è un gruppo logico in cui le risorse di Azure vengono distribuite e gestite. Quando si crea un gruppo di risorse, viene chiesto di specificare una posizione. Questa posizione è la posizione in cui vengono archiviati i metadati del gruppo di risorse e dove vengono eseguite le risorse in Azure se non si specifica un'altra area durante la creazione delle risorse.
Creare un gruppo di risorse con il comando az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella località stati uniti orientali. Immettere questo comando e altri comandi in questo articolo in una shell BASH:
az group create --name myResourceGroup --location eastus
L'output di esempio seguente mostra il gruppo di risorse creato correttamente:
{ "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": null, "type": null }
Creare un cluster del servizio Azure Kubernetes
In questa sezione viene creato un cluster del servizio Azure Kubernetes con la configurazione seguente:
- Il cluster è configurato con due nodi per garantire che funzioni in modo affidabile. Un nodo è una macchina virtuale di Azure che esegue i componenti del nodo Kubernetes e il runtime del contenitore.
- I parametri
--windows-admin-password
e--windows-admin-username
impostano le credenziali di amministratore per tutti i nodi di Windows Server nel cluster e devono soddisfare i requisiti delle password di Windows Server. - Il pool di nodi usa
VirtualMachineScaleSets
.
Per creare il cluster del servizio Azure Kubernetes con l'interfaccia della riga di comando di Azure, seguire questa procedura:
Creare un nome utente da usare come credenziali di amministratore per i nodi di Windows Server nel cluster. I comandi seguenti richiedono un nome utente e lo impostano su WINDOWS_USERNAME da usare in un comando successivo.
echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
Creare una password per il nome utente amministratore creato nel passaggio precedente. La password deve avere un minimo di 14 caratteri e soddisfare i requisiti di complessità delle password di Windows Server.
echo "Please enter the password to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_PASSWORD
Creare il cluster usando il comando az aks create e specificare i parametri
--windows-admin-username
e--windows-admin-password
. Il comando di esempio seguente crea un cluster usando il valore di WINDOWS_USERNAME impostato nel comando precedente. In alternativa, è possibile specificare un nome utente diverso direttamente nel parametro anziché usare WINDOWS_USERNAME.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 2 \ --enable-addons monitoring \ --generate-ssh-keys \ --windows-admin-username $WINDOWS_USERNAME \ --windows-admin-password $WINDOWS_PASSWORD \ --vm-set-type VirtualMachineScaleSets \ --network-plugin azure
Il comando viene completato dopo pochi minuti e vengono restituite informazioni in formato JSON sul cluster. Occasionalmente, il provisioning del cluster può richiedere più tempo. Attendere fino a 10 minuti per il provisioning.
Se viene visualizzato un errore di convalida della password e la password impostata soddisfa i requisiti di lunghezza e complessità, provare a creare il gruppo di risorse in un'altra area. Provare quindi a creare il cluster con il nuovo gruppo di risorse.
Se non si specifica un nome utente e una password amministratore durante la creazione del pool di nodi, il nome utente viene impostato su azureuser e la password viene impostata su un valore casuale. Per altre informazioni, vedere Domande frequenti su Windows Server
Non è possibile modificare il nome utente dell'amministratore, ma è possibile modificare la password di amministratore usata dal cluster del servizio Azure Kubernetes per i nodi di Windows Server usando
az aks update
. Per altre informazioni, vedere Domande frequenti su Windows Server.Per eseguire un cluster del servizio Azure Kubernetes che supporti i pool di nodi per i contenitori di Windows Server, il cluster deve usare un criterio di rete che usi il plug-in di rete Azure CNI (avanzato). Il parametro
--network-plugin azure
specifica Azure CNI.
Aggiungere un pool di nodi
Per impostazione predefinita, un cluster del servizio Azure Kubernetes viene creato con un pool di nodi in grado di eseguire contenitori Linux. È necessario aggiungere un altro pool di nodi in grado di eseguire contenitori di Windows Server insieme al pool di nodi Linux.
Windows Server 2022 è il sistema operativo predefinito per Kubernetes 1.25.0 e versioni successive. Windows Server 2019 è il sistema operativo predefinito per le versioni precedenti. Se non si specifica uno SKU specifico del sistema operativo, Azure crea il nuovo pool di nodi con lo SKU predefinito per la versione di Kubernetes usata dal cluster.
- Pool di nodi Windows (SKU predefinito)
- Pool di nodi di Windows Server 2022
- Pool di nodi di Windows Server 2019
Per usare lo SKU del sistema operativo predefinito, creare il pool di nodi senza specificare uno SKU del sistema operativo. Il pool di nodi è configurato per il sistema operativo predefinito in base alla versione Kubernetes del cluster.
Aggiungere un pool di nodi di Windows usando il comando az aks nodepool add
. Il comando seguente crea un nuovo pool di nodi denominato npwin e lo aggiunge a myAKSCluster. Il comando usa anche la subnet predefinita nella rete virtuale predefinita creata durante l'esecuzione di az aks create
. Non viene specificato uno SKU del sistema operativo, quindi il pool di nodi è impostato sul sistema operativo predefinito in base alla versione Kubernetes del cluster:
az aks nodepool add \
--resource-group myResourceGroup \
--cluster-name myAKSCluster \
--os-type Windows \
--name npwin \
--node-count 1
Stabilire la connessione al cluster
Si usa kubectl, il client della riga di comando Kubernetes per gestire i cluster Kubernetes. Se si usa Azure Cloud Shell, kubectl
è già installato. Se si vuole installare ed eseguire kubectl
localmente, chiamare il comando az aks install-cli.
Configurare
kubectl
per connettersi al cluster Kubernetes usando il comando az 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 myResourceGroup --name myAKSCluster
Verificare la connessione al cluster usando il comando kubectl get, che restituisce un elenco dei nodi del cluster.
kubectl get nodes -o wide
L'output di esempio seguente mostra tutti i nodi del cluster. Assicurarsi che lo stato di tutti i nodi sia Pronto:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME aks-nodepool1-20786768-vmss000000 Ready agent 22h v1.27.7 10.224.0.4 <none> Ubuntu 22.04.3 LTS 5.15.0-1052-azure containerd://1.7.5-1 aks-nodepool1-20786768-vmss000001 Ready agent 22h v1.27.7 10.224.0.33 <none> Ubuntu 22.04.3 LTS 5.15.0-1052-azure containerd://1.7.5-1 aksnpwin000000 Ready agent 20h v1.27.7 10.224.0.62 <none> Windows Server 2022 Datacenter 10.0.20348.2159 containerd://1.6.21+azure
Nota
Il runtime del contenitore per ogni pool di nodi viene visualizzato in CONTAINER-RUNTIME. I valori di runtime del contenitore iniziano con
containerd://
, il che significa che ognuno usacontainerd
per il runtime del contenitore.
Distribuire l'applicazione
Un file manifesto di Kubernetes definisce uno stato desiderato per il cluster, ad esempio le immagini del contenitore da eseguire. In questo articolo si usa un manifesto per creare tutti gli oggetti necessari per eseguire l'applicazione di esempio ASP.NET in un contenitore di Windows Server. Questo manifesto include una distribuzione di Kubernetes per l'applicazione di esempio ASP.NET e un servizio Kubernetes esterno per accedere all'applicazione da Internet.
L'applicazione di esempio ASP.NET viene fornita nel quadro degli esempi di .NET Framework ed eseguita in un contenitore di Windows Server. Il servizio Azure Kubernetes prevede che i contenitori di Windows Server siano basati su immagini di Windows Server 2019 o versione successiva. Il file manifesto di Kubernetes deve anche definire un selettore di nodo per indicare al cluster del servizio Azure Kubernetes di eseguire il pod dell'applicazione di esempio ASP.NET in un nodo che sia in grado di eseguire contenitori di Windows Server.
Creare un file denominato
sample.yaml
e copiarlo nella definizione YAML seguente.apiVersion: apps/v1 kind: Deployment metadata: name: sample labels: app: sample spec: replicas: 1 template: metadata: name: sample labels: app: sample spec: nodeSelector: "kubernetes.io/os": windows containers: - name: sample image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp resources: limits: cpu: 1 memory: 800M ports: - containerPort: 80 selector: matchLabels: app: sample --- apiVersion: v1 kind: Service metadata: name: sample spec: type: LoadBalancer ports: - protocol: TCP port: 80 selector: app: sample
Per una suddivisione dei file manifesto YAML, vedere Distribuzioni e manifesti YAML.
Se si crea e si salva il file YAML in locale, è possibile caricare il file manifesto nella directory predefinita in CloudShell facendo clic sul pulsante Carica/Scarica file e selezionando il file dal file system locale.
Distribuire l'applicazione usando il comando kubectl apply e specificare il nome del manifesto YAML.
kubectl apply -f sample.yaml
L'output di esempio seguente mostra la distribuzione e il servizio creati correttamente:
deployment.apps/sample created service/sample 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. Occasionalmente, il provisioning del servizio può richiedere più tempo. Attendere fino a 10 minuti per il provisioning.
Controllare lo stato dei pod distribuiti usando il comando kubectl get pods. Fare in modo che tutti i pod siano
Running
prima di procedere.kubectl get pods
Monitorare lo stato usando il comando kubectl get service con l'argomento
--watch
.kubectl get service sample --watch
Inizialmente, l'output mostra l’EXTERNAL-IP per il servizio di esempio come in sospeso:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE sample LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Quando EXTERNAL-IP passa da pending a un effettivo indirizzo IP pubblico, usare
CTRL-C
per arrestare il processo di controllokubectl
. L'output di esempio seguente mostra un indirizzo IP pubblico valido assegnato al servizio:sample LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Vedere l'app di esempio in azione aprendo un Web browser all'indirizzo IP esterno del servizio.
Eliminare risorse
Se non si prevede di eseguire l'esercitazione servizio Azure Kubernetes, è consigliabile eliminare il cluster per evitare di incorrere in addebiti per Azure.
Eliminare il gruppo di risorse, il servizio contenitore e tutte le risorse correlate usando il comando az group delete .
az group delete --name myResourceGroup --yes --no-wait
Nota
Il cluster del servizio Azure Kubernetes è stato creato con l'identità gestita assegnata dal sistema (opzione di identità predefinita usata in questa guida introduttiva). La piattaforma Azure gestisce questa identità, quindi non richiede la rimozione.
Passaggi successivi
In questa guida introduttiva è stato distribuito un cluster Kubernetes e quindi è stata distribuita un'applicazione di esempio ASP.NET in un contenitore di Windows Server. Questa applicazione di esempio è solo a scopo dimostrativo e non rappresenta tutte le procedure consigliate per le applicazioni Kubernetes. Per indicazioni sulla creazione di soluzioni complete con il servizio Azure Kubernetes per la produzione, vedere Linee guida per la soluzione del servizio Azure Kubernetes.
Per altre informazioni sul servizio Azure Kubernetes e per un esempio completo di distribuzione del codice, passare all'esercitazione sul cluster Kubernetes.
Azure Kubernetes Service