Distribuera en Windows Server-container i ett AKS-kluster (Azure Kubernetes Service) med hjälp av Azure CLI

Azure Kubernetes Service (AKS) är en hanterad Kubernetes-tjänst som gör att du snabbt kan distribuera och hantera kluster. I den här artikeln använder du Azure CLI för att distribuera ett AKS-kluster som kör Windows Server-containrar. Du distribuerar också ett ASP.NET exempelprogram i en Windows Server-container till klustret.

Kommentar

För att komma igång med att snabbt etablera ett AKS-kluster innehåller den här artikeln steg för att distribuera ett kluster med standardinställningar endast i utvärderingssyfte. Innan du distribuerar ett produktionsklart kluster rekommenderar vi att du bekantar dig med vår referensarkitektur för baslinje för att överväga hur det överensstämmer med dina affärskrav.

Innan du börjar

Den här snabbstarten förutsätter grundläggande kunskaper om Kubernetes-begrepp. Mer information finns i Viktiga koncept för Azure Kubernetes Service (AKS).

  • Den här artikeln kräver version 2.0.64 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad där.
  • Kontrollera att den identitet som du använder för att skapa klustret har lämpliga minimibehörigheter. Mer information om åtkomst och identitet för AKS finns i Åtkomst- och identitetsalternativ för Azure Kubernetes Service (AKS).
  • Om du har flera Azure-prenumerationer väljer du lämpligt prenumerations-ID där resurserna ska faktureras med kommandot az account set .

Skapa en resursgrupp

En Azure-resursgrupp är en logisk grupp där Azure-resurser distribueras och hanteras. När du skapar en resursgrupp uppmanas du att ange en plats. Den här platsen är platsen där resursgruppsmetadata lagras och där dina resurser körs i Azure om du inte anger en annan region när du skapar resurser.

  • Skapa en resursgrupp med hjälp av kommandot az group create. I följande exempel skapas en resursgrupp med namnet myResourceGroup i regionen eastus. Ange det här kommandot och andra kommandon i den här artikeln i ett BASH-gränssnitt:

    az group create --name myResourceGroup --location eastus
    

    Följande exempelutdata visar resursgruppen som har skapats:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": null
    }
    

Skapa ett AKS-kluster

I det här avsnittet skapar vi ett AKS-kluster med följande konfiguration:

  • Klustret har konfigurerats med två noder för att säkerställa att det fungerar tillförlitligt. En nod är en virtuell Azure-dator (VM) som kör Kubernetes-nodkomponenterna och containerkörningen.
  • Parametrarna --windows-admin-password och --windows-admin-username anger administratörsautentiseringsuppgifterna för alla Windows Server-noder i klustret och måste uppfylla lösenordskraven för Windows Server.
  • Nodpoolen använder VirtualMachineScaleSets.

Följ dessa steg för att skapa AKS-klustret med Azure CLI:

  1. Skapa ett användarnamn som ska användas som administratörsautentiseringsuppgifter för Windows Server-noderna i klustret. Följande kommandon uppmanar dig att ange ett användarnamn och ange det till WINDOWS_USERNAME för användning i ett senare kommando.

    echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME
    
  2. Skapa ett lösenord för administratörsanvändarnamnet som du skapade i föregående steg. Lösenordet måste innehålla minst 14 tecken och uppfylla kraven på lösenordskomplexitet för Windows Server.

    echo "Please enter the password to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_PASSWORD
    
  3. Skapa klustret med kommandot az aks create och ange parametrarna --windows-admin-username och --windows-admin-password . Följande exempelkommando skapar ett kluster med hjälp av värdet från WINDOWS_USERNAME som du angav i föregående kommando. Du kan också ange ett annat användarnamn direkt i parametern i stället för att använda 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
    

    Efter några minuter slutförs kommandot och returnerar JSON-formaterad information om klustret. Ibland kan det ta längre tid än några minuter att etablera klustret. Tillåt upp till 10 minuter för etablering.

    Om du får ett lösenordsverifieringsfel och lösenordet som du anger uppfyller kraven på längd och komplexitet kan du prova att skapa resursgruppen i en annan region. Försök sedan att skapa klustret med den nya resursgruppen.

    Om du inte anger ett administratörsanvändarnamn och lösenord när du skapar nodpoolen anges användarnamnet till azureuser och lösenordet är inställt på ett slumpmässigt värde. Mer information finns i Hur gör jag för att ändra administratörslösenordet för Windows Server-noder i mitt kluster?.

    Administratörsanvändarnamnet kan inte ändras, men du kan ändra administratörslösenordet som AKS-klustret använder för Windows Server-noder med hjälp av az aks update. Mer information finns i Vanliga frågor och svar om Windows Server-nodpooler.

    Om du vill köra ett AKS-kluster som stöder nodpooler för Windows Server-containrar måste klustret använda en nätverksprincip som använder azure CNI-nätverksinsticksprogram (avancerat). Parametern --network-plugin azure anger Azure CNI.

Lägga till en nodpool

Som standard skapas ett AKS-kluster med en nodpool som kan köra Linux-containrar. Du måste lägga till en annan nodpool som kan köra Windows Server-containrar tillsammans med Linux-nodpoolen.

Windows Server 2022 är standardoperativsystemet för Kubernetes version 1.25.0 och senare. Windows Server 2019 är standardoperativsystemet för tidigare versioner. Om du inte anger en viss OS SKU skapar Azure den nya nodpoolen med standard-SKU:n för den version av Kubernetes som används av klustret.

Om du vill använda os-standard-SKU:n skapar du nodpoolen utan att ange en OS-SKU. Nodpoolen är konfigurerad för standardoperativsystemet baserat på Kubernetes-versionen av klustret.

Lägg till en Windows-nodpool med kommandot az aks nodepool add . Följande kommando skapar en ny nodpool med namnet npwin och lägger till den i myAKSCluster. Kommandot använder också standardundernätet i det virtuella standardnätverk som skapades när du körde az aks create. En OS-SKU har inte angetts, så nodpoolen är inställd på standardoperativsystemet baserat på Kubernetes-versionen av klustret:

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --os-type Windows \
    --name npwin \
    --node-count 1

Anslut till klustret

Du använder kubectl, Kubernetes-kommandoradsklienten, för att hantera dina Kubernetes-kluster. Om du använder Azure Cloud Shell är kubectl redan installerat. Om du vill installera och köra kubectl lokalt anropar du kommandot az aks install-cli .

  1. Konfigurera kubectl för att ansluta till kubernetes-klustret med kommandot az aks get-credentials . Det här kommandot laddar ned autentiseringsuppgifter och konfigurerar Kubernetes CLI för att använda dem.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Kontrollera anslutningen till klustret med kommandot kubectl get , som returnerar en lista över klusternoderna.

    kubectl get nodes -o wide
    

    Följande exempelutdata visar alla noder i klustret. Kontrollera att statusen för alla noder är Klar:

    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
    

    Kommentar

    Containerkörningen för varje nodpool visas under CONTAINER-RUNTIME. Värdena för containerkörning börjar med containerd://, vilket innebär att de används för containerd containerkörningen.

Distribuera programmet

En Kubernetes-manifestfil definierar ett önskat tillstånd för klustret, till exempel vilka containeravbildningar som ska köras. I den här artikeln använder du ett manifest för att skapa alla objekt som behövs för att köra ASP.NET exempelprogrammet i en Windows Server-container. Det här manifestet innehåller en Kubernetes-distribution för ASP.NET exempelprogram och en extern Kubernetes-tjänst för åtkomst till programmet från Internet.

Det ASP.NET exempelprogrammet tillhandahålls som en del av .NET Framework-exempel och körs i en Windows Server-container. AKS kräver att Windows Server-containrar baseras på avbildningar av Windows Server 2019 eller senare. Kubernetes-manifestfilen måste också definiera en nodväljare för att tala om för AKS-klustret att köra ASP.NET exempelprogrammets podd på en nod som kan köra Windows Server-containrar.

  1. Skapa en fil med namnet sample.yaml och kopiera följande YAML-definition.

    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
    

    En uppdelning av YAML-manifestfiler finns i Distributioner och YAML-manifest.

    Om du skapar och sparar YAML-filen lokalt kan du ladda upp manifestfilen till standardkatalogen i CloudShell genom att välja knappen Ladda upp/ladda ned filer och välja filen från det lokala filsystemet.

  2. Distribuera programmet med kommandot kubectl apply och ange namnet på YAML-manifestet.

    kubectl apply -f sample.yaml
    

    Följande exempelutdata visar distributionen och tjänsten som har skapats:

    deployment.apps/sample created
    service/sample created
    

Testa programmet

När programmet körs så exponerar en Kubernetes-tjänst programmets klientdel mot Internet. Den här processen kan ta ett par minuter att slutföra. Ibland kan det ta längre tid än några minuter att etablera tjänsten. Tillåt upp till 10 minuter för etablering.

  1. Kontrollera statusen för de distribuerade poddarna med kommandot kubectl get pods . Gör så att alla poddar är Running innan du fortsätter.

    kubectl get pods
    
  2. Övervaka förloppet med hjälp av kommandot kubectl get service med --watch argumentet .

    kubectl get service sample --watch
    

    Initialt visar utdata EXTERNAL-IP för exempeltjänsten som väntande:

    NAME               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    sample             LoadBalancer   10.0.37.27   <pending>     80:30572/TCP   6s
    

    När EXTERNAL-IP-adressen ändras från väntande till en faktisk offentlig IP-adress använder du CTRL-C för att stoppa kubectl-övervakningsprocessen. Följande exempelutdata visar en giltig offentlig IP-adress som tilldelats tjänsten:

    sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m
    
  3. Se exempelappen i praktiken genom att öppna en webbläsare till tjänstens externa IP-adress.

    Skärmbild av att bläddra till ASP.NET exempelprogram.

Ta bort resurser

Om du inte planerar att gå igenom AKS-självstudien bör du ta bort klustret för att undvika azure-avgifter.

Ta bort resursgruppen, containertjänsten och alla relaterade resurser med kommandot az group delete .

az group delete --name myResourceGroup --yes --no-wait

Kommentar

AKS-klustret skapades med systemtilldelad hanterad identitet (standardidentitetsalternativet som används i den här snabbstarten). Azure-plattformen hanterar den här identiteten, så den kräver inte borttagning.

Nästa steg

I den här snabbstarten distribuerade du ett Kubernetes-kluster och distribuerade sedan ett ASP.NET exempelprogram i en Windows Server-container till det. Det här exempelprogrammet är endast i demosyfte och representerar inte alla metodtips för Kubernetes-program. Vägledning om hur du skapar fullständiga lösningar med AKS för produktion finns i AKS-lösningsvägledning.

Om du vill veta mer om AKS och gå igenom ett komplett exempel på kod-till-distribution fortsätter du till självstudiekursen för Kubernetes-klustret.