Condividi tramite


Distribuire un contenitore di Windows Server in un cluster del servizio Azure Kubernetes tramite PowerShell

Il servizio Azure Kubernetes è un servizio Kubernetes gestito che permette di distribuire e gestire rapidamente i cluster. In questo articolo si usa Azure PowerShell 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.

Note

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.

Prima di iniziare

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.

Installare l'estensione aks-preview

Importante

Le funzionalità di anteprima di AKS sono disponibili su base self-service, su scelta. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

  1. Installare l'estensione CLI di Azure utilizzando il comando aks-preview.
az extension add --name aks-preview
  1. Eseguire l'aggiornamento alla versione più recente dell'estensione usando il comando az extension update. Windows Server 2025 richiede almeno 18.0.0b40.
az extension update --name aks-preview

Registrare il flag di funzionalità AksWindows2025Preview

  1. Registrare il flag di funzionalità AksWindows2025Preview usando il comando [az feature register][az-feature-register].
az feature register --name AksWindows2025Preview --namespace Microsoft.ContainerService
  1. Verificare lo stato della registrazione usando il comando [az feature show][az-feature-show]. Sono necessari alcuni minuti per visualizzare lo stato Registered.
az feature show --name AksWindows2025Preview --namespace Microsoft.ContainerService
  1. Quando lo stato riflette Registered, eseguire l'aggiornamento della registrazione del provider di risorse Microsoft.ContainerService usando il comando [az provider register][az-provider-register].

    az provider register --namespace Microsoft.ContainerService
    

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 usando il cmdlet New-AzResourceGroup. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nell'area eastus.

    New-AzResourceGroup -Name myResourceGroup -Location eastus
    

    L'output di esempio seguente mostra che il gruppo di risorse è stato creato correttamente:

    ResourceGroupName : myResourceGroup
    Location          : eastus
    ProvisioningState : Succeeded
    Tags              :
    ResourceId        : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup
    

Creare un cluster AKS

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 -WindowsProfileAdminUserName e -WindowsProfileAdminUserPassword impostano le credenziali di amministratore per tutti i nodi di Windows Server nel cluster e devono soddisfare i requisiti di complessità delle password di Windows Server .
  • Il pool di nodi usa VirtualMachineScaleSets.

Utilizzare la procedura seguente per creare il cluster AKS con Azure PowerShell.

  1. Creare le credenziali di amministratore per i contenitori di Windows Server usando il comando seguente. Questo comando richiede di immettere un WindowsProfileAdminUserName e WindowsProfileAdminUserPassword. La password deve avere un minimo di 14 caratteri e soddisfare i requisiti di complessità delle password di Windows Server.

    $AdminCreds = Get-Credential `
        -Message 'Please create the administrator credentials for your Windows Server containers'
    
  2. Crea il tuo cluster utilizzando il cmdlet New-AzAksCluster e specifica i parametri WindowsProfileAdminUserName e WindowsProfileAdminUserPassword.

    New-AzAksCluster -ResourceGroupName myResourceGroup `
        -Name myAKSCluster `
        -NodeCount 2 `
        -NetworkPlugin azure `
        -NodeVmSetType VirtualMachineScaleSets `
        -WindowsProfileAdminUserName $AdminCreds.UserName `
        -WindowsProfileAdminUserPassword $secureString `
        -GenerateSshKey
    

    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 le 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 le Domande frequenti su Windows Server.

    Per eseguire un cluster AKS che supporti i pool di nodi per i contenitori di Windows Server, il cluster deve utilizzare un criterio di rete che impieghi il plug-in di rete Azure CNI (avanzato). Il parametro -NetworkPlugin azure specifica Azure CNI.

Aggiungi 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.

Per creare un pool di nodi windows, è necessario specificare un oggetto supportato OsType e OsSku. Usare le informazioni nella tabella seguente per determinare quale sia appropriato per il cluster:

OsType OsSku Impostazione predefinita Versioni di K8s supportate Dettagli
windows Windows2025 Attualmente disponibile in anteprima. Non predefinito. 1.32 e successive Impostazioni predefinite aggiornate: containerd 2.0, l'immagine di generazione 2 viene utilizzata per impostazione predefinita.
windows Windows2022 Impostazione predefinita in K8s 1.25-1.35 Non disponibile in K8s 1.36+ Ritira nel marzo 2027. Impostazioni predefinite aggiornate: FIPS è abilitato per impostazione predefinita.
windows Windows2019 Impostazione predefinita in K8s 1.24 e versioni successive Non disponibile in K8s 1.33+ Ritira nel marzo 2026.

Windows Server 2022 è il sistema operativo predefinito per Kubernetes versioni 1.25-1.35. 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.

Importante

A partire dal 01 marzo 2026, il servizio Azure Kubernetes non supporta più i pool di nodi di Windows Server 2019. I pool di nodi che eseguono Kubernetes versione 1.33+ non possono usare Windows Server 2019. A partire dal 01 aprile 2027, AKS rimuoverà tutte le immagini dei nodi esistenti per Windows Server 2019, con il risultato che le operazioni di ridimensionamento falliranno. Per altre informazioni sul ritiro, vedere il problema sul ritiro di GitHub e l'annuncio di ritiro degli aggiornamenti di Azure. Per rimanere informati sugli annunci e sugli aggiornamenti, seguire le note di rilascio di AKS.

Importante

A partire dal 15 marzo 2027, il servizio Azure Kubernetes non supporta più i pool di nodi di Windows Server 2022. I pool di nodi che eseguono Kubernetes versione 1.36+ non possono usare Windows Server 2022. A partire dal 01 aprile 2028, AKS rimuoverà tutte le immagini dei nodi esistenti per Windows Server 2022, il che significa che le operazioni di scalare falliranno. Per altre informazioni sul ritiro, vedere il problema sul ritiro di GitHub e l'annuncio di ritiro degli aggiornamenti di Azure. Per rimanere informati sugli annunci e sugli aggiornamenti, seguire le note di rilascio di AKS.

  • Aggiungere un pool di nodi di Windows Server usando il New-AzAksNodePool cmdlet . 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 New-AzAksCluster:

    New-AzAksNodePool -ResourceGroupName myResourceGroup `
        -ClusterName myAKSCluster `
        -VmSetType VirtualMachineScaleSets `
        -OsType Windows `
        -OsSKU Windows2022 `
        -Name npwin
    

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 kubectl in locale, è possibile usare il cmdlet Install-AzAzAksCliTool.

  1. Configurare kubectl per connettersi al cluster Kubernetes usando cmdlet Import-AzAksCredential. Questo comando scarica le credenziali e configura l'interfaccia della riga di comando di Kubernetes per usarli.

    Import-AzAksCredential -ResourceGroupName myResourceGroup -Name myAKSCluster
    
  2. Verificare la connessione al cluster usando il comando kubectl get, da cui si ottiene un elenco dei nodi del cluster.

    kubectl get nodes
    

    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
    aks-nodepool1-20786768-vmss000000   Ready    agent   22h   v1.27.7
    aks-nodepool1-20786768-vmss000001   Ready    agent   22h   v1.27.7
    aksnpwin000000                      Ready    agent   21h   v1.27.7
    

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.

  1. 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 un dettaglio 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.

  2. 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
    

Test dell'applicazione

Durante l'esecuzione dell'applicazione, un servizio Kubernetes espone il front-end dell'applicazione a Internet. Il processo potrebbe richiedere alcuni minuti. Occasionalmente, il provisioning del servizio può richiedere più tempo. Attendere fino a 10 minuti per il provisioning.

  1. 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
    
  2. Monitorare lo stato di avanzamento 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
    
  3. Quando EXTERNAL-IP passa da pending 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:

    sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m
    
  4. Vedere l'app di esempio in azione aprendo un Web browser all'indirizzo IP esterno del servizio.

    Screenshot del passaggio all'applicazione di esempio ASP.NET.

Eliminare le risorse

Se non si prevede di eseguire l'esercitazione servizio Azure Kubernetes, eliminare il cluster per evitare di incorrere in addebiti per Azure.

  • Rimuovere il gruppo di risorse, il servizio contenitore e tutte le risorse correlate usando il Remove-AzResourceGroup cmdlet .

    Remove-AzResourceGroup -Name myResourceGroup
    

    Note

    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.