Opciones de escalado de aplicaciones en Azure Kubernetes Service (AKS)
Al ejecutar aplicaciones en Azure Kubernetes Service (AKS), es posible que debas aumentar o disminuir la cantidad de recursos informáticos. A medida que cambias la cantidad de instancias de aplicaciones que tienes, es posible que debas cambiar la cantidad de nodos de Kubernetes subyacentes. También es posible que deba aprovisionar una gran cantidad de instancias de aplicaciones adicionales.
En este artículo, se presentan los conceptos básicos de escalado de aplicaciones de AKS, incluido el escalado manual de pods o nodos, el uso del Escalador automático de pods horizontales, el uso del Escalador automático de clústeres y la integración con Azure Container Instances (ACI).
Escalado manual de pods o nodos
Puedes escalar manualmente las réplicas, los pods y los nodos para probar cómo responde tu aplicación a un cambio en los recursos y el estado disponibles. El escalado manual de recursos te permite definir una cantidad establecida de recursos para usar y mantener un coste fijo, como la cantidad de nodos. Para realizar un escalado manual, defina el número de réplicas o de nodos. Luego, Kubernetes API programa la creación de pods adicionales o el drenaje de nodos en función del número de réplicas o de nodos.
Al reducir verticalmente los nodos, la API de Kubernetes llama a la API de proceso de Azure correspondiente asociada al tipo de proceso que usa el clúster. Por ejemplo, para los clústeres creados en Virtual Machine Scale Sets, Virtual Machine Scale Sets API determina los nodos que se van a eliminar. Para obtener más información sobre cómo se seleccionan los nodos para su eliminación en escalado descendente, consulta las Preguntas frecuentes sobre Microsoft Azure Virtual Machine Scale Sets.
Para empezar a escalar manualmente los nodos, vea escalado manual de nodos en un clúster de AKS. Para escalar manualmente el número de pods, vea comando kubectl scale.
Horizontal Pod Autoscaler
Kubernetes utiliza el escalador automático horizontal de pods (HPA) para monitorear la demanda de recursos y escalar automáticamente la cantidad de pods. De manera predeterminada, HPA verifica la API de métricas cada 15 segundos para detectar cualquier cambio requerido en el recuento de réplicas, y la API de métricas recupera datos de Kubelet cada 60 segundos. Entonces, el HPA se actualiza cada 60 segundos. Cuando se necesitan cambios, el número de réplicas aumenta o disminuye en consecuencia. HPA funciona con clústeres de AKS que han implementado Metrics Server para Kubernetes versión 1.8 y superior.
Cuando configuras el HPA para una implementación determinada, defines la cantidad mínima y máxima de réplicas que se pueden ejecutar. Defina también la métrica que se supervisará y en la que se basarán todas las decisiones de escalado, como el uso de la CPU.
Para empezar a usar Horizontal Pod Autoscaler en AKS, consulte Escalado automático de pods en AKS.
Recuperación de eventos de escalado
Como el HPA se actualiza efectivamente cada 60 segundos, es posible que los eventos de escala anteriores no se hayan completado correctamente antes de que se realice otra verificación. Este comportamiento podría hacer que HPA cambiara la cantidad de réplicas antes de que el evento de escala anterior pudiera recibir la carga de trabajo de la aplicación y las demandas de recursos para ajustarse en consecuencia.
Para minimizar los eventos de carrera, se establece un valor de retraso. Este valor define cuánto tiempo debe esperar el HPA después de un evento de escala antes de que se pueda activar otro evento de escala. Este comportamiento permite que el nuevo recuento de réplicas surta efecto y que Metrics API refleje la carga de trabajo distribuida. A partir de Kubernetes 1.12, no hay retraso para los eventos de escalado vertical; sin embargo, el retraso predeterminado en los eventos de escalado reducido es de 5 minutos.
Cluster Autoscaler
Para responder a las demandas cambiantes de los pods, el escalador automático del clúster de Kubernetes ajusta la cantidad de nodos en función de los recursos informáticos solicitados en el grupo de nodos. De manera predeterminada, Cluster Autoscaler comprueba en el servidor de la API de métricas cada 10 segundos los cambios necesarios en el recuento de nodos. Si la escalabilidad automática del clúster determina que es necesario un cambio, el número de nodos del clúster de AKS aumenta o disminuye en consecuencia. El escalador automático de clústeres funciona con clústeres de AKS habilitados para RBAC de Kubernetes que ejecutan Kubernetes 1.10.x o una versión superior.
El escalador automático de clúster se usa normalmente junto con el escalador automático de pod horizontal. Cuando se combina, el escalador automático horizontal de pods aumenta o disminuye el número de pods según la demanda de la aplicación, mientras que el escalador automático de clúster ajusta el número de nodos según sea necesario para ejecutar los pods adicionales.
Para comenzar con el escalador automático de clústeres en AKS, consulta el Escalador automático de clústeres en AKS.
Eventos de escalado horizontal
Si un nodo no tiene suficientes recursos de proceso para ejecutar un pod solicitado, el pod no avanza por el progreso de la programación. El pod no se puede iniciar a menos que haya otros recursos de proceso disponibles en el grupo de nodos.
Cuando el escalador automático de clústeres detecta pods que no se pueden programar debido a restricciones de recursos del grupo de nodos, se aumenta el número de nodos del grupo de nodos para proporcionar los recursos de proceso adicionales. Cuando los nodos se implementan correctamente y están disponibles para su uso en el grupo de nodos, los pods se programan para ejecutarse en ellos.
Si la aplicación necesita escalarse rápidamente, algunos de los pods pueden permanecer en un estado de espera de programación hasta que los nodos adicionales implementados por el escalador automático de clústeres puedan aceptar los pods programados. Para las aplicaciones que tienen una gran demanda de ráfagas, puedes escalar con nodos virtuales y Azure Container Instances.
Eventos de reducción horizontal
Cluster Autoscaler también supervisa el estado de programación de los pods en los nodos que no han recibido recientemente nuevas solicitudes de programación. Este escenario indica que el grupo de nodos tiene más recursos informáticos de los necesarios y se puede reducir la cantidad de nodos. De forma predeterminada, los nodos que superan un umbral para dejar de ser necesarios durante 10 minutos se programan para su eliminación. Cuando se produce esta situación, los pods se programan para ejecutarse en otros nodos del grupo de nodos y Cluster Autoscaler reduce el número de nodos.
Las aplicaciones pueden experimentar interrupciones, ya que los pods se programan en distintos nodos cuando Cluster Autoscaler reduce el número de nodos. Para minimizar las interrupciones, evite las aplicaciones que usan una instancia de un solo pod.
Escalado automático controlado por eventos (KEDA) de Kubernetes
Escalado automático controlado por eventos de Kubernetes (KEDA) es un componente de código abierto para el escalado automático controlado por eventos de cargas de trabajo. Escala las cargas de trabajo dinámicamente en función del número de eventos recibidos. KEDA amplía Kubernetes con una definición de recursos personalizada (CRD), denominada ScaledObject, para describir cómo se deben escalar las aplicaciones en respuesta al tráfico específico.
El escalado de KEDA es útil en escenarios en los que las cargas de trabajo reciben ráfagas de tráfico o controlan grandes volúmenes de datos. Es diferente de Horizontal Pod Autoscaler, ya que KEDA está controlado por eventos y se escala en función del número de eventos, mientras que HPA se basa en métricas en función del uso de recursos (por ejemplo, CPU y memoria).
Para empezar a trabajar con el complemento KEDA en AKS, consulte información general de KEDA.
Ráfaga en Azure Container Instances (ACI)
Para escalar rápidamente el clúster de AKS, puedes realizar la integración con Azure Container Instances (ACI). Kubernetes tiene componentes integrados para escalar el recuento de réplicas y nodos. Sin embargo, si la aplicación necesita escalar rápidamente, el escalador automático de pod horizontal puede programar más pods de los que pueden proporcionar los recursos informáticos existentes en el grupo de nodos. Si se configura, este escenario desencadenará el escalador automático de clústeres para la implementación de nodos adicionales en el grupo de nodos, pero es posible que se necesiten unos minutos para aprovisionar correctamente esos nodos y permitir que el programador de Kubernetes ejecute pods en ellos.
ACI le permite implementar rápidamente instancias de contenedor sin sobrecarga de infraestructura adicional. Cuando se conecta con AKS, ACI se convierte en una extensión lógica y segura de su clúster de AKS. El componente de nodos virtuales, que se basa en el Kubelet virtual, está instalado en tu clúster de AKS que presenta ACI como un nodo virtual de Kubernetes. Kubernetes puede programar pods que se ejecuten como instancias de ACI a través de los nodos virtuales, no como pods en nodos de máquina virtual directamente en el clúster de AKS.
La aplicación no requiere modificaciones para usar nodos virtuales. Tus implementaciones se pueden escalar en AKS y ACI sin demora, ya que el escalador automático del clúster implementa nuevos nodos en el clúster de AKS.
Los nodos virtuales se implementan en otra subred en la misma red virtual que el clúster de AKS. Esta configuración de red virtual protege el tráfico entre ACI y AKS. Al igual que un clúster de AKS, una instancia de ACI es un recurso informático seguro y lógico aislado de otros usuarios.
Pasos siguientes
Para empezar a escalar aplicaciones, vea los siguientes recursos:
- Escalado manual de pods o nodos
- Uso de Horizontal Pod Autoscaler
- Uso de Cluster Autoscaler
- Uso del complemento de escalado automático controlado por eventos (KEDA) de Kubernetes
Para obtener más información sobre los conceptos básicos de Kubernetes y AKS, consulte los artículos siguientes:
Azure Kubernetes Service