Crear y administrar una especificación de imagen preparada (PIS) en Azure Kubernetes Service (AKS) (versión preliminar)

La especificación de imagen preparada (PIS) le permite definir imágenes de nodo preconfiguradas que incluyen las imágenes de contenedor y las personalizaciones necesarias. AKS compila la imagen preparada una vez y la reutiliza durante el aprovisionamiento de nodos, lo que reduce el tiempo de inicio para las operaciones de escalado posteriores. Para obtener más información sobre cómo funciona la especificación de imagen preparada y cuándo usarla, consulte Especificaciones de imagen preparadas en AKS (versión preliminar).

En este artículo se muestra cómo crear y administrar un PIS en AKS.

Importante

Las características en versión preliminar de AKS están disponibles en modalidad de autoservicio y previa suscripción. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

Prerrequisitos

Limitaciones

Se aplican las siguientes limitaciones durante la versión preliminar:

  • Disponible en las regiones públicas de Azure, excluidas las nubes soberanas y los entornos aislados.
  • Los sistemas operativos compatibles incluyen Ubuntu, Azure Linux y Windows.
  • Las secuencias de comandos personalizadas pueden provocar fallos en la compilación de la imagen o en el escalado vertical.
  • Es posible que tenga que volver a crear las especificaciones existentes al modificarlas.

Instalación de la extensión aks-preview de la CLI

Instale la extensión de la CLI aks-preview mediante el az extension add comando .

az extension add --name aks-preview

Actualice la extensión para asegurarse de que tiene instalada la versión más reciente mediante el az extension update comando .

az extension update --name aks-preview

Registro de la marca de característica AKSPreparedImageSpecificationPreview

  1. Registre la marca de características AKSPreparedImageSpecificationPreview en su suscripción con el comando az feature register.

    az feature register \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  2. Compruebe el estado del registro mediante el az feature show comando .

    az feature show \
      --namespace Microsoft.ContainerService \
      --name AKSPreparedImageSpecificationPreview
    
  3. Una vez registrada la marca de función, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Crear una especificación de imagen preparada (PIS)

Crear una especificación básica de imagen preparada

Cree un PIS mediante el 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

Creación de una especificación de imagen preparada con imágenes almacenadas en caché

Cree un PIS que almacene previamente en caché imágenes de contenedor mediante el 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

Creación de una especificación de imagen preparada mediante scripts personalizados

Cree un PIS que ejecute scripts de personalización durante la compilación de imágenes mediante el 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

Creación de un clúster o grupo de nodos mediante una especificación de imagen preparada

Después de crear un PIS, puede hacer referencia a él al crear o actualizar un clúster o grupo de nodos. Necesita el identificador de recurso de la versión de imagen preparada.

Creación de un clúster mediante un PIS

  1. Obtenga el identificador de recurso de versión de PIS mediante el 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. Cree un nuevo clúster de AKS que haga referencia a la imagen preparada mediante el comando az aks create con el parámetro --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
    

Creación de un grupo de nodos mediante un PIS

  1. Obtenga el identificador de recurso de versión de PIS mediante el 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. Cree un nuevo grupo de nodos que haga referencia a la imagen preparada mediante el comando az aks nodepool add con el 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. Compruebe que el grupo de nodos usa el PIS mediante el az aks nodepool show comando .

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

Administrar especificaciones de imagen preparadas

Enumerar especificaciones de imagen preparadas

Enumere todas las especificaciones de imagen preparadas de un grupo de recursos mediante el 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 una especificación de imagen preparada específica

Obtenga los detalles de una especificación de imagen preparada específica mediante el 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

Actualizar metadatos de especificación de imágenes preparadas

Hay dos conceptos de recursos: el recurso PIS y las versiones de PIS. Al actualizar metadatos de PIS, como etiquetas, se actualiza el recurso de PIS y no se cambia la imagen o los scripts de la versión a la que se hace referencia. Para cambiar las imágenes o scripts de contenedor, cree una nueva versión de PIS y actualice el grupo de nodos para hacer referencia a ese identificador de versión de PIS.

Puede actualizar metadatos, como etiquetas, en una especificación de imagen preparada existente mediante el az aks prepared-image-specification update comando . Para cambiar las imágenes o scripts de contenedor, cree una nueva versión en su lugar.

# 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

Enumerar todas las versiones de una especificación de imagen preparada

Enumere todas las versiones de una especificación de imagen preparada con el 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 una versión específica de una especificación de imagen preparada

Obtenga los detalles de una versión específica con el comando az aks prepared-image-specification version show y el parámetro --name establecido en la versión 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

Enumeración de grupos de nodos que usan una especificación de imagen preparada específica

Para buscar todos los grupos de nodos de un clúster que hacen referencia a una especificación de imagen preparada, use el az aks nodepool list comando con un 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]"

Actualizar una versión de especificación de imagen preparada

Cuando cambien las imágenes base, las dependencias o las personalizaciones, cree una nueva versión y actualice los grupos de nodos para hacer referencia a ellas. El flujo de trabajo recomendado es:

  1. Cree una nueva versión con las imágenes o scripts de contenedor actualizados.

  2. Valide la nueva versión en un grupo de nodos que no sea de producción.

  3. Actualice los grupos de nodos de producción para hacer referencia a la nueva versión.

    # 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. Limpiar imágenes sin usar para la optimización de costos.

Actualizaciones de la versión de AKS

Al actualizar la versión de Kubernetes, AKS vuelve a generar automáticamente el disco duro virtual preparado para la versión de PIS a la que se hace referencia. No es necesario crear una nueva versión de PIS para una actualización de la versión de Kubernetes. Debe crear una nueva versión de PIS cuando cambie el contenido de PIS, como imágenes de contenedor o scripts.

Compruebe si hay actualizaciones disponibles mediante el 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

Actualice el clúster mediante el 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

Cree y valide una nueva versión de la especificación de imagen preparada dirigida a las nuevas versiones de Kubernetes y de la imagen de nodo antes de actualizar los grupos de nodos de producción.

Actualice un grupo de nodos específico mediante el 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

Quitar una especificación de imagen preparada de un grupo de nodos

Para dejar de usar una especificación de imagen preparada en un grupo de nodos, actualice el grupo de nodos mediante el az aks nodepool update comando con una cadena vacía para el --prepared-image-specification-id parámetro .

# 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 una versión de la especificación de imagen preparada

Elimine una versión específica mediante el az aks prepared-image-specification version delete comando .

Importante

No elimine una versión de PIS a la que hace referencia un grupo de nodos. En su lugar, debe actualizar el grupo de nodos para quitar PIS o hacer referencia a otra versión de PIS. La eliminación de una versión a la que se hace referencia puede impedir que AKS recompile o implemente correctamente la imagen 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 una especificación de imagen preparada

Elimine todo un recurso de especificación de imagen preparada mediante el az aks prepared-image-specification delete comando .

Importante

Antes de eliminar un recurso de PIS, asegúrese de que ningún grupo de nodos haga referencia a ninguna de sus versiones. Si encuentra alguna referencia, quite o actualícelas antes de eliminar el recurso de PIS. La eliminación de un PIS al que se hace referencia puede impedir que AKS recompile o implemente correctamente la imagen 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

Supervisar el rendimiento de la especificación de imagen preparada

Para evaluar si PIS reduce la latencia de aprovisionamiento en su entorno, supervise las métricas siguientes:

  • Duración del aprovisionamiento del nodo y tiempo hasta que esté listo: compárelo con nodos que no usan una imagen preparada.
  • Tiempo de finalización de escalabilidad horizontal: tiempo desde que se activa el escalador automático hasta que los nodos están en estado Ready.
  • Duración de compilación de imágenes y tasa de éxito de compilación: realice un seguimiento del estado de la pipeline de preparación de imágenes.
  • Tiempo de inicio del pod y duración de la descarga de imágenes de contenedor: compruebe que la precarga de imágenes en caché se utiliza de forma eficaz.

Solución de problemas de especificaciones de imágenes preparadas

Los errores relacionados con PIS deben incluir el motivo del error y es probable que muchos errores provengan de scripts personalizados. Si se produce un error al crear o escalar el grupo de nodos después de agregar PIS, debe inspeccionar los registros de compilación de la imagen o del script personalizado y validar el script antes de crear una nueva versión o actualizar la referencia al grupo de nodos.

Se produce un error en la creación de imágenes

Note

Cuando se produce un error en un script de personalización durante la compilación de imágenes, AKS desasigna la máquina virtual de compilación en lugar de eliminarla para que el cliente pueda iniciarla y depurarla. En las nuevas compilaciones de PIS, AKS elimina y vuelve a crear los recursos de compilación y del conjunto de escalado de máquinas virtuales.

Si el PIS no puede compilar la imagen preparada, compruebe si:

  • Scripts de personalización no válidos o con formato incorrecto.
  • Errores de autenticación del registro de contenedores: compruebe que el clúster de AKS tiene permisos de extracción en los registros especificados.
  • Faltan permisos de Azure RBAC en el grupo de recursos o en el registro.
  • Tipos de personalización no admitidos para el sistema operativo de destino.

Se produce un error en la creación del grupo de nodos

Si un grupo de nodos que hace referencia a un PIS no se puede crear, compruebe lo siguiente:

  • El identificador de versión de PIS es válido y la versión existe en la misma región.
  • La suscripción tiene cuota suficiente para la SKU de máquina virtual solicitada.
  • La SKU de máquina virtual solicitada es compatible con la imagen preparada.
  • La región admite la característica PIS durante la versión preliminar.

Las operaciones de escalado no son más rápidas

Si no ve un tiempo de aprovisionamiento reducido, compruebe lo siguiente:

  • Las imágenes de contenedores que desea acelerar se incluyen en la versión de PIS.
  • El grupo de nodos hace referencia a la versión correcta.
  • Los nuevos nodos arrancan desde la imagen preparada, no la imagen de nodo de AKS base.
  • El cuello de botella es el tiempo de descarga de la imagen del contenedor, no el arranque de la carga de trabajo ni ningún otro proceso de inicialización.

Limpieza de recursos

Si ha creado recursos en este artículo con fines de prueba, elimínelos cuando haya terminado para evitar cargos en curso. Esto incluye versiones de PIS, recursos de PIS, grupos de nodos de prueba y clústeres de AKS de prueba.

Para eliminar el grupo de recursos y todos los recursos de él, use el 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 obtener más información sobre la especificación de imagen preparada, consulte Especificaciones de imagen preparadas en AKS (versión preliminar).