Creación de una política del ajuste de nodos
CCE proporciona el ajuste automático a través del complemento del autoscaler. Los nodos con diferentes especificaciones se pueden agregar automáticamente a través de AZ bajo demanda.
Si una política de ajuste de nodos y la configuración en el complemento de autoscaler tienen efecto al mismo tiempo, por ejemplo, hay pods que no se pueden programar y el valor de una métrica alcanza el umbral al mismo tiempo, la expansión horizontal se realiza primero para los pods no programados.
- Si la expansión horizontal tiene éxito para los pods no programables, el sistema omite la lógica de reglas basada en métricas y entra en el siguiente bucle.
- Si la expansión horizontal falla para los pods no programables, se ejecuta la regla basada en métricas.
Requisitos previos
Antes de utilizar la función de ajuste de nodos, debe instalar el complemento de autoscaler de v1.13.8 o posterior en el clúster.
Notas y restricciones
- Solo los pools de nodo de pago por uso admiten el ajuste automático.
- Las políticas de ajuste automático se aplican a los grupos de nodos. Cuando el número de nodos en un grupo de nodos es 0 y la política de ajuste se basa en el uso de CPU o memoria, el ajuste de nodos no se activa.
- La reducción del nodo causará la pérdida de datos de PVC/PV para los PV locales asociados con el nodo. Estos PVC y PV no se pueden restaurar o utilizar de nuevo. En una reducción de nodo, el pod que utiliza el PV local se desaloja del nodo. Se crea un nuevo pod y permanece en el estado pendiente. Esto se debe a que el PVC utilizado por el pod tiene una etiqueta de nodo, debido a lo cual el pod no se puede programar.
Procedimiento
- Inicie sesión en la consola de CCE y acceda a la consola del clúster.
- Elija Node Scaling en el panel de navegación.
- Si aparece Uninstalled junto al nombre del complemento, haga clic en Install y configure los parámetros del complemento según sea necesario y haga clic en Install para instalar el complemento.
- Si aparece Installed junto al nombre del complemento, este complemento se ha instalado.
- Haga clic en Create Node Scaling Policy en la esquina superior derecha y establezca los parámetros de la siguiente manera:
- Policy Name: nombre de la política que se va a crear, que se puede personalizar.
- Associated Node Pools: Seleccione el grupo de nodos que se va a asociar. Puede asociar varios grupos de nodos para utilizar la misma política de ajuste.
- Rules: Haga clic en Add Rule. En el cuadro de diálogo que se muestra, establezca los siguientes parámetros:
Rule Name: Ingrese un nombre de regla.
Rule Type: Puede seleccionar Metric-based o Periodic. Las diferencias entre los dos tipos son las siguientes:
- Metric-based:
Condition: Seleccione CPU allocation rate o Memory allocation rate e introduzca un valor. El valor debe ser mayor que el porcentaje de reducción configurado en el complemento del autoscaler.
- Asignación de recursos (%) = Recursos solicitados por pods en el grupo de nodos/Recursos asignados a pods en el grupo de nodos
- Si varias reglas cumplen las condiciones, las reglas se ejecutan en cualquiera de los siguientes modos:
Si se configuran reglas basadas en CPU allocation rate y memory allocation rate y dos o más reglas cumplen las condiciones de la expansión horizontal, se ejecutará la regla que agregará la mayoría de los nodos.
Si se configura una regla basada en CPU allocation rate y a periodic rule y ambas cumplen con las condiciones de la expansión horizontal, una de ellas se ejecutará aleatoriamente. La regla ejecutada primero (regla A) cambia el grupo de nodos al estado de ajuste. Como resultado, la otra regla (regla B) no se puede ejecutar. Después de ejecutar la regla A y de que el estado del grupo de nodos se vuelva normal, la regla B no se ejecutará.
- Si se configuran reglas basadas en CPU allocation rate y memory allocation rate, el período de detección de políticas varía con la lógica de procesamiento de cada bucle del complemento de autoscaler. La expansión horizontal se activa una vez que se cumplen las condiciones, pero está limitada por otros factores tales como el intervalo de enfriamiento y el estado del grupo de nodos.
- Periodic:
Trigger Time: Puede seleccionar un punto de tiempo específico cada día, cada semana, cada mes o cada año.
Action: Establezca una acción que se realizará cuando se cumpla la condición de activador.
Puede hacer clic de nuevo en Add Rule para agregar más políticas de ajuste de nodos. Puede agregar un máximo de una regla basada en el uso de CPU y una regla basada en el uso de memoria. El número total de reglas no puede exceder de 10.
- Metric-based:
- Haga clic en OK.
Restricciones en la reducción horizontal
Solo puede establecer políticas de reducción de nodo cuando instale el complemento de autoscaler.
La reducción horizontal de nodo solo puede activarse mediante la tasa de asignación de recursos. Cuando las velocidades de asignación de CPU y memoria en un clúster son inferiores a los umbrales especificados (establecidos cuando se instala o modifica el complemento del autoscaler), se activa la reducción horizontal para los nodos del grupo de nodos (esta función se puede deshabilitar), como se muestra en Figura 1.
Ejemplo de YAML
A continuación se muestra un ejemplo de YAML de una política de ajuste de nodos:
apiVersion: autoscaling.cce.io/v1alpha1 kind: HorizontalNodeAutoscaler metadata: creationTimestamp: "2020-02-13T12:47:49Z" generation: 1 name: xxxx namespace: kube-system resourceVersion: "11433270" selfLink: /apis/autoscaling.cce.io/v1alpha1/namespaces/kube-system/horizontalnodeautoscalers/xxxx uid: c2bd1e1d-60aa-47b5-938c-6bf3fadbe91f spec: disable: false rules: - action: type: ScaleUp unit: Node value: 1 cronTrigger: schedule: 47 20 * * * disable: false ruleName: cronrule type: Cron - action: type: ScaleUp unit: Node value: 2 disable: false metricTrigger: metricName: Cpu metricOperation: '>' metricValue: "40" unit: Percent ruleName: metricrule type: Metric targetNodepoolIds: - 7d48eca7-3419-11ea-bc29-0255ac1001a8
Parámetro |
Tipo |
Descripción |
---|---|---|
spec.disable |
Bool |
Si se debe habilitar la política de ajuste. Este parámetro tiene efecto para todas las reglas de la política. |
spec.rules |
Array |
Todas las reglas de una política de ajuste. |
spec.rules[x].ruleName |
String |
Nombre de la regla. |
spec.rules[x].type |
String |
Tipo de la regla. Actualmente, son compatibles con Cron y Metric. |
spec.rules[x].disable |
Bool |
Cambio de la regla. Actualmente, solo se admite false. |
spec.rules[x].action.type |
String |
Tipo de acción de regla. Actualmente, solo se admite ScaleUp. |
spec.rules[x].action.unit |
String |
Unidad de acción de reglas. Actualmente, solo se admite Node. |
spec.rules[x].action.value |
Integer |
Valor de acción de regla. |
spec.rules[x].cronTrigger |
/ |
Opcional. Este parámetro solo es válido en las reglas periódicas. |
spec.rules[x].cronTrigger.schedule |
String |
Expresión de Cron de una regla periódica. |
spec.rules[x].metricTrigger |
/ |
Opcional. Este parámetro solo es válido en reglas basadas en métricas. |
spec.rules[x].metricTrigger.metricName |
String |
Métrica de una regla basada en métricas. Actualmente, son compatibles con Cpu y Memory. |
spec.rules[x].metricTrigger.metricOperation |
String |
Operador de comparación de una regla basada en métricas. Actualmente, solo se admite >. |
spec.rules[x].metricTrigger.metricValue |
String |
Umbral métrico de una regla basada en métricas. El valor puede ser cualquier entero de 1 a 100 y debe ser una cadena de caracteres. |
spec.rules[x].metricTrigger.Unit |
String |
Unidad del umbral de regla basado en métricas. Actualmente, solo se admite %. |
spec.targetNodepoolIds |
Array |
Todos los grupos de nodos asociados a la política de ajuste. |
spec.targetNodepoolIds[x] |
String |
ID del grupo de nodos asociado a la política de ajuste. |