Creare contenitori di Windows Server

Si applica a: Azure Stack HCI, versione 23H2

Questo articolo descrive come usare l'interfaccia della riga di comando di Azure per distribuire un pool di nodi in un cluster del servizio Azure Kubernetes esistente che esegue contenitori di Windows Server. Descrive anche come distribuire un'applicazione di esempio ASP.NET in un contenitore di Windows Server nel cluster.

Prerequisiti

Creare un cluster del servizio Azure Kubernetes seguendo le istruzioni riportate in Come creare cluster del servizio Azure Kubernetes.

Aggiungere un pool di nodi

Per impostazione predefinita, viene creato un cluster Kubernetes 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.

Aggiungere un pool di nodi con host contenitore windows usando il az aksarc nodepool add comando con il parametro --os-type Windows. Se lo SKU del sistema operativo non è specificato, il pool di nodi viene impostato sul sistema operativo predefinito in base alla versione Kubernetes del cluster. 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.

  • Per usare Windows Server 2019, specificare i parametri seguenti:
    • os-type impostato su Windows.
    • os-sku impostato su Windows2019.
  • Per usare Windows Server 2022, specificare i parametri seguenti:
    • os-type impostato su Windows.
    • os-sku impostato su Windows2022 (facoltativo).

Il comando seguente crea un nuovo pool di nodi denominato $mynodepool e lo aggiunge a $myAKSCluster con un nodo Windows Server 2022:

az aksarc nodepool add --resource-group $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --node-count 1 --os-type Windows --os-sku Windows2022

Connettersi al cluster servizio Azure Kubernetes

È ora possibile connettersi al cluster Kubernetes eseguendo il az connectedk8s proxy comando dal computer locale. Assicurarsi di accedere ad Azure prima di eseguire questo comando. Se sono presenti più sottoscrizioni di Azure, selezionare l'ID sottoscrizione appropriato usando il comando az account set .

Questo comando scarica il kubeconfig del cluster Kubernetes nel computer locale e apre un canale di connessione proxy al cluster Kubernetes locale. Il canale è aperto finché questo comando viene eseguito. Consentire l'esecuzione di questo comando per tutto il tempo necessario per accedere al cluster. Se si verifica il timeout del comando, chiudere la finestra dell'interfaccia della riga di comando, aprirne una nuova, quindi eseguire di nuovo il comando.

Per eseguire correttamente il comando seguente, è necessario disporre delle autorizzazioni di Collaboratore per il gruppo di risorse che ospita il cluster del servizio Azure Kubernetes:

az connectedk8s proxy --name $aksclustername --resource-group $resource_group --file .\aks-arc-kube-config

Output previsto:

Proxy is listening on port 47011
Merged "aks-workload" as current context in .\aks-arc-kube-config
Start sending kubectl requests on 'aks-workload' context using kubeconfig at .\aks-arc-kube-config
Press Ctrl+C to close proxy.

Mantenere questa sessione in esecuzione e connettersi al cluster Kubernetes da un terminale o un prompt dei comandi diverso. Verificare che sia possibile connettersi al cluster Kubernetes eseguendo il comando kubectl get. Questo comando restituisce un elenco dei nodi del cluster:

kubectl get node -A --kubeconfig .\aks-arc-kube-config

L'output di esempio seguente mostra il nodo creato nei passaggi precedenti. Verificare che lo stato del nodo sia Pronto:

NAME              STATUS   ROLES           AGE     VERSION
moc-lesdc78871d   Ready    control-plane   6d8h    v1.26.3
moc-lupeeyd0f8c   Ready    <none>          6d8h    v1.26.3
moc-ww2c8d5ranw   Ready    <none>          7m18s   v1.26.3

Distribuire l'applicazione

Un file manifesto Kubernetes definisce lo stato desiderato di un cluster, ad esempio le immagini del contenitore da eseguire.

È possibile usare un manifesto YAML 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 Kubernetes per l'applicazione di esempio ASP.NET e un servizio Kubernetes per accedere all'applicazione da Internet.

L'applicazione di esempio ASP.NET viene fornita come parte degli esempi di .NET Framework e viene 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 kubernetes deve anche definire un selettore di nodo per assicurarsi che i pod dell'applicazione di esempio di ASP.NET siano pianificati in un nodo 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.

  2. Distribuire l'applicazione usando il comando kubectl apply e specificare il nome del manifesto YAML:

    kubectl apply -f sample.yaml --kubeconfig .\\aks-arc-kube-config
    

L'output di esempio seguente mostra che la distribuzione e il servizio sono stati 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.

  1. Monitorare lo stato usando il comando kubectl get service con l'argomento --watch.

    kubectl get service sample --watch --kubeconfig .\aks-arc-kube-config
    

    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 l'indirizzo EXTERNAL-IP passa da in sospeso a un indirizzo IP, usare CTRL-C per arrestare il processo kubectl watch. 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
    
  2. Vedere l'app di esempio in azione aprendo un Web browser all'indirizzo IP esterno e alla porta del servizio di esempio .

    Screenshot che mostra ASP.NET'applicazione di esempio.

    Se si riceve un timeout di connessione quando si tenta di caricare la pagina, è necessario verificare che l'app di esempio sia pronta usando il kubectl get pods --watch comando . In alcuni casi, il contenitore di Windows non viene avviato dal momento in cui l'indirizzo IP esterno è disponibile.

Eliminare il pool di nodi

Eliminare il pool di nodi usando il az akshybrid nodepool delete comando :

az aksarc nodepool delete -g $myResourceGroup --cluster-name $myAKSCluster --name $mynodepool --no-wait

Passaggi successivi

Panoramica del servizio Azure Kubernetes abilitato da Arc