Tworzenie kontenera systemu Windows Server w klastrze Azure Kubernetes Service (AKS) przy użyciu interfejsu wiersza polecenia platformy Azure

Azure Kubernetes Service (AKS) to zarządzana usługa platformy Kubernetes, która umożliwia szybkie wdrażanie klastrów i zarządzanie nimi. W tym artykule wdrożysz klaster usługi AKS z uruchomionymi kontenerami systemu Windows Server 2019 przy użyciu interfejsu wiersza polecenia platformy Azure. Przykładową aplikację ASP.NET wdrożysz również w kontenerze systemu Windows Server w klastrze.

Zrzut ekranu przedstawiający przechodzenie do ASP.NET przykładowej aplikacji.

W tym artykule założono podstawową wiedzę na temat pojęć związanych z platformą Kubernetes. Aby uzyskać więcej informacji, zobacz Podstawowe pojęcia dotyczące usługi Azure Kubernetes Service (AKS).

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure .

Wymagania wstępne

  • Ten artykuł wymaga wersji 2.0.64 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

  • Tożsamość używana do utworzenia klastra ma odpowiednie minimalne uprawnienia. Aby uzyskać więcej informacji na temat dostępu i tożsamości dla usługi AKS, zobacz Opcje dostępu i tożsamości dla usługi Azure Kubernetes Service (AKS).

  • Jeśli masz wiele subskrypcji platformy Azure, wybierz odpowiedni identyfikator subskrypcji, w którym zasoby mają być rozliczane przy użyciu polecenia az account .

  • Sprawdź, czy dostawcy Microsoft.OperationsManagement i Microsoft.OperationalInsights są zarejestrowani w ramach subskrypcji. Są to dostawcy zasobów platformy Azure wymagane do obsługi szczegółowych informacji o kontenerze. Aby sprawdzić stan rejestracji, uruchom następujące polecenia:

    az provider show -n Microsoft.OperationsManagement -o table
    az provider show -n Microsoft.OperationalInsights -o table
    

    Jeśli nie są zarejestrowane, zarejestruj się w usłudze Microsoft.OperationsManagement i Microsoft.OperationalInsights , korzystając z następujących poleceń:

    az provider register --namespace Microsoft.OperationsManagement
    az provider register --namespace Microsoft.OperationalInsights
    

    Uwaga

    Uruchom polecenia z uprawnieniami administracyjnymi, jeśli planujesz uruchomić polecenia w tym przewodniku Szybki start lokalnie zamiast w usłudze Azure Cloud Shell.

Ograniczenia

Podczas tworzenia klastrów usługi AKS i zarządzania nimi obowiązują następujące ograniczenia, które obsługują wiele pul węzłów:

  • Nie można usunąć pierwszej puli węzłów.

Następujące dodatkowe ograniczenia dotyczą pul węzłów systemu Windows Server:

  • Klaster usługi AKS może mieć maksymalnie 10 pul węzłów.
  • Klaster usługi AKS może mieć maksymalnie 100 węzłów w każdej puli węzłów.
  • Nazwa puli węzłów systemu Windows Server ma limit 6 znaków.

Tworzenie grupy zasobów

Grupa zasobów platformy Azure to logiczna grupa przeznaczona do wdrażania zasobów platformy Azure i zarządzania nimi. Podczas tworzenia grupy zasobów zostanie wyświetlona prośba o określenie lokalizacji. Ta lokalizacja polega na tym, że metadane grupy zasobów są przechowywane, jest to również miejsce, w którym zasoby są uruchamiane na platformie Azure, jeśli nie określisz innego regionu podczas tworzenia zasobów. Utwórz grupę zasobów przy użyciu polecenia az group create.

Poniższy przykład obejmuje tworzenie grupy zasobów o nazwie myResourceGroup w lokalizacji eastus.

Uwaga

W tym artykule użyto składni powłoki Bash dla poleceń w tym samouczku. Jeśli używasz usługi Azure Cloud Shell, upewnij się, że lista rozwijana w lewym górnym rogu okna Cloud Shell jest ustawiona na powłokę Bash.

az group create --name myResourceGroup --location eastus

Następujące przykładowe dane wyjściowe przedstawiają pomyślnie utworzoną grupę zasobów:

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

Tworzenie klastra AKS

Aby uruchomić klaster usługi AKS obsługujący pule węzłów dla kontenerów systemu Windows Server, klaster musi używać zasad sieciowych korzystających z wtyczki sieciowej usługi Azure CNI (advanced). Aby uzyskać bardziej szczegółowe informacje ułatwiające planowanie wymaganych zakresów podsieci i zagadnień dotyczących sieci, zobacz Konfigurowanie sieci usługi Azure CNI. Użyj polecenia az aks create , aby utworzyć klaster usługi AKS o nazwie myAKSCluster. To polecenie spowoduje utworzenie niezbędnych zasobów sieciowych, jeśli nie istnieją.

  • Klaster jest skonfigurowany z dwoma węzłami.
  • Parametry --windows-admin-password i --windows-admin-username ustawiają poświadczenia administratora dla wszystkich węzłów systemu Windows Server w klastrze i muszą spełniać wymagania dotyczące haseł systemu Windows Server. Jeśli nie określisz parametru --windows-admin-password , zostanie wyświetlony monit o podanie wartości.
  • Pula węzłów używa metody VirtualMachineScaleSets.

Uwaga

Aby zapewnić niezawodne działanie klastra, należy uruchomić co najmniej 2 (dwa) węzły w domyślnej puli węzłów.

Utwórz nazwę użytkownika do użycia jako poświadczenia administratora dla węzłów systemu Windows Server w klastrze. Następujące polecenia monitują o nazwę użytkownika i ustaw ją na WINDOWS_USERNAME do użycia w późniejszym poleceniu (pamiętaj, że polecenia w tym artykule są wprowadzane w powłoce BASH).

echo "Please enter the username to use as administrator credentials for Windows Server nodes on your cluster: " && read WINDOWS_USERNAME

Utwórz klaster zapewniający określenie --windows-admin-username parametru. Poniższe przykładowe polecenie tworzy klaster przy użyciu wartości z WINDOWS_USERNAME ustawionych w poprzednim poleceniu. Alternatywnie możesz podać inną nazwę użytkownika bezpośrednio w parametrze zamiast używać WINDOWS_USERNAME. Następujące polecenie spowoduje również wyświetlenie monitu o utworzenie hasła dla poświadczeń administratora dla węzłów systemu Windows Server w klastrze. Alternatywnie możesz użyć parametru --windows-admin-password i określić własną wartość.

az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 2 \
    --enable-addons monitoring \
    --generate-ssh-keys \
    --windows-admin-username $WINDOWS_USERNAME \
    --vm-set-type VirtualMachineScaleSets \
    --network-plugin azure

Uwaga

Jeśli wystąpi błąd weryfikacji hasła, sprawdź, czy ustawione hasło spełnia wymagania dotyczące hasła systemu Windows Server. Jeśli hasło spełnia wymagania, spróbuj utworzyć grupę zasobów w innym regionie. Następnie spróbuj utworzyć klaster przy użyciu nowej grupy zasobów.

Jeśli nie określisz nazwy użytkownika i hasła administratora podczas ustawiania --vm-set-type VirtualMachineScaleSets i --network-plugin azure, nazwa użytkownika jest ustawiona na azureuser , a hasło jest ustawione na wartość losową.

Nie można zmienić nazwy użytkownika administratora, ale możesz zmienić hasło administratora używane przez klaster usługi AKS dla węzłów systemu Windows Server przy użyciu polecenia az aks update. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące pul węzłów systemu Windows Server.

Po kilku minutach polecenie zostanie wykonane i zwróci informacje o klastrze w formacie JSON. Czasami aprowizacja klastra może potrwać dłużej niż kilka minut. W takich przypadkach może upuścić maksymalnie 10 minut.

Dodawanie puli węzłów systemu Windows

Domyślnie klaster usługi AKS jest tworzony z pulą węzłów, która może uruchamiać kontenery systemu Linux. az aks nodepool add Użyj polecenia , aby dodać dodatkową pulę węzłów, która może uruchamiać kontenery systemu Windows Server wraz z pulą węzłów systemu Linux.

Usługa AKS obsługuje pule węzłów systemów Windows Server 2019 i Windows Server 2022. W przypadku platformy Kubernetes w wersji "1.25.0" i nowszych system Windows Server 2022 jest domyślnym systemem operacyjnym. W przypadku wcześniejszych wersji system Windows Server 2019 będzie domyślnym systemem operacyjnym.

az aks nodepool add Użyj polecenia , aby dodać pulę węzłów systemu Windows:

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

Powyższe polecenie tworzy nową pulę węzłów o nazwie npwin i dodaje ją do folderu myAKSCluster. Powyższe polecenie używa również domyślnej podsieci w domyślnej sieci wirtualnej utworzonej podczas uruchamiania az aks createpolecenia . Jednostka SKU systemu operacyjnego nie została określona, więc pula węzłów zostanie ustawiona na domyślny system operacyjny oparty na wersji kubernetes klastra.

Dodawanie puli węzłów systemu Windows Server 2019

Podczas tworzenia puli węzłów systemu Windows domyślnym systemem operacyjnym będzie system Windows Server 2019 dla wersji Kubernetes poniżej "1.25.0". Aby użyć węzłów systemu Windows Server 2019, jeśli nie jest to domyślne, należy określić typ jednostki SKU systemu operacyjnego .Windows2019

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

Powyższe polecenie tworzy nową pulę węzłów systemu Windows Server 2019 o nazwie npwin i dodaje ją do folderu myAKSCluster. Powyższe polecenie używa również domyślnej podsieci w domyślnej sieci wirtualnej utworzonej podczas uruchamiania az aks createpolecenia .

Dodawanie puli węzłów systemu Windows Server 2022

Podczas tworzenia puli węzłów systemu Windows domyślnym systemem operacyjnym będzie system Windows Server 2022 dla platformy Kubernetes w wersji "1.25.0" i nowszych. Aby użyć węzłów systemu Windows Server 2022, jeśli nie jest to domyślne, należy określić typ jednostki SKU systemu operacyjnego .Windows2022

Uwaga

System Windows Server 2022 wymaga platformy Kubernetes w wersji "1.23.0" lub nowszej.

az aks nodepool add Użyj polecenia , aby dodać pulę węzłów systemu Windows Server 2022:

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

Opcjonalnie: Używanie z containerd pulami węzłów systemu Windows Server

Począwszy od platformy Kubernetes w wersji 1.20 lub nowszej, można określić containerd jako środowisko uruchomieniowe kontenera dla pul węzłów systemu Windows Server 2019. Z platformy Kubernetes 1.23 kontenerd będzie domyślnym środowiskiem uruchomieniowym kontenera dla systemu Windows.

Ważne

W przypadku korzystania containerd z pul węzłów systemu Windows Server 2019:

  • Zarówno płaszczyzna sterowania, jak i pule węzłów systemu Windows Server 2019 muszą używać platformy Kubernetes w wersji 1.20 lub nowszej.
  • Podczas tworzenia lub aktualizowania puli węzłów w celu uruchamiania kontenerów systemu Windows Server wartość --node-vm-size domyślna to Standard_D2s_v3 co było minimalnym zalecanym rozmiarem pul węzłów systemu Windows Server 2019 przed platformą Kubernetes 1.20. Minimalny zalecany rozmiar pul węzłów systemu Windows Server 2019 jest containerdStandard_D4s_v3. Podczas ustawiania parametru --node-vm-size sprawdź listę ograniczonych rozmiarów maszyn wirtualnych.
  • Zdecydowanie zaleca się używanie defektów lub etykiet w pulach węzłów systemu Windows Server 2019 z uruchomionymi containerd i tolerancjami lub selektorami węzłów we wdrożeniach w celu zagwarantowania, że obciążenia są prawidłowo zaplanowane.

Dodawanie puli węzłów systemu Windows Server za pomocą polecenia containerd

az aks nodepool add Użyj polecenia , aby dodać pulę węzłów, która może uruchamiać kontenery systemu Windows Server ze środowiskiem uruchomieniowymcontainerd.

Uwaga

Jeśli nie określisz niestandardowego nagłówka WindowsContainerRuntime=containerd , pula węzłów będzie domyślnie używana containerd jako środowisko uruchomieniowe kontenera.

az aks nodepool add \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --os-type Windows \
    --name npwcd \
    --node-vm-size Standard_D4s_v3 \
    --kubernetes-version 1.20.5 \
    --aks-custom-headers WindowsContainerRuntime=containerd \
    --node-count 1

Powyższe polecenie tworzy nową pulę węzłów systemu Windows Server przy użyciu containerd jako środowiska uruchomieniowego o nazwie npwcd i dodaje ją do myAKSCluster. Powyższe polecenie używa również domyślnej podsieci w domyślnej sieci wirtualnej utworzonej podczas uruchamiania polecenia az aks create.

Uaktualnianie istniejącej puli węzłów systemu Windows Server do containerd

az aks nodepool upgrade Użyj polecenia , aby uaktualnić określoną pulę węzłów z platformy Docker do containerdprogramu .

az aks nodepool upgrade \
    --resource-group myResourceGroup \
    --cluster-name myAKSCluster \
    --name npwd \
    --kubernetes-version 1.20.7 \
    --aks-custom-headers WindowsContainerRuntime=containerd

Powyższe polecenie uaktualnia pulę węzłów o nazwie npwd do containerd środowiska uruchomieniowego.

Aby uaktualnić wszystkie istniejące pule węzłów w klastrze do używania containerd środowiska uruchomieniowego dla wszystkich pul węzłów systemu Windows Server:

az aks upgrade \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --kubernetes-version 1.20.7 \
    --aks-custom-headers WindowsContainerRuntime=containerd

Powyższe polecenie uaktualnia wszystkie pule węzłów systemu Windows Server w klastrze myAKSCluster do korzystania ze containerd środowiska uruchomieniowego.

Uwaga

Podczas uruchamiania polecenia --kubernetes-version uaktualniania określona wersja musi być nowsza niż bieżąca wersja puli węzłów.

Łączenie z klastrem

Aby zarządzać klastrem Kubernetes, należy użyć klienta wiersza polecenia usługi Kubernetes — narzędzia kubectl. Jeśli korzystasz z usługi Azure Cloud Shell, narzędzie kubectl jest już zainstalowane. Aby zainstalować narzędzie kubectl lokalnie, użyj polecenia az aks install-cli:

az aks install-cli

Aby skonfigurować narzędzie kubectl w celu nawiązania połączenia z klastrem Kubernetes, użyj polecenia az aks get-credentials. To polecenie powoduje pobranie poświadczeń i zastosowanie ich w konfiguracji interfejsu wiersza polecenia Kubernetes.

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Aby sprawdzić połączenie z klastrem, użyj polecenia kubectl get, aby powrócić do listy węzłów klastra.

kubectl get nodes -o wide

Poniższe przykładowe dane wyjściowe pokazują wszystkie węzły w klastrze. Upewnij się, że stan wszystkich węzłów to Gotowe:

NAME                                STATUS   ROLES   AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION     CONTAINER-RUNTIME
aks-nodepool1-12345678-vmss000000   Ready    agent   34m    v1.20.7   10.240.0.4    <none>        Ubuntu 18.04.5 LTS               5.4.0-1046-azure   containerd://1.4.4+azure
aks-nodepool1-12345678-vmss000001   Ready    agent   34m    v1.20.7   10.240.0.35   <none>        Ubuntu 18.04.5 LTS               5.4.0-1046-azure   containerd://1.4.4+azure
aksnpwcd123456                      Ready    agent   9m6s   v1.20.7   10.240.0.97   <none>        Windows Server 2019 Datacenter   10.0.17763.1879    containerd://1.4.4+unknown
aksnpwin987654                      Ready    agent   25m    v1.20.7   10.240.0.66   <none>        Windows Server 2019 Datacenter   10.0.17763.1879    docker://19.3.14

Uwaga

Środowisko uruchomieniowe kontenera dla każdej puli węzłów jest wyświetlane w obszarze CONTAINER-RUNTIME. Zwróć uwagę , że aksnpwin987654 zaczyna się od docker:// , co oznacza, że używa platformy Docker dla środowiska uruchomieniowego kontenera. Zwróć uwagę , że aksnpwcd123456 zaczyna się od containerd:// tego, co oznacza, że jest ono używane containerd dla środowiska uruchomieniowego kontenera.

Wdrażanie aplikacji

Plik manifestu platformy Kubernetes definiuje żądany stan klastra, w tym informacje o obrazach kontenera do uruchomienia. W tym artykule manifest służy do tworzenia wszystkich obiektów wymaganych do uruchomienia przykładowej aplikacji ASP.NET w kontenerze systemu Windows Server. Ten manifest obejmuje wdrożenie kubernetes dla przykładowej aplikacji ASP.NET oraz zewnętrzną usługę Kubernetes w celu uzyskania dostępu do aplikacji z Internetu.

Przykładowa aplikacja ASP.NET jest udostępniana w ramach przykładów .NET Framework i działa w kontenerze systemu Windows Server. Usługa AKS wymaga, aby kontenery systemu Windows Server bazły na obrazach systemu Windows Server 2019 lub nowszych. Plik manifestu kubernetes musi również zdefiniować selektor węzła , aby poinformować klaster usługi AKS o uruchomieniu zasobnika przykładowej aplikacji ASP.NET w węźle, który może uruchamiać kontenery systemu Windows Server.

Utwórz plik o nazwie sample.yaml i skopiuj go do poniższej definicji YAML. Jeśli używasz usługi Azure Cloud Shell, ten plik można utworzyć przy użyciu polecenia code, vilub nano tak, jakby działał w systemie wirtualnym lub fizycznym:

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

Aby uzyskać podział plików manifestu YAML, zobacz Deployments and YAML manifests (Wdrożenia i manifesty YAML).

Wdróż aplikację przy użyciu polecenia kubectl apply i podaj nazwę manifestu YAML:

kubectl apply -f sample.yaml

Następujące przykładowe dane wyjściowe pokazują pomyślne utworzenie wdrożenia i usługi:

deployment.apps/sample created
service/sample created

Testowanie aplikacji

Podczas uruchamiania aplikacji usługa Kubernetes uwidacznia fronton aplikacji w Internecie. Ten proces może potrwać kilka minut. Czasami aprowizacja usługi może potrwać dłużej niż kilka minut. W takich przypadkach poczekaj do 10 minut.

Aby monitorować postęp, użyj polecenia kubectl get-service z argumentem --watch.

kubectl get service sample --watch

Początkowo adres EXTERNAL-IP dla przykładowej usługi jest wyświetlany jako oczekujący.

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

Gdy dla adresu EXTERNAL-IP wartość oczekujący zmieni się na rzeczywisty publiczny adres IP, naciśnij klawisze CTRL-C, aby zatrzymać proces śledzenia narzędzia kubectl. Następujące przykładowe dane wyjściowe przedstawiają prawidłowy publiczny adres IP przypisany do usługi:

sample  LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   2m

Aby wyświetlić przykładową aplikację w działaniu, otwórz przeglądarkę internetową pod zewnętrznym adresem IP usługi.

Zrzut ekranu przedstawiający przechodzenie do przykładowej aplikacji ASP.NET.

Uwaga

Jeśli podczas próby załadowania strony zostanie wyświetlony limit czasu połączenia, sprawdź, czy przykładowa aplikacja jest gotowa, korzystając z następującego polecenia [kubectl get pods --watch]. Czasami kontener systemu Windows nie zostanie uruchomiony do momentu udostępnienia zewnętrznego adresu IP.

Usuwanie klastra

Aby uniknąć naliczania opłat za platformę Azure, jeśli nie planujesz korzystania z poniższych samouczków, użyj polecenia az group delete , aby usunąć grupę zasobów, usługę kontenera i wszystkie powiązane zasoby.

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

Uwaga

Klaster usługi AKS został utworzony przy użyciu tożsamości zarządzanej przypisanej przez system (domyślna opcja tożsamości używana w tym przewodniku Szybki start), tożsamość jest zarządzana przez platformę i nie wymaga usunięcia.

Następne kroki

W tym artykule wdrożono klaster Kubernetes i wdrożono w nim przykładową aplikację ASP.NET w kontenerze systemu Windows Server.

Aby dowiedzieć się więcej o usłudze AKS i poznać dokładnie proces od kompletnego kodu do wdrożenia, przejdź do samouczka dotyczącego klastra Kubernetes.