Criar e gerenciar um PIS (Especificação de Imagem Preparada) em AKS (Serviço de Kubernetes do Azure) (versão prévia)

A Especificação de Imagem Preparada (PIS) permite definir imagens de nó pré-configuradas que incluem as imagens de contêiner e personalizações necessárias. O AKS cria a imagem preparada uma única vez e a reutiliza durante o provisionamento dos nós, reduzindo o tempo de inicialização para operações subsequentes de escalonamento. Para obter mais informações sobre como a Especificação de Imagem Preparada funciona e quando usá-la, consulte Especificação de Imagem Preparada no AKS (versão prévia).

Este artigo mostra como criar e gerenciar um PIS no AKS.

Importante

As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

Pré-requisitos

  • Um cluster do AKS existente executando uma versão do Kubernetes com suporte. Se você não tiver um, confira Criar um cluster do AKS.
  • CLI do Azure versão 2.85.0 ou posterior. Execute az --version para localizar a sua versão. Se precisar instalar ou atualizar, consulte Instalar CLI do Azure.
  • Você precisa de permissões apropriadas Azure RBAC para criar e gerenciar recursos do AKS em seu grupo de recursos.
  • Suas imagens de contêiner devem estar acessíveis no cluster do AKS. Se você usar Registro de Contêiner do Azure (ACR), verifique se ele está integrado ao cluster do AKS.
  • A extensão da CLI aks-preview versão 21.0.0b5 ou posterior. Caso não tenha essa versão, confira Instalar a aks-preview extensão da CLI.
  • O sinalizador de recurso AKSPreparedImageSpecificationPreview registrado em sua assinatura. Se você não o registrou, confira Registrar o AKSPreparedImageSpecificationPreview sinalizador de recurso.

Limitações

As seguintes limitações se aplicam durante a versão prévia:

  • Disponível em regiões públicas do Azure, excluindo nuvens soberanas e ambientes isolados da Internet.
  • Os sistemas operacionais com suporte incluem Ubuntu, Azure Linux e Windows.
  • Scripts personalizados podem causar falhas na compilação da imagem ou no escalonamento vertical.
  • Talvez seja necessário recriar as especificações existentes ao modificá-las.

Instalar a extensão da CLI aks-preview

Instale a extensão da CLI do aks-preview usando o az extension add comando.

az extension add --name aks-preview

Atualize a extensão para garantir que você tenha a versão mais recente instalada usando o az extension update comando.

az extension update --name aks-preview

Registrar o sinalizador de recurso AKSPreparedImageSpecificationPreview

  1. Registre o sinalizador de recurso AKSPreparedImageSpecificationPreview na assinatura usando o comando az feature register.

    az feature register \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  2. Verifique o status do registro usando o az feature show comando.

    az feature show \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  3. Depois que a feature flag for registrada, atualize a inscrição do provedor de recursos Microsoft.ContainerService usando o comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Criar uma especificação de imagem preparada (PIS)

Criar uma especificação básica de imagem preparada

Crie um PIS usando o az aks prepared-image-specification create comando.

# 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

Criar uma especificação de imagem preparada com imagens armazenadas em cache

Crie um PIS que pré-armazena em cache imagens de contêiner usando o az aks prepared-image-specification create comando.

# 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

Criar uma especificação de imagem preparada usando scripts personalizados

Crie um PIS que executa scripts de personalização durante o build de imagem usando o az aks prepared-image-specification create comando.

# 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

Criar um cluster ou pool de nós usando uma Especificação de Imagem Preparada

Depois de criar um PIS, você pode referenciá-lo ao criar ou atualizar um cluster ou pool de nós. Você precisa da ID de recurso da versão preparada da imagem.

Criar um cluster usando um PIS

  1. Obtenha a ID do recurso de versão do PIS usando o comando 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. Crie um novo cluster do AKS que faça referência à imagem preparada usando o az aks create comando com o --prepared-image-specification-id parâmetro.

    # 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
    

Criar um pool de nós usando um PIS

  1. Obtenha a ID do recurso de versão do PIS usando o comando 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. Crie um novo pool de nós que faça referência à imagem preparada usando o comando az aks nodepool add com o parâmetro --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. Verifique se o pool de nós está usando o PIS usando o az aks nodepool show comando.

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

Gerenciar especificações de imagem preparadas

Listar especificações de imagem preparadas

Liste todas as Especificações de Imagem Preparadas em um grupo de recursos usando o az aks prepared-image-specification list comando.

# 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

Mostrar uma especificação de imagem preparada específica

Obtenha os detalhes de uma Especificação de Imagem Preparada específica usando o az aks prepared-image-specification show comando.

# 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

Atualizar metadados de especificação de imagem preparada

Há dois conceitos de recurso: o recurso do PIS e as versões do PIS. Atualizar metadados do PIS, como tags, atualiza o recurso PIS e não altera a imagem nem os scripts da versão referenciada. Para alterar imagens de contêineres ou scripts, crie uma nova versão do PIS e atualize o pool de nós para referenciar o ID dessa versão do PIS.

Você pode atualizar metadados, como marcas, em uma Especificação de Imagem Preparada existente usando o az aks prepared-image-specification update comando. Para alterar as imagens ou scripts de contêiner, crie uma nova versão.

# 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

Listar todas as versões de uma Especificação de Imagem Preparada

Liste todas as versões de uma Especificação de Imagem Preparada usando o az aks prepared-image-specification version list comando.

# 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

Mostrar uma versão específica de uma Especificação de Imagem Preparada

Obtenha os detalhes de uma versão específica usando o comando az aks prepared-image-specification version show com o parâmetro --name definido para a versão do 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

Listar grupos de nós que usam uma Prepared Image Specification específica

Para encontrar todos os pools de nós de um cluster que fazem referência a uma Especificação de Imagem Preparada, use o comando az aks nodepool list com um filtro 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]"

Atualizar uma versão de Especificação de Imagem Preparada

Quando suas imagens base, dependências ou personalizações forem alteradas, crie uma nova versão e atualize os pools de nós para referenciá-la. O fluxo de trabalho recomendado é:

  1. Crie uma nova versão com imagens ou scripts de contêiner atualizados.

  2. Valide a nova versão em um pool de nós não produtivo.

  3. Atualize os pools de nós de produção para fazer referência à nova versão.

    # 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. Limpar imagens não usadas para otimização de custo.

Atualizações de versão do AKS

Quando você atualiza a versão do Kubernetes, o AKS recria automaticamente o VHD preparado da versão do PIS referenciada. Você não precisa criar uma nova versão do PIS para uma atualização de versão do Kubernetes. Você deve criar uma nova versão do PIS quando o conteúdo do PIS, como imagens de contêiner ou scripts, for alterado.

Verifique se há atualizações disponíveis usando o az aks get-upgrades comando.

# 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

Atualize o cluster usando o az aks upgrade comando.

# 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

Importante

Crie e valide uma nova versão da Especificação de Imagem Preparada voltada para as novas versões do Kubernetes e da imagem de nó antes de atualizar os pools de nós de produção.

Atualize um pool de nós específico usando o az aks nodepool upgrade comando.

# 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

Remover uma especificação de imagem preparada de um pool de nós

Para deixar de usar uma Especificação de Imagem Preparada em um pool de nós, atualize o pool de nós usando o comando az aks nodepool update com uma cadeia de caracteres vazia para o parâmetro --prepared-image-specification-id.

# 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 ""

Excluir uma versão de Especificação de Imagem Preparada

Exclua uma versão específica usando o az aks prepared-image-specification version delete comando.

Importante

Não exclua uma versão do PIS referenciada por um pool de nós. Você deve atualizar o pool de nós para remover o PIS ou referenciar outra versão do PIS. Excluir uma versão referenciada pode impedir que o AKS recompile ou reverta com êxito a imagem preparada.

# 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

Excluir uma especificação de imagem preparada

Exclua todo um recurso de Especificação de Imagem Preparada usando o az aks prepared-image-specification delete comando.

Importante

Antes de excluir um recurso do PIS, verifique se nenhum pool de nós faz referência a nenhuma de suas versões. Se você encontrar referências, remova ou atualize-as antes de excluir o recurso do PIS. Excluir uma PIS referenciada pode impedir que o AKS recompile ou reverta com êxito a imagem preparada.

# 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

Monitorar o desempenho da Especificação de Imagem Preparada

Para avaliar se o PIS está reduzindo a latência de provisionamento em seu ambiente, monitore as seguintes métricas:

  • Duração do provisionamento do nó e tempo até ficar pronto: compare com nós que não usam uma imagem preparada.
  • Tempo de conclusão da expansão horizontal: tempo desde o acionamento do autoescalador até os nós entrarem no estado Ready.
  • Duração da compilação da imagem e taxa de êxito da compilação: acompanhe a integridade do pipeline de preparação da imagem.
  • Tempo de inicialização do pod e duração da extração da imagem do contêiner: verifique se o pré-armazenamento em cache de imagens está sendo usado com eficácia.

Solucionar problemas de especificação de imagem preparada

Os erros relacionados ao PIS devem incluir o motivo da falha e muitas falhas provavelmente virão de scripts personalizados. Se a criação ou o aumento de escala do pool de nós falhar após adicionar a PIS, inspecione os logs da compilação da imagem e do script personalizado e valide o script antes de criar uma nova versão ou de atualizar a referência do pool de nós.

Falha na criação de imagem

Note

Quando um script de personalização falha durante a criação da imagem, o AKS desaloca a VM de build em vez de excluí-la, para que o cliente possa iniciá-la e fazer a depuração. Em rebakes posteriores da PIS, o AKS exclui e recria o conjunto de dimensionamento de máquinas virtuais e os recursos de build.

Se a PIS não criar a imagem preparada, verifique se:

  • Scripts de personalização inválidos ou malformados.
  • Falhas de autenticação do registro de contêiner – verifique se o cluster do AKS tem acesso de pull aos registros especificados.
  • Faltam permissões do Azure RBAC no grupo de recursos ou no registro.
  • Tipos de personalização sem suporte para o sistema operacional de destino.

Falha na criação do pool de nós

Se um pool de nós que referencia uma PIS falhar ao ser criado, verifique:

  • A ID da versão do PIS é válida e a versão existe na mesma região.
  • Sua assinatura tem cota suficiente para a SKU de VM solicitada.
  • A SKU de VM solicitada é compatível com a imagem preparada.
  • A região oferece suporte ao recurso PIS durante a versão prévia.

As operações de escala não são mais rápidas

Se você não observar redução no tempo de provisionamento, verifique:

  • As imagens de contêiner que você deseja acelerar estão incluídas na versão do PIS.
  • O pool de nós faz referência à versão correta.
  • Novos nós são inicializados da imagem preparada, não da imagem base do nó do AKS.
  • O gargalo é o tempo para baixar a imagem do contêiner, não a inicialização da carga de trabalho nem outras etapas de inicialização.

Limpar os recursos

Se você criou recursos neste artigo para fins de teste, exclua-os quando terminar para evitar encargos contínuos. Isso inclui versões do PIS, recursos do PIS, pools de nós de teste e clusters de teste do AKS.

Para excluir o grupo de recursos e todos os recursos nele, use o az group delete comando.

# 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

Para saber mais sobre a Especificação de Imagem Preparada, consulte Especificação de Imagem Preparada no AKS (versão prévia).