Tutorial: Escalado de aplicaciones en Azure Kubernetes Service (AKS)
Si ha seguido los tutoriales, tiene un clúster de Kubernetes en funcionamiento en AKS y ha implementado la aplicación Azure Voting de ejemplo. En este tutorial, la parte cinco de siete, se escalan horizontalmente los pods en la aplicación y se prueba el escalado automático de pods. También se aprende a escalar el número de nodos de VM de Azure para cambiar la capacidad del clúster de hospedar cargas de trabajo. Aprenderá a:
- Escalar los nodos de Kubernetes
- Escalar de forma manual pods de Kubernetes que ejecutan la aplicación
- Configurar el escalado automático de pods que ejecutan el front-end de la aplicación
En tutoriales posteriores, la aplicación Azure Vote se actualiza a una nueva versión.
Antes de empezar
En los tutoriales anteriores se empaquetó una aplicación en una imagen de contenedor. Esta imagen se cargó en Azure Container Registry y el usuario creó un clúster de AKS. Luego la aplicación se implementó en el clúster de AKS. Si no ha realizado estos pasos, pero quiere continuar, comience con el Tutorial 1: Creación de imágenes de contenedor.
Para realizar este tutorial es necesario ejecutar la versión 2.0.53, o superior, de la CLI de Azure. Ejecute az --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.
Escalado manual de pods
Cuando el front-end de Azure Vote y la instancia de Redis se implementaron en los tutoriales anteriores, se creó una única réplica. Para ver el número y el estado de los pods del clúster, use el comando kubectl get como se indica a continuación:
kubectl get pods
La salida del ejemplo siguiente muestra un pod de front-end y un pod de back-end:
NAME READY STATUS RESTARTS AGE
azure-vote-back-2549686872-4d2r5 1/1 Running 0 31m
azure-vote-front-848767080-tf34m 1/1 Running 0 31m
Para cambiar manualmente el número de pods en la implementación azure-vote-front, use el comando kubectl scale. El ejemplo siguiente aumenta el número de pods de front-end a 5:
kubectl scale --replicas=5 deployment/azure-vote-front
Ejecute de nuevo el comando kubectl get pods para comprobar que AKS crea los pods adicionales. Tras un minuto aproximadamente, los pods adicionales estarán disponibles en el clúster:
kubectl get pods
READY STATUS RESTARTS AGE
azure-vote-back-2606967446-nmpcf 1/1 Running 0 15m
azure-vote-front-3309479140-2hfh0 1/1 Running 0 3m
azure-vote-front-3309479140-bzt05 1/1 Running 0 3m
azure-vote-front-3309479140-fvcvm 1/1 Running 0 3m
azure-vote-front-3309479140-hrbf2 1/1 Running 0 15m
azure-vote-front-3309479140-qphz8 1/1 Running 0 3m
Escalado automático de pods
Kubernetes admite el escalado horizontal automático de pods para ajustar el número de pods en una implementación en función del uso de la CPU o de otras métricas de selección. El servidor de medición se usa para proporcionar utilización de recursos a Kubernetes y se implementa automáticamente en clústeres de Azure Kubernetes Service de la versión 1.10 o posteriores. Para ver la versión del clúster de Azure Kubernetes Service, use el comando az aks show, tal y como se muestra en el ejemplo siguiente:
az aks show --resource-group myResourceGroup --name myAKSCluster --query kubernetesVersion --output table
Nota
Si la versión del clúster de Azure Kubernetes Service es anterior a 1.10, el servidor de métricas no se instala automáticamente. Los manifiestos de instalación del servidor de medición están disponibles como un recurso components.yaml
en las versiones del servidor de medición, lo que significa que puede instalarlos a través de una dirección URL. Para más información sobre estas definiciones de YAML, consulte la sección de implementación del archivo Léame.
Instalación de ejemplo:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
Para usar la autoescala, todos los contenedores de los pod y los pods deben tener definidos solicitudes y límites de CPU. En la implementación de azure-vote-front
, el contenedor del front-end ya solicita 0,25 CPU, con un límite de 0,5 CPU.
Estas solicitudes de recursos y los límites se definen para cada contenedor tal y como se muestra en el siguiente fragmento de código de ejemplo:
containers:
- name: azure-vote-front
image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
ports:
- containerPort: 80
resources:
requests:
cpu: 250m
limits:
cpu: 500m
En el ejemplo siguiente se usa el comando kubectl autoscale para escalar automáticamente el número de pods en la implementaciónazure-vote-front. Si el uso medio de la CPU en todos los pods supera el 50 % del uso solicitado, la escalabilidad automática aumenta el valor de los pods hasta un máximo de 10 instancias. Luego se define un mínimo de 3 instancias para la implementación:
kubectl autoscale deployment azure-vote-front --cpu-percent=50 --min=3 --max=10
También puede crear un archivo de manifiesto para definir el comportamiento de escalabilidad automática y límites de recursos. A continuación se muestra un ejemplo de un archivo de manifiesto llamado azure-vote-hpa.yaml
.
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: azure-vote-back-hpa
spec:
maxReplicas: 10 # define max replica count
minReplicas: 3 # define min replica count
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: azure-vote-back
targetCPUUtilizationPercentage: 50 # target CPU utilization
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: azure-vote-front-hpa
spec:
maxReplicas: 10 # define max replica count
minReplicas: 3 # define min replica count
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: azure-vote-front
targetCPUUtilizationPercentage: 50 # target CPU utilization
Use kubectl apply
para aplicar la escalabilidad automática definida en el archivo de manifiesto azure-vote-hpa.yaml
.
kubectl apply -f azure-vote-hpa.yaml
Para ver el estado del escalador automático, use el comando kubectl get hpa
como se indica a continuación:
kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
azure-vote-front Deployment/azure-vote-front 0% / 50% 3 10 3 2m
Después de unos minutos con carga mínima en la aplicación Azure Vote, el número de réplicas del pod se reduce automáticamente a tres. Puede usar nuevamente kubectl get pods
para ver los pods innecesarios que se han eliminado.
Nota
Para obtener más ejemplos del uso del escalador automático horizontal de pods, consulte Tutorial de HorizontalPodAutoscaler.
Escalado manual de nodos de AKS
Si creó el clúster de Kubernetes mediante los comandos en el tutorial anterior, este tiene dos nodos. Puede ajustar el número de nodos manualmente si tiene previsto usar más o menos cargas de trabajo de contenedor en el clúster.
En el ejemplo siguiente, el número de nodos aumenta a tres en el clúster de Kubernetes denominado myAKSCluster. El comando tarda unos minutos en completarse.
az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 3
Cuando el clúster se escaló correctamente, el resultado es similar al ejemplo siguiente:
"agentPoolProfiles": [
{
"count": 3,
"dnsPrefix": null,
"fqdn": null,
"name": "myAKSCluster",
"osDiskSizeGb": null,
"osType": "Linux",
"ports": null,
"storageProfile": "ManagedDisks",
"vmSize": "Standard_D2_v2",
"vnetSubnetId": null
}
Pasos siguientes
En este tutorial, se han usado distintas características de escalado en el clúster de Kubernetes. Ha aprendido a:
- Escalar de forma manual pods de Kubernetes que ejecutan la aplicación
- Configurar el escalado automático de pods que ejecutan el front-end de la aplicación
- Escalado manual de los nodos de Kubernetes
Vaya al siguiente tutorial para aprender a actualizar la aplicación en Kubernetes.