Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure Container Apps administra el escalado horizontal automático a través de un conjunto de reglas de escalado declarativas. A medida que una aplicación contenedora se escala horizontalmente, se crean nuevas instancias de la aplicación contenedora a petición. Estas instancias se conocen como réplicas.
En este tutorial, agregará una regla de escalado HTTP a la aplicación contenedora y observará cómo se escala la aplicación.
Requisitos previos
| Requisito | Instructions |
|---|---|
| Cuenta de Azure | Si no tiene una cuenta de Azure, puede crear una gratis. Necesita el permiso Colaborador en la suscripción de Azure para continuar. Consulte Asignación de roles de Azure mediante Azure Portal para obtener más información. |
| Cuenta de GitHub | Obtenga una gratis. |
| Azure CLI | Instale la CLI de Azure. |
Configurar
Para iniciar sesión en Azure desde la CLI, ejecute el siguiente comando y siga las indicaciones para completar el proceso de autenticación.
az login
Para asegurarse de que ejecuta la versión más reciente de la CLI, ejecute el comando de actualización.
az upgrade
Luego, instale o actualice la extensión de Azure Container Apps para la CLI.
Si recibe errores sobre los parámetros que faltan al ejecutar comandos az containerapp en la CLI de Azure o cmdlets desde el módulo Az.App de PowerShell, asegúrese de que tiene instalada la versión más reciente de la extensión Azure Container Apps.
az extension add --name containerapp --upgrade
Nota:
A partir de mayo de 2024, las extensiones de la CLI de Azure ya no habilitan las características en versión preliminar de forma predeterminada. Para acceder a las características de la versión preliminar de Container Apps, instale la extensión Container Apps con --allow-preview true.
az extension add --name containerapp --upgrade --allow-preview true
Ahora que está instalada la extensión o el módulo actual, registre los espacios de nombres Microsoft.App y Microsoft.OperationalInsights.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Creación e implementación de la aplicación de contenedor
Cree e implemente la aplicación contenedora con el comando containerapp up. Este comando permite crear una:
- Grupo de recursos
- Entorno de Container Apps
- Área de trabajo de Log Analytics
Si ya existe alguno de estos recursos, el comando usa los recursos existentes en lugar de crear otros nuevos.
Por último, el comando crea e implementa la aplicación contenedora mediante una imagen de contenedor pública, mcr.microsoft.com/dotnet/samples:aspnetapp. Esta imagen se usa para desencadenar las reglas de escalado que cree en este artículo. No es necesario conocer ni usar .NET para completar este procedimiento.
az containerapp up \
--name my-container-app \
--resource-group my-container-apps \
--location centralus \
--environment 'my-container-apps' \
--image mcr.microsoft.com/dotnet/samples:aspnetapp \
--target-port 8080 \
--ingress external \
--query properties.configuration.ingress.fqdn \
Nota:
Asegúrese de que el valor del parámetro --image esté en minúsculas.
Al establecer --ingress en external, la aplicación contenedora estará disponible para solicitudes públicas.
El comando up devolvió el nombre de dominio completo (FQDN) a la aplicación contenedora. Copie este FQDN en un archivo de texto. Se usa en la sección Enviar solicitudes . El FQDN tiene un aspecto similar al del ejemplo siguiente:
https://my-container-app.icydune-96848328.centralus.azurecontainerapps.io
Agregar regla de escalado
Para agregar una regla de escalado HTTP a la aplicación contenedora, ejecute el comando az containerapp update.
az containerapp update \
--name my-container-app \
--resource-group my-container-apps \
--min-replicas 1 \
--max-replicas 10 \
--scale-rule-name my-http-scale-rule \
--scale-rule-http-concurrency 1
Este comando agrega una regla de escalado HTTP a la aplicación contenedora con el nombre my-http-scale-rule y una configuración de simultaneidad de 1. Si la aplicación recibe más de una solicitud HTTP simultánea, el tiempo de ejecución crea réplicas de la aplicación para controlar las solicitudes.
El comando update devuelve la nueva configuración como respuesta JSON para comprobar que la solicitud se ha realizado correctamente.
Iniciar la salida del registro
Puede observar los efectos del escalado de la aplicación viendo los registros generados por el entorno de ejecución de Container Apps. Use el comando az containerapp logs show para empezar a escuchar entradas de registro.
az containerapp logs show \
--name my-container-app \
--resource-group my-container-apps \
--type=system \
--follow=true
El comando show devuelve entradas de los registros del sistema de la aplicación contenedora en tiempo real. Puede esperar una respuesta similar al siguiente ejemplo:
{
"TimeStamp":"2023-08-01T16:49:03.02752",
"Log":"Connecting to the container 'my-container-app'..."
}
{
"TimeStamp":"2023-08-01T16:49:03.04437",
"Log":"Successfully Connected to container:
'my-container-app' [Revision: 'my-container-app--9uj51l6',
Replica: 'my-container-app--9uj51l6-5f96557ffb-5khg9']"
}
{
"TimeStamp":"2023-08-01T16:47:31.9480811+00:00",
"Log":"Microsoft.Hosting.Lifetime[14]"
}
{
"TimeStamp":"2023-08-01T16:47:31.9481264+00:00",
"Log":"Now listening on: http://[::]:80"
}
{
"TimeStamp":"2023-08-01T16:47:31.9490917+00:00",
"Log":"Microsoft.Hosting.Lifetime[0]"
}
{
"TimeStamp":"2023-08-01T16:47:31.9491036+00:00",
"Log":"Application started. Press Ctrl+C to shut down."
}
{
"TimeStamp":"2023-08-01T16:47:31.949723+00:00",
"Log":"Microsoft.Hosting.Lifetime[0]"
}
{
"TimeStamp":"2023-08-01T16:47:31.9497292+00:00",
"Log":"Hosting environment: Production"
}
{
"TimeStamp":"2023-08-01T16:47:31.9497325+00:00",
"Log":"Microsoft.Hosting.Lifetime[0]"
}
{
"TimeStamp":"2023-08-01T16:47:31.9497367+00:00",
"Log":"Content root path: /app/"
}
Para más información, consulte az containerapp logs.
Envío de solicitudes
Abra un nuevo shell de Bash. Ejecute el comando siguiente, reemplazando <YOUR_CONTAINER_APP_FQDN> por el nombre de dominio completo de la aplicación contenedora que guardó en la sección Crear e implementar la aplicación contenedora.
seq 1 50 | xargs -Iname -P10 curl "<YOUR_CONTAINER_APP_FQDN>"
Estos comandos envían 50 solicitudes a la aplicación contenedora en lotes simultáneos de 10 solicitudes cada una.
| Comando o argumento | Descripción |
|---|---|
seq 1 50 |
Genera una secuencia de números de 1 a 50. |
| |
El operador de canalización envía la secuencia al comando xargs. |
xargs |
Se ejecuta curl con la dirección URL especificada |
-Iname |
Actúa como marcador de posición para la salida de seq. Este argumento impide que el valor devuelto se envíe al comando curl. |
curl |
Llama a la dirección URL especificada. |
-P10 |
Indica a xargs para que se ejecuten hasta 10 procesos a la vez. |
Para obtener más información, consulte la documentación para:
En el primer shell, donde ejecutó el comando az containerapp logs show, la salida ahora contiene una o varias entradas de registro como las siguientes.
{
"TimeStamp":"2023-08-01 18:09:52 +0000 UTC",
"Type":"Normal",
"ContainerAppName":"my-container-app",
"RevisionName":"my-container-app--00001111",
"ReplicaName":"my-container-app--00001111-aaaaa22222-bbbb",
"Msg":"Replica 'my-container-app--00001111-aaaaa22222-bbbb' has been scheduled to run on a node.",
"Reason":"AssigningReplica",
"EventSource":"ContainerAppController",
"Count":0
}
Visualización del escalado en Azure Portal (opcional)
Inicie sesión en Azure Portal.
En la barra deBúsqueda de la parte superior, escriba my-container-app.
En los resultados de la búsqueda, en Recursos, seleccione my-container-app.
En la barra de navegación de la izquierda, expanda Aplicación y seleccione Escala y réplicas.
En la página Escala y réplicas, seleccione Réplicas.
La aplicación contenedora ahora tiene más de una réplica en ejecución.
Es posible que tenga que seleccionar Actualizar para ver las nuevas réplicas.
En la barra de navegación de la izquierda, expanda Supervisión y seleccione Métricas.
En la página Métricas, establezca Métrica en Solicitudes.
Seleccione Aplicar división.
Expanda la lista desplegable Valores y active Réplica.
Seleccione el icono de marca de verificación azul para terminar de editar la división.
En el gráfico se muestran las solicitudes recibidas por la aplicación contenedora, divididas por réplica.
De manera predeterminada, la escala de grafos se establece en las últimas 24 horas, con una granularidad de tiempo de 15 minutos. Seleccione la escala y cámbiela a los últimos 30 minutos, con una granularidad de tiempo de un minuto. Seleccione el botón Aplicar.
Seleccione en el gráfico y arrastre para resaltar el aumento reciente de las solicitudes recibidas por la aplicación contenedora.
En el recorte de pantalla siguiente se muestra una vista ampliada de cómo se dividen las solicitudes recibidas por la aplicación contenedora entre réplicas.
Escalado de CPU y memoria
Debe preferir reglas de escalado HTTP a reglas de escalado de CPU o memoria siempre que sea posible. El escalado de CPU y memoria no permite que la aplicación contenedora se escale a cero.
Después de agregar una regla de escalado de CPU o memoria, puede probarla enviando solicitudes a la aplicación contenedora y viendo el escalado en Azure Portal.
Después de enviar solicitudes a la aplicación de escalado, puede tardar un minuto antes de que se desencadene la regla de escalado y se creen las nuevas réplicas.
Escalado de CPU
La escala de CPU permite a tu aplicación escalar hacia adentro o hacia afuera dependiendo de cuánto uso de la CPU se esté realizando.
Por ejemplo, si crea una regla de escalado de CPU con un valor de uso de 50, Azure Container Apps crea más réplicas de la aplicación contenedora cuando el uso medio de CPU para todas las réplicas alcanza 50%.
El escalado de CPU no permite que la aplicación contenedora se escale a cero. Para obtener más información sobre este desencadenador, consulte Desencadenador de escalado de CPU KEDA.
Para agregar una regla de escalado de CPU a la aplicación contenedora, ejecute el az containerapp update comando .
Nota:
Cuando se usa la CLI de Azure para agregar una regla de escalado a una aplicación de contenedor que ya tiene una regla de escalado, la nueva regla de escalado reemplaza a la regla de escalado anterior. Para ver cómo agregar varias reglas de escalado, consulte Varias reglas de escalado.
Antes de ejecutar el comando siguiente, reemplace <PLACEHOLDERS> con sus valores. En este tutorial, reemplace <UTILIZATION> con 1. Esto hace que la aplicación de contenedor se amplíe cuando el uso medio de CPU de cada réplica alcance el 1%. Este valor es solo para demostración. El número de réplicas está limitado a 10 por el --max-replicas 10 especificado al ejecutar az containerapp update.
az containerapp update \
--name my-container-app \
--resource-group my-container-apps \
--min-replicas 1 \
--max-replicas 10 \
--scale-rule-name my-cpu-scale-rule \
--scale-rule-type cpu \
--scale-rule-metadata type=Utilization value=<UTILIZATION>
Escalado de memoria
El escalado de memoria permite a tu aplicación escalar hacia dentro o hacia afuera dependiendo de la cantidad de memoria que se esté utilizando.
Por ejemplo, si crea una regla de escalado de memoria con un valor de uso de 50, Azure Container Apps crea más réplicas de la aplicación contenedora cuando el uso medio de memoria de todas las réplicas alcanza 50%.
El escalado de memoria no permite que la aplicación contenedora se escale a cero. Para obtener más información sobre este desencadenador, consulte Desencadenador de escalado de memoria KEDA.
Para agregar una regla de escalado de memoria a la aplicación contenedora, ejecute el az containerapp update comando .
Nota:
Cuando se usa la CLI de Azure para agregar una regla de escalado a una aplicación de contenedor que ya tiene una regla de escalado, la nueva regla de escalado reemplaza a la regla de escalado anterior. Para ver cómo agregar varias reglas de escalado, consulte Varias reglas de escalado.
Antes de ejecutar el comando siguiente, reemplace <PLACEHOLDERS> con sus valores. En este tutorial, reemplace <UTILIZATION> con 1. La aplicación contenedora escalará cuando el uso promedio de memoria de todas las réplicas alcance el 1%. Este valor es solo para demostración. El número de réplicas está limitado a 10 por el --max-replicas 10 especificado al ejecutar az containerapp update.
az containerapp update \
--name my-container-app \
--resource-group my-container-apps \
--min-replicas 1 \
--max-replicas 10 \
--scale-rule-name my-memory-scale-rule \
--scale-rule-type memory \
--scale-rule-metadata type=Utilization value=<UTILIZATION>
Varias reglas de escalado
Para agregar varias reglas de escalado a la aplicación contenedora mediante la CLI de Azure, debe usar YAML.
Exporte la configuración de la aplicación contenedora a YAML con el
az containerapp showcomando .az containerapp show \ --name my-container-app \ --resource-group my-container-apps \ --output yaml > app.yamlEn la
properties>template>scale>rulessección deapp.yaml, agregue las siguientes propiedades. Reemplace el<PLACEHOLDERS>por sus valores.... properties: ... template: ... scale: ... rules: - name: cpu-scaling-rule custom: type: cpu metadata: type: "Utilization" value: "<CPU_UTILIZATION>" - name: memory-scaling-rule custom: type: memory metadata: type: "Utilization" value: "<MEMORY_UTILIZATION>" ...Importe la configuración de la aplicación contenedora desde
app.yamlcon elaz containerapp updatecomando .az containerapp update \ --name my-container-app \ --resource-group my-container-apps \ --yaml app.yaml
Limpieza de recursos
Si no va a seguir usando esta aplicación, ejecute el siguiente comando para eliminar el grupo de recursos junto con todos los recursos creados en este tutorial.
Precaución
El siguiente comando elimina el grupo de recursos especificado y todos los recursos contenidos en él. Si los recursos fuera del ámbito de este tutorial existen en el grupo de recursos especificado, también se eliminarán.
az group delete --name my-container-apps
Sugerencia
¿Tiene problemas? Háganoslo saber en GitHub abriendo una incidencia en el repositorio de Azure Container Apps.