Tworzenie przygotowanej specyfikacji obrazu (PIS) i zarządzanie nią w Azure Kubernetes Service (AKS) (wersja zapoznawcza)

Przygotowana specyfikacja obrazu (PIS) umożliwia definiowanie wstępnie skonfigurowanych obrazów węzłów zawierających wymagane obrazy kontenerów i dostosowania. Usługa AKS kompiluje przygotowany obraz raz i ponownie używa go podczas aprowizacji węzła, co skraca czas uruchamiania dla kolejnych operacji skalowania. Aby uzyskać więcej informacji na temat sposobu działania przygotowanej specyfikacji obrazu i sposobu jej używania, zobacz Przygotowana specyfikacja obrazu w usłudze AKS (wersja zapoznawcza).

W tym artykule opisano, jak utworzyć PIS i zarządzać nim w usłudze AKS.

Important

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Wymagania wstępne

  • Istniejący klaster usługi AKS z obsługiwaną wersją rozwiązania Kubernetes. Jeśli go nie masz, zobacz Utwórz klaster AKS.
  • Azure CLI w wersji 2.85.0 lub nowszej. Uruchom polecenie az --version , aby znaleźć swoją wersję. Jeśli musisz zainstalować lub uaktualnić, zobacz Install Azure CLI.
  • Potrzebujesz odpowiednich uprawnień Azure RBAC do tworzenia zasobów AKS i zarządzania nimi w swojej grupie zasobów.
  • Obrazy kontenerów muszą być dostępne dla klastra AKS. Jeśli używasz usługi Azure Container Registry (ACR), upewnij się, że jest ona zintegrowana z klastrem usługi AKS.
  • Rozszerzenie aks-preview interfejsu wiersza polecenia w wersji 21.0.0b5 lub nowszej. Jeśli go nie masz, zapoznaj się z tematem Instalowanie rozszerzenia aks-preview CLI.
  • Flaga funkcji AKSPreparedImageSpecificationPreview zarejestrowana w Twojej subskrypcji. Jeśli flaga nie została jeszcze zarejestrowana, zobacz temat Zarejestruj flagę AKSPreparedImageSpecificationPreview funkcji.

Limitations

W wersji zapoznawczej obowiązują następujące ograniczenia:

  • Dostępne w publicznych regionach platformy Azure, z wyjątkiem chmur suwerennych i środowisk odizolowanych od sieci.
  • Obsługiwane systemy operacyjne to Ubuntu, Azure Linux i Windows.
  • Skrypty niestandardowe mogą powodować błędy kompilacji obrazu lub skalowania w górę.
  • Może być konieczne ponowne utworzenie istniejących specyfikacji podczas ich modyfikowania.

Zainstaluj rozszerzenie CLI aks-preview

Zainstaluj rozszerzenie interfejsu wiersza polecenia aks-preview za pomocą polecenia az extension add.

az extension add --name aks-preview

Zaktualizuj rozszerzenie, aby upewnić się, że masz zainstalowaną najnowszą wersję przy użyciu az extension update polecenia .

az extension update --name aks-preview

Zarejestruj flagę funkcji AKSPreparedImageSpecificationPreview

  1. Zarejestruj flagę funkcji AKSPreparedImageSpecificationPreview w subskrypcji przy użyciu polecenia az feature register.

    az feature register \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  2. Sprawdź stan rejestracji przy użyciu az feature show polecenia .

    az feature show \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  3. Po zarejestrowaniu flagi funkcji odśwież rejestrację dostawcy zasobów Microsoft.ContainerService za pomocą polecenia az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Tworzenie przygotowanej specyfikacji obrazu (PIS)

Tworzenie podstawowej przygotowanej specyfikacji obrazu

Utwórz PIS za pomocą polecenia az aks prepared-image-specification create.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
PIS_NAME=<your-pis-name>
LOCATION=<location>
PIS_VERSION=v1

# Create a basic Prepared Image Specification
az aks prepared-image-specification create \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --version $PIS_VERSION \
    --location $LOCATION

Tworzenie przygotowanej specyfikacji obrazu z buforowanych obrazów

Utwórz środowisko PIS, które wstępnie buforuje obrazy kontenerów przy użyciu az aks prepared-image-specification create polecenia .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
PIS_NAME=<your-pis-name>
LOCATION=<location>
PIS_VERSION=v1

# Create a Prepared Image Specification with cached images
az aks prepared-image-specification create \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --version $PIS_VERSION \
    --container-images \
        myacr.azurecr.io/model-server:v1 \
        myacr.azurecr.io/inference:v1

Tworzenie przygotowanej specyfikacji obrazu przy użyciu skryptów niestandardowych

Utwórz kod PIS, który uruchamia skrypty dostosowywania podczas kompilacji obrazu przy użyciu az aks prepared-image-specification create polecenia .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
PIS_NAME=<your-pis-name>
LOCATION=<location>
PIS_VERSION=v1

# Create a Prepared Image Specification using custom scripts
az aks prepared-image-specification create \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --version $PIS_VERSION \
    --customization-scripts @scripts.json

Tworzenie klastra lub puli węzłów przy użyciu przygotowanej specyfikacji obrazu

Po utworzeniu PIS możesz się do niego odwoływać podczas tworzenia lub aktualizowania klastra lub puli węzłów. Potrzebny jest identyfikator zasobu przygotowanej wersji obrazu.

Utwórz klaster za pomocą PIS

  1. Pobierz identyfikator zasobu wersji PIS za pomocą polecenia az aks prepared-image-specification version show.

    # Set environment variables
    RESOURCE_GROUP=<your-resource-group>
    PIS_NAME=<your-pis-name>
    PIS_VERSION=v1
    
    # Get the PIS version resource ID
    PIS_VERSION_ID=$(az aks prepared-image-specification version show \
        --resource-group $RESOURCE_GROUP \
        --pis-name $PIS_NAME \
        --name $PIS_VERSION \
        --query id -o tsv)
    
  2. Utwórz nowy klaster AKS, który odwołuje się do przygotowanego obrazu za pomocą polecenia az aks create z parametrem --prepared-image-specification-id.

    # Set environment variables
    CLUSTER_NAME=<your-aks-cluster-name>
    
    # Create a new AKS cluster using the prepared image
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --prepared-image-specification-id $PIS_VERSION_ID \
        --generate-ssh-keys
    

Utwórz pulę węzłów za pomocą PIS

  1. Pobierz identyfikator zasobu wersji PIS za pomocą polecenia az aks prepared-image-specification version show.

    # Set environment variables
    RESOURCE_GROUP=<your-resource-group>
    PIS_NAME=<your-pis-name>
    PIS_VERSION=v1
    
    # Get the PIS version resource ID
    PIS_VERSION_ID=$(az aks prepared-image-specification version show \
        --resource-group $RESOURCE_GROUP \
        --pis-name $PIS_NAME \
        --name $PIS_VERSION \
        --query id -o tsv)
    
  2. Utwórz nową pulę węzłów, która odwołuje się do przygotowanego obrazu za pomocą polecenia az aks nodepool add z parametrem --prepared-image-specification-id.

    # Set environment variables
    CLUSTER_NAME=<your-aks-cluster-name>
    
    # Create a new node pool using the prepared image
    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name userpool \
        --prepared-image-specification-id $PIS_VERSION_ID
    
  3. Sprawdź, czy pula węzłów używa języka PIS przy użyciu az aks nodepool show polecenia .

    az aks nodepool show \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name userpool \
        --query "{state:provisioningState, pisId:preparedImageSpecificationId}"
    

Zarządzanie przygotowanymi specyfikacjami obrazów

Lista przygotowanych specyfikacji obrazów

Wyświetl listę wszystkich specyfikacji przygotowanych obrazów w grupie zasobów za pomocą polecenia az aks prepared-image-specification list.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>

# List all Prepared Image Specifications in the resource group
az aks prepared-image-specification list --resource-group $RESOURCE_GROUP

Pokaż określoną specyfikację przygotowanego obrazu

Uzyskaj szczegółowe informacje o określonej przygotowanej specyfikacji obrazu przy użyciu az aks prepared-image-specification show polecenia .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# Show the details of the Prepared Image Specification
az aks prepared-image-specification show \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME

Aktualizowanie metadanych przygotowanej specyfikacji obrazu

Istnieją dwie koncepcje zasobów: zasób PIS i wersje PIS. Aktualizowanie metadanych PIS, takich jak tagi, aktualizuje zasób PIS i nie zmienia obrazu ani skryptów wersji, do których odwołuje się odwołanie. Aby zmienić obrazy kontenerów lub skrypty, utwórz nową wersję PIS i zaktualizuj pulę węzłów tak, aby odwoływała się do identyfikatora tej wersji PIS.

Metadane, takie jak tagi, można zaktualizować przy użyciu istniejącej przygotowanej specyfikacji obrazu za pomocą az aks prepared-image-specification update polecenia . Aby zmienić obrazy kontenerów lub skrypty, utwórz nową wersję.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# Update the Prepared Image Specification metadata
az aks prepared-image-specification update \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME \
    --tags environment=prod

Wyświetlanie listy wszystkich wersji przygotowanej specyfikacji obrazu

Wyświetl listę wszystkich wersji przygotowanej specyfikacji obrazu przy użyciu az aks prepared-image-specification version list polecenia .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# List all versions of the Prepared Image Specification
az aks prepared-image-specification version list \
    --resource-group $RESOURCE_GROUP \
    --pis-name $PIS_NAME

Pokaż określoną wersję przygotowanej specyfikacji obrazu

Uzyskaj szczegółowe informacje o określonej wersji przy użyciu az aks prepared-image-specification version show polecenia z parametrem --name ustawionym na wersję PIS.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>
PIS_VERSION=v1

# Show the details of the specific version of the Prepared Image Specification
az aks prepared-image-specification version show \
    --resource-group $RESOURCE_GROUP \
    --pis-name $PIS_NAME \
    --name $PIS_VERSION

Wyświetl pule węzłów korzystające z określonej specyfikacji przygotowanego obrazu

Aby znaleźć wszystkie pule węzłów w klastrze, które odwołują się do specyfikacji Prepared Image Specification, użyj polecenia az aks nodepool list z filtrem JMESPath.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>

# List all node pools in the cluster that reference a Prepared Image Specification
az aks nodepool list \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $CLUSTER_NAME \
    --query "[?preparedImageSpecificationId != null]"

Uaktualnianie przygotowanej wersji specyfikacji obrazu

Gdy obrazy bazowe, zależności lub dostosowania ulegną zmianie, utwórz nową wersję i zaktualizuj pule węzłów, tak aby odwoływały się do niej. Zalecany przepływ pracy to:

  1. Utwórz nową wersję ze zaktualizowanymi obrazami kontenerów lub skryptami.

  2. Zweryfikuj nową wersję w puli węzłów nieprodukcyjnych.

  3. Zaktualizuj pule węzłów produkcyjnych, aby odwoływać się do nowej wersji.

    # Set environment variables
    RESOURCE_GROUP=<your-resource-group>
    CLUSTER_NAME=<your-aks-cluster-name>
    NEW_PIS_VERSION_ID=<new-pis-version-resource-id>
    
    # Update a node pool to reference a new PIS version using the `az aks nodepool update` command
    az aks nodepool update \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $CLUSTER_NAME \
        --name userpool \
        --prepared-image-specification-id $NEW_PIS_VERSION_ID
    
  4. Wyczyść nieużywane obrazy na potrzeby optymalizacji kosztów.

Uaktualnienia wersji usługi AKS

Gdy uaktualnisz wersję platformy Kubernetes, usługa AKS automatycznie ponownie utworzy wstępnie przygotowany obraz VHD dla wskazanej wersji PIS. Nie musisz tworzyć nowej wersji PIS na potrzeby aktualizacji wersji Kubernetes. Należy utworzyć nową wersję PIS, gdy zawartość pakietu PIS, taka jak obrazy kontenerowe lub skrypty, ulegnie zmianie.

Sprawdź dostępne uaktualnienia przy użyciu az aks get-upgrades polecenia .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>

# Check for available upgrades
az aks get-upgrades \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME

Uaktualnij klaster przy użyciu az aks upgrade polecenia .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
KUBERNETES_VERSION=<new-kubernetes-version>

# Upgrade the cluster to the new Kubernetes version
az aks upgrade \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --kubernetes-version $KUBERNETES_VERSION

Important

Utwórz i zweryfikuj nową wersję specyfikacji przygotowanego obrazu, ukierunkowaną na nowe wersje obrazów Kubernetes i obrazów węzłów, przed przeprowadzeniem aktualizacji produkcyjnych pul węzłów.

Uaktualnij określoną pulę węzłów przy użyciu az aks nodepool upgrade polecenia .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>
NODE_POOL_NAME=<your-node-pool-name>

# Upgrade the node pool to the new Kubernetes version
az aks nodepool upgrade \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $CLUSTER_NAME \
    --name $NODE_POOL_NAME

Usuwanie przygotowanej specyfikacji obrazu z puli węzłów

Aby przestać używać specyfikacji przygotowanego obrazu w puli węzłów, zaktualizuj pulę węzłów za pomocą polecenia az aks nodepool update, ustawiając parametr --prepared-image-specification-id na pusty ciąg.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
CLUSTER_NAME=<your-aks-cluster-name>

# Remove the Prepared Image Specification from the node pool
az aks nodepool update \
  --resource-group $RESOURCE_GROUP \
  --cluster-name $CLUSTER_NAME \
  --name userpool \
  --prepared-image-specification-id ""

Usuwanie przygotowanej wersji specyfikacji obrazu

Usuń określoną wersję przy użyciu az aks prepared-image-specification version delete polecenia .

Important

Nie usuwaj wersji PIS, której używa pula węzłów. Zamiast tego należy zaktualizować pulę węzłów, aby usunąć z niej PIS lub odwoływać się do innej wersji PIS. Usunięcie przywoływałej wersji może uniemożliwić usłudze AKS pomyślne ponowne kompilowanie lub stopniowe przygotowywanie obrazu.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>
PIS_VERSION=<your-pis-version>

# Delete the specific version of the Prepared Image Specification
az aks prepared-image-specification version delete \
    --resource-group $RESOURCE_GROUP \
    --pis-name $PIS_NAME \
    --name $PIS_VERSION

Usuwanie przygotowanej specyfikacji obrazu

Usuń cały zasób przygotowanej specyfikacji obrazu przy użyciu az aks prepared-image-specification delete polecenia .

Important

Przed usunięciem zasobu PIS upewnij się, że żadna z pul węzłów nie odwołuje się do żadnej z jego wersji. Jeśli znajdziesz odwołania, usuń je lub zaktualizuj przed usunięciem zasobu PIS. Usunięcie odwołania do PIS może uniemożliwić usłudze AKS pomyślne ponowne utworzenie lub wdrożenie przygotowanego obrazu.

# Set environment variables
RESOURCE_GROUP=<your-resource-group>
PIS_NAME=<your-pis-name>

# Delete the Prepared Image Specification
az aks prepared-image-specification delete \
    --resource-group $RESOURCE_GROUP \
    --name $PIS_NAME

Monitorowanie wydajności przygotowanej specyfikacji obrazu

Aby ocenić, czy PIS zmniejsza opóźnienia aprowizacji w Twoim środowisku, monitoruj następujące wskaźniki:

  • Czas aprowizacji węzła i czas gotowości: porównaj z węzłami, które nie używają przygotowanego obrazu.
  • Czas zakończenia skalowania w poziomie: czas od wyzwolenia autoskalera do momentu, gdy węzły osiągną stan Gotowe.
  • Czas tworzenia obrazu i wskaźnik powodzenia tworzenia obrazu: Śledź stan potoku przygotowania obrazu.
  • Czas uruchamiania zasobnika i czas pobierania obrazu kontenera: Sprawdź, czy wstępne buforowanie obrazów jest skutecznie wykorzystywane.

Rozwiązywanie problemów ze przygotowaną specyfikacją obrazu

Błędy związane z PIS powinny zawierać przyczynę niepowodzenia, a wiele niepowodzeń prawdopodobnie wynika z niestandardowych skryptów. Jeśli tworzenie puli węzłów lub jej skalowanie kończy się niepowodzeniem po dodaniu PIS, należy sprawdzić dzienniki tworzenia obrazu/niestandardowego skryptu i zweryfikować skrypt przed utworzeniem nowej wersji lub zaktualizowaniem odniesienia do puli węzłów.

Tworzenie obrazu kończy się niepowodzeniem

Uwaga / Notatka

Gdy skrypt dostosowywania zakończy się niepowodzeniem podczas kompilacji obrazu, usługa AKS cofnie przydział maszyny wirtualnej kompilacji zamiast go usunąć, aby klient mógł go uruchomić i debugować. Podczas kolejnych przebudowań PIS usługa AKS usuwa i ponownie tworzy zestaw skalowania maszyn wirtualnych oraz zasoby kompilacji.

Jeśli system PIS nie może utworzyć przygotowanego obrazu, sprawdź:

  • Nieprawidłowe lub źle sformułowane skrypty dostosowywania.
  • Błędy uwierzytelniania w rejestrze kontenerów — sprawdź, czy klaster AKS ma uprawnienia do pobierania z wskazanych rejestrów.
  • Brak uprawnień RBAC platformy Azure do grupy zasobów lub rejestru.
  • Nieobsługiwane typy dostosowywania dla docelowego systemu operacyjnego.

Tworzenie puli węzłów kończy się niepowodzeniem

Jeśli nie uda się utworzyć puli węzłów odwołującej się do PIS, sprawdź:

  • Identyfikator wersji PIS jest prawidłowy i wersja istnieje w tym samym regionie.
  • Twoja subskrypcja ma wystarczający limit dla żądanego SKU maszyny wirtualnej.
  • Żądany typ SKU maszyny wirtualnej jest obsługiwany przez przygotowany obraz.
  • Ten region obsługuje funkcję PIS w ramach wersji zapoznawczej.

Operacje skalowania nie są szybsze

Jeśli nie widzisz skrócenia czasu aprowizacji, sprawdź:

  • Obrazy kontenerów, które chcesz przyspieszyć, są uwzględniane w wersji PIS.
  • Pula węzłów odwołuje się do poprawnej wersji.
  • Nowe węzły są uruchamiane przy użyciu przygotowanego obrazu, a nie podstawowego obrazu węzła AKS.
  • Wąskie gardło to czas pobierania obrazu kontenera, a nie uruchamianie obciążenia roboczego ani inne etapy inicjalizacji.

Uprzątnij zasoby

Jeśli zasoby zostały utworzone w tym artykule na potrzeby testowania, usuń je po zakończeniu, aby uniknąć bieżących opłat. Obejmuje to wersje PIS, zasoby PIS, testowe pule węzłów i testowe klastry AKS.

Aby usunąć grupę zasobów i wszystkie zasoby w niej, użyj az group delete polecenia .

# Set environment variables
RESOURCE_GROUP=<your-resource-group>

# Delete the resource group and all resources in it
az group delete \
    --name $RESOURCE_GROUP \
    --yes \
    --no-wait

Aby dowiedzieć się więcej na temat przygotowanej specyfikacji obrazu, zobacz Przygotowana specyfikacja obrazu w usłudze AKS (wersja zapoznawcza).