Extender y escalar Pods
En un sistema de producción real, puede haber escenarios en los que sea necesario ampliar los servicios o escenarios en los que sea necesario reducir el número de instancias de servicio debido a limitaciones de recursos o reducción de la carga de trabajo.
Esto se puede lograr utilizando el mecanismo de Escala de Despliegue/RC.
Kubernetes proporciona escalado manual y automático de Pods.
El modo manual determina el número de replicaciones de pod ejecutando el comando kubectl scale o ejecutando la API RESTful en Deployment/RC.
Determina el número de réplicas de pod implementadas/RC a través de la API RESTful con un solo clic.
El modo automático requiere que los usuarios especifiquen el rango de números de replicación de Pod en función de indicadores de rendimiento o indicadores comerciales personalizados, y el sistema establecerá automáticamente el número de replicaciones de Pod dentro de este rango. Dentro de este rango, el sistema se ajustará automáticamente según los cambios en los indicadores de desempeño.
Tome la implementación de nginx como ejemplo:
Kubernetes ha agregado un nuevo controlador llamado Horizontal Pod Autoscaler (HPA) a partir de la versión 1.1 para lograr un fuerte escalado automático basado en la utilización de la CPU. extensión de la vaina.
El controlador HPA se basa en el parámetro de inicio del servicio principal kube-controller-manager: horizontal-pod-autoscaler-sync-period, que define el período de detección (el valor predeterminado es 15 s) y monitorea periódicamente el recurso. indicadores de rendimiento del Pod objetivo y se comparan con los indicadores de recursos de HPA. Y compárelo con las condiciones de expansión y contracción en el objeto de recurso HPA y ajuste el número de replicaciones de Pod cuando se cumplan las condiciones.
El servidor de métricas (Heapster o servidor de métricas personalizado) en Kubernetes recopilará continuamente datos de métricas replicados de todos los Pods.
El controlador HPA accede a estos datos a través de la API del servidor de indicadores (API de Heapster o API de agregación) y calcula los datos del indicador basándose en reglas de extensión definidas por el usuario. Y los cálculos se realizan en función de reglas de expansión definidas por el usuario para obtener el número objetivo de replicaciones de Pod.
Cuando el número de replicación del Pod de destino es diferente del número de replicación actual, el controlador HPA envía solicitudes (implementación, RC, RC y RC) al controlador de replicación del Pod. Deployment, RC o ReplicaSet) para ajustar el número de réplicas del Pod para completar las operaciones de expansión y contracción.
El servicio kube-controller-manager del sitio maestro monitoreará continuamente ciertos indicadores de rendimiento del Pod de destino para determinar si es necesario ajustar la cantidad de réplicas.
Los tipos de métricas admitidos actualmente por Kubernetes son los siguientes.
¡¡¡Kubernetes está obsoleto a partir de la versión 1.11!!! La recopilación de utilización de CPU del pod se completa en función del componente Heapster y se envía a Metrics Server para completar la recopilación de datos. .
Metrics Server agrega los datos del indicador de rendimiento del Pod recopilados al controlador HPA a través de API agregadas (como metrics.k8s.io, custom.metrics.k8s.io y external.metrics.k8s.io). consultas.
El controlador Autoscaler obtiene datos de métricas de rendimiento del Pod de la API de agregación, luego calcula el número objetivo de replicaciones de Pod de acuerdo con el siguiente algoritmo y lo compara con el número de replicaciones de Pod actualmente en ejecución.
Es decir: el número actual de copias × (valor del indicador actual/valor del indicador esperado), y el resultado se redondea.
Tome el número de solicitudes de CPU como ejemplo. Si el valor del indicador esperado establecido por el usuario es 100 m y el valor del indicador real utilizado actualmente es 200 m, entonces el número esperado calculado de copias de Pod debe ser dos. (200/100=2). Si la métrica esperada se establece en 50 m y el resultado calculado es 0,5, entonces, redondeando a 1, el número objetivo de replicación del pod resultante debe ser 1.
Cuando el resultado del cálculo es muy cercano a 1, puede establecer una tolerancia para que el sistema no se expanda ni contraiga. La tolerancia se establece en el parámetro de inicio: horizontal-pod-autoscaler-tolerance del servicio kube-controller-manager, y el valor predeterminado es 0,1 (es decir, 10%). El valor predeterminado es 0,1 (es decir, 10%), lo que significa que si el resultado según el algoritmo anterior está en el rango [-10% - +10%] (es decir, [0,9 - 1,1]), el controlador no se moverá hacia arriba. o hacia abajo Zoom hacia abajo.
También es posible establecer wantedMetricValue en el valor promedio de una métrica, como targetAverageValue o targetAverageUtilization. targetAverageUtilization, donde el algoritmo para el valor de métrica actual (currentMetricValue) es la suma de los valores de métricas actuales de todas las réplicas de Pod dividida por el número de réplicas de Pod. número.
Además, existen varias excepciones de Pod, que se describen a continuación.
Estos Pods anormales no se incluirán en los cálculos de currentMetricValue / wantedMetricValue
Cuando falta el valor métrico de un Pod, el sistema volverá a calcular el promedio de una manera más conservadora. El sistema supone que estos Pods consumen el 100 % de la métrica deseada cuando necesitan reducirse y el 0 % de la métrica deseada cuando necesitan aumentar, lo que bloqueará posibles operaciones de ampliación y reducción.
Además, si hay Pods que no han alcanzado el estado listo y el sistema escala sin tener en cuenta las métricas faltantes o los Pods no listos, el sistema seguirá suponiendo de manera conservadora que esos Pods consumieron el 0 % de la métrica esperada. valor, lo que impediría aún más las operaciones de escalamiento.
Si se configuran varios valores de métrica en HorizontalPodAutoscaler, el algoritmo anterior se ejecutará para cada valor de métrica y el número máximo de réplicas requeridas se utilizará como resultado final entre todos los resultados. Si alguna de estas métricas no se puede convertir al número requerido de copias (por ejemplo, no se puede obtener el valor de la métrica), el sistema omitirá las operaciones de ampliación y reducción.
Finalmente, antes de que el controlador HPA realice una operación de ampliación o reducción, se registra una recomendación de ampliación. El controlador considera todas las recomendaciones dentro de la ventana de tiempo de funcionamiento (el rango de tiempo es configurable) y selecciona la que tiene la puntuación más alta. Este valor se puede configurar a través del parámetro de inicio --horizontal-pod-autoscaler-downscale-stabilization-window del servicio kube-controller-manager, y el valor predeterminado es 5 minutos. Esta configuración permite que el sistema realice operaciones de escalado de manera más fluida, evitando así un escalado rápido del indicador en un corto período de tiempo. Esta configuración permite operaciones de escalado más fluidas, eliminando los efectos de las fluctuaciones rápidas en las métricas durante cortos períodos de tiempo.
Kubernetes proporciona el objeto de recurso HorizontalPodAutoscaler para que los usuarios definan reglas de expansión.
El objeto de recurso HorizontalPodAutoscaler se encuentra en el grupo de API de Kubernetes "autoescalado", que actualmente incluye dos versiones, v1 y v2.
Entre ellas, autoscaling/v1 solo admite escalado automático. sobre la utilización de CPU. autoscaling/v2 se utiliza para admitir la configuración de escalado automático basada en cualquier métrica, incluidas métricas basadas en la utilización de recursos, métricas de Pod, otras métricas y otros tipos de datos de métricas. La versión actual es autoscaling/v2beta2.
Expansión automática.
Las instrucciones de configuración y uso de HorizontalPodAutoscaler son las siguientes.
(1) Según la configuración de HorizontalPodAutoscaler de la versión de escalado automático/v1, solo necesita configurar el uso de la CPU:
Los parámetros principales son los siguientes