Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A Especificação de Imagem Preparada (PIS) permite-lhe definir imagens de nós pré-configuradas que incluem as imagens dos contentores necessárias e as personalizações. O AKS constrói a imagem preparada uma vez e reutiliza-a durante o provisionamento de nós, reduzindo o tempo de inicialização para operações de dimensionamento subsequentes. Para mais informações sobre como funciona a Especificação de Imagem Preparada e quando a utilizar, consulte Especificação de Imagem Preparada no AKS (Pré-visualização).
Este artigo mostra-lhe como criar e gerir um PIS no AKS.
Importante
As funcionalidades de pré-visualização do AKS estão disponíveis num regime de autosserviço e de adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de pré-visualização do AKS são apenas parcialmente abrangidas pelo suporte ao cliente, na medida do possível. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:
Pré-requisitos
- Um cluster do AKS existente com uma versão do Kubernetes suportada. Caso não tenhas um, consulta Criar um cluster AKS.
- CLI do Azure versão 2.85.0 ou posterior. Execute
az --versionpara encontrar a sua versão. Se precisar de instalar ou atualizar, consulte Install CLI do Azure. - Precisa de permissões Azure RBAC apropriadas para criar e gerir recursos AKS no seu grupo de recursos.
- As imagens do teu contentor devem estar acessíveis a partir do cluster AKS. Se usar o Azure Container Registry (ACR), certifique-se de que está integrado com o seu cluster AKS.
- A extensão
aks-previewCLI na versão 21.0.0b5 ou posterior. Se não a tiveres, consulta Instalar aaks-previewextensão da CLI. - A feature flag
AKSPreparedImageSpecificationPreviewestá registada na sua subscrição. Se ainda não o registou, consulte Registar oAKSPreparedImageSpecificationPreviewsinalizador de funcionalidade.
Limitações
As seguintes limitações aplicam-se durante a pré-visualização:
- Disponível em regiões públicas de Azure, excluindo nuvens soberanas e ambientes isolados.
- Os sistemas operativos suportados incluem Ubuntu, Azure Linux e Windows.
- Os scripts personalizados podem causar falhas na criação da imagem ou no aumento de escala.
- Pode ser necessário recriar especificações existentes quando as modificar.
Instalar a aks-preview extensão CLI
Instala a extensão da CLI aks-preview usando o az extension add comando.
az extension add --name aks-preview
Atualize a extensão para garantir que tem a versão mais recente instalada usando o az extension update comando.
az extension update --name aks-preview
Registar o sinalizador de funcionalidade AKSPreparedImageSpecificationPreview
Registar o flag de funcionalidade
AKSPreparedImageSpecificationPreviewna sua subscrição utilizando o comandoaz feature register.az feature register \ --namespace Microsoft.ContainerService \ --name AKSPreparedImageSpecificationPreviewVerifique o estado do registo usando o
az feature showcomando.az feature show \ --namespace Microsoft.ContainerService \ --name AKSPreparedImageSpecificationPreviewDepois de o sinalizador de funcionalidade estar registado, atualize o registo do fornecedor de recursos Microsoft.ContainerService com o comando
az provider register.az provider register --namespace Microsoft.ContainerService
Criar uma Especificação de Imagem Preparada (PIS)
Crie 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
Crie uma Especificação de Imagem Preparada com imagens em cache
Crie um PIS que pré-cache imagens do contentor 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
Crie uma Especificação de Imagem Preparada usando scripts personalizados
Crie um PIS que execute scripts de personalização durante a construção da 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
Crie um cluster ou pool de nós usando uma Especificação de Imagem Preparada
Depois de criar um PIS, pode referenciá-lo ao criar ou atualizar um cluster ou pool de nós. Precisas do ID do recurso da versão da imagem preparada.
Crie um cluster usando um PIS
Obtenha o ID do recurso da versão PIS usando o
az aks prepared-image-specification version showcomando.# 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)Crie um novo cluster AKS que faça referência à imagem preparada usando o
az aks createcomando com o--prepared-image-specification-idparâ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
Crie um pool de nós usando um PIS
Obtenha o ID do recurso da versão PIS usando o
az aks prepared-image-specification version showcomando.# 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)Crie um novo pool de nós que faça referência à imagem preparada usando o
az aks nodepool addcomando com o--prepared-image-specification-idparâmetro.# 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_IDVerifica se o pool de nós está a usar o PIS usando o
az aks nodepool showcomando.az aks nodepool show \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name userpool \ --query "{state:provisioningState, pisId:preparedImageSpecificationId}"
Gerir Especificações de Imagens Preparadas
Lista de Especificações da Imagem Preparada
Liste todas as Especificações de Imagem Preparadas num 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 Específica de Imagem Preparada
Obtenha os detalhes de uma Especificação específica de Imagem Preparada 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 da Especificação da Imagem Preparada
Existem dois conceitos de recursos: o recurso PIS e as versões PIS. A atualização dos metadados do PIS, como as etiquetas, atualiza o recurso PIS e não altera a imagem nem os scripts da versão referenciada. Para alterar imagens ou scripts de contentores, crie uma nova versão PIS e atualize o pool de nós para referenciar esse ID de versão PIS.
Pode atualizar metadados, como etiquetas, numa Especificação de Imagem Preparada existente usando o az aks prepared-image-specification update comando. Para alterar as imagens ou scripts do contentor, crie uma nova versão em vez disso.
# 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
Liste 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 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 conjuntos de nós que utilizam uma especificação de imagem preparada específica
Para encontrar todos os conjuntos de nós num 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]"
Atualize uma versão da Especificação da Imagem Preparada
Quando as tuas imagens base, dependências ou personalizações mudarem, cria uma nova versão e atualiza os teus conjuntos de nós para a referenciar. O fluxo de trabalho recomendado é:
Crie uma nova versão com imagens ou scripts atualizados dos contentores.
Valide a nova versão num pool de nós não de produção.
Atualizar os pools de nós de produção para referenciar a 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_IDLimpar imagens não utilizadas para otimização de custos.
Atualizações da versão AKS
Quando atualizas a versão Kubernetes, o AKS reconstrói automaticamente o VHD preparado para a versão PIS referenciada. Não precisas de criar uma nova versão PIS para uma atualização da versão Kubernetes. Deve criar uma nova versão do PIS quando o conteúdo do PIS, como imagens de contentores ou scripts, muda.
Verifique as melhorias 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
Atualiza 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 destinada às novas versões do Kubernetes e das imagens de nó antes de atualizar os pools de nós de produção.
Atualize um pool de nós específico utilizando o comando az aks nodepool upgrade.
# 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 utilizar uma especificação de imagem preparada num conjunto de nós, atualize o conjunto de nós usando o comando az aks nodepool update com uma cadeia 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 ""
Eliminar uma versão da Especificação de Imagem Preparada
Apaga uma versão específica usando o az aks prepared-image-specification version delete comando.
Importante
Não elimine uma versão do PIS que seja referenciada por um conjunto de nós. Em vez disso, deve atualizar o pool de nós para remover o PIS ou referenciar outra versão do PIS. A eliminação de uma versão referenciada pode impedir que o AKS reconstrua com êxito ou implemente 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
Eliminar uma Especificação de Imagem Preparada
Elimine todo um recurso de Especificação de Imagem Preparada usando o az aks prepared-image-specification delete comando.
Importante
Antes de eliminar um recurso PIS, certifique-se de que nenhum pool de nós faz referência a nenhuma das suas versões. Se encontrar alguma referência, remova-as ou atualize-as antes de eliminar o recurso PIS. Apagar um PIS referenciado pode impedir que o AKS recrie ou implemente 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
Desempenho da Especificação de Imagem Preparada pelo Monitor
Para avaliar se o PIS está a reduzir a latência de provisionamento no seu ambiente, monitorize as seguintes métricas:
- Duração do aprovisionamento de nós e tempo até estar pronto: Compare com os nós que não usam uma imagem preparada.
- Tempo até à conclusão da expansão horizontal: Tempo desde o acionamento do dimensionador automático até os nós estarem no estado «Ready».
- Duração da compilação da imagem e taxa de sucesso da compilação: Acompanhe a saúde do pipeline de preparação da imagem.
- Tempo de arranque do pod e duração da transferência da imagem do contentor: Verifique se o pré-armazenamento em cache da imagem está a ser utilizado de forma eficaz.
Especificação de Imagem Preparada para Resolução de Problemas
Erros relacionados com PIS devem incluir a razão da falha, e muitas falhas provavelmente resultam de scripts personalizados. Se a criação ou a expansão do pool de nós falhar após adicionar PIS, deve inspecionar os registos da compilação da imagem/do script personalizado e validar o script antes de criar uma nova versão ou atualizar a referência do pool de nós.
A criação de imagens falha
Observação
Quando um script de personalização falha durante a construção da imagem, o AKS desaloca a VM de build em vez de a apagar para que o cliente a possa iniciar e depurar. Em recriações posteriores do PIS, o AKS elimina e recria o conjunto de dimensionamento de máquinas virtuais e os recursos de compilação.
Se o PIS não conseguir criar a imagem preparada, verifique se existe algum dos seguintes problemas:
- Scripts de personalização inválidos ou malformados.
- Falhas de autenticação de registos de contentores - verifique se o cluster AKS tem acesso pull aos registos especificados.
- Faltam permissões de Azure RBAC no grupo de recursos ou no registo.
- Tipos de personalização não suportados para o sistema operativo alvo.
Falha na criação de conjuntos de nós
Se não for possível criar um pool de nós que referencia um PIS, verifique:
- O ID da versão PIS é válido e a versão existe na mesma região.
- A sua subscrição tem quota suficiente para o SKU VM solicitado.
- O SKU da VM solicitado é suportado pela imagem preparada.
- A região suporta a funcionalidade PIS durante a pré-visualização.
As operações de escala não são mais rápidas
Se não vir redução no tempo de provisionamento, verifique:
- As imagens do contentor que pretende acelerar estão incluídas na versão PIS.
- O pool de nós refere-se à versão correta.
- Novos nós arrancam a partir da imagem preparada, não da imagem base do AKS.
- O gargalo é o tempo de extração da imagem do contentor, não o arranque da carga de trabalho ou outra inicialização.
Limpeza de recursos
Se criou recursos neste artigo para fins de teste, elimine-os quando terminar para evitar cobranças contínuas. Isto inclui versões do PIS, recursos do PIS, pools de nós de teste e clusters AKS de teste.
Para eliminar 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
Conteúdo relacionado
Para saber mais sobre a Especificação de Imagem Preparada, consulte Especificação de Imagem Preparada no AKS (Pré-visualização).