Este artículo es compartido por la comunidad de la nube de Huawei " Prueba sobre el efecto de adelantarse a las tareas en línea, suprimir los recursos de la CPU para las tareas sin conexión y garantizar la calidad del servicio para las tareas en línea en el escenario de implementación mixta nativa de la nube de CCE . El autor: Puedes hacer amigos". .
fondo
Los entornos de TI empresariales suelen ejecutar dos tipos principales de procesos: uno son los servicios en línea y el otro son las operaciones fuera de línea.
Tareas en línea : tiempo de ejecución prolongado, tráfico de servicios y utilización de recursos tienen características de marea, son sensibles a los retrasos y tienen altos requisitos de SLA de servicio, como servicios de transacciones de comercio electrónico, etc.
Tareas fuera de línea : El tiempo de ejecución se divide en intervalos, la tasa de utilización de recursos es alta durante la operación, el retraso no es sensible, la tasa de tolerancia a fallas es alta y las interrupciones generalmente permiten la repetición, como el procesamiento de big data, etc.
La forma principal de coubicación es mejorar la utilización de recursos mediante la implementación de tareas en línea y fuera de línea en el mismo nodo. Por ejemplo, un nodo anteriormente implementaba 3 tareas en línea con un SLA de alto servicio y ahora implementa 3 tareas en línea y 3 tareas fuera de línea. De manera mixta, los servicios fuera de línea utilizan los recursos inactivos de los servicios en línea en varios períodos sin afectar la calidad del servicio de los servicios en línea.
En el nivel de ubicación conjunta del contenedor, implica principalmente: 1) En el nivel de programación, los recursos de programación del nodo están sobreprogramados y las tareas en línea y fuera de línea se mezclan y programan en el mismo nodo; 2) En el nivel de CPU, las tareas en línea; se adelantan y las tareas fuera de línea se suprimen 3) El nivel de memoria no se presenta en este artículo; A través del poder de la CPU de la tecnología coubicada, se puede lograr que durante el proceso de operación, el sistema completará automáticamente la "prevención" y la "supresión" en línea de los recursos de tareas fuera de línea de acuerdo con el uso de los recursos de tareas en línea y fuera de línea. para garantizar las demandas de recursos de los recursos en línea. Tomemos como ejemplo una máquina de 4 núcleos:
- Cuando una tarea en línea requiere recursos de CPU de 3 núcleos, el sistema necesita "suprimir" la tarea fuera de línea para utilizar hasta un recurso de CPU de 1 núcleo;
- Las tareas en línea estaban en el punto más bajo del negocio en ese momento y solo usaban un recurso de CPU central. Las tareas fuera de línea podían usar los recursos de CPU restantes en el corto plazo cuando el negocio de tareas en línea aumentó, el sistema aseguró que el negocio en línea; podría "adelantarse" a los recursos de CPU empresariales fuera de línea;
Preparación ambiental
Requisitos medioambientales
Versión de clúster :
- Clúster v1.19: v1.19.16-r4 y superiores
- Clúster v1.21: v1.21.7-r0 y superiores
- Clúster v1.23: v1.23.5-r0 y superior
- v1.25 y superior
Tipo de clúster : clúster CCE estándar o clúster CCE Turbo.
Sistema operativo del nodo : EulerOS 2.9 (kernel-4.18.0-147.5.1.6.h729.6.eulerosv2r9.x86_64) o Huawei Cloud EulerOS 2.0
Tipo de nodo : máquina virtual elástica.
Versión del complemento Volcano : 1.7.0 y superior.
información ambiental
El clúster CCE implementa complementos kube-prometheus-stack, grafana y volcan
Demostración de supresión y preferencia de CPU
Línea base de la prueba de estrés
Cree la carga de trabajo requerida para la demostración y asegúrese de que las dos cargas de trabajo estén programadas en el mismo nodo (dado que la expresión general en el panel está asociada con el nombre del pod, se recomienda no usar el nombre de la carga de trabajo; de lo contrario, afectará la visualización normal del salpicadero)
tipo: Despliegue Versión api: aplicaciones/v1 metadatos: nombre: redis Especificaciones: réplicas: 1 selector: coincidirEtiquetas: aplicación: redis plantilla: metadatos: marca de tiempo de creación: nulo etiquetas: aplicación: redis anotaciones: prometheus.io/ruta: /métricas prometheus.io/port: '9121' prometheus.io/scrape: 'verdadero' Especificaciones: contenedores: - nombre: contenedor-1 imagen: swr.cn-north-4.myhuaweicloud.com/testapp/redis:v6 recursos: límites: CPU: '1' peticiones: procesador: 250m - nombre: contenedor-2 imagen: bitnami/redis-exporter:latest recursos: límites: procesador: 250m memoria: 512Mi peticiones: procesador: 250m memoria: 512Mi imagenPullSecrets: - nombre: secreto predeterminado Nombre del planificador: volcán --- tipo: Despliegue Versión api: aplicaciones/v1 metadatos: nombre: estrés Especificaciones: réplicas: 1 selector: coincidirEtiquetas: aplicación: estrés plantilla: metadatos: etiquetas: aplicación: estrés Especificaciones: contenedores: - nombre: contenedor-1 imagen: swr.cn-north-4.myhuaweicloud.com/testapp/centos-stress:v1 dominio: - /bin/bash argumentos: - '-C' - si bien es cierto; haz eco hola; dormir 10; hecho recursos: límites: procesador: '4' memoria: 4Gi peticiones: procesador: 2500m memoria: 1Gi imagenPullSecrets: - nombre: secreto predeterminado Nombre del planificador: volcán afinidad: podAfinidad: requerido durante la programación ignorado durante la ejecución: - selector de etiquetas: coincidenciaExpresiones: - clave: aplicación operador: en valores: -redis espacios de nombres: - por defecto Clave de topología: kubernetes.io/hostname
Utilice el comando redis-benchmark para realizar una prueba de esfuerzo de redis 192.168.1.159
para la IP del Pod de redis ;
./redis-benchmark -h 192.168.1.159 -p 6379 -n 3000000 -c 100 –q -t SET,INCR,LPUSH,LPOP,RPOP,SADD,HSET,SPOP,ZADD,ZPOPMIN
Observe los indicadores de Redis y el uso de la CPU en la página de Grafana, que se pueden utilizar como datos de referencia de referencia sin interferencias.
Escena no mixta
Cree un grupo de nodos para la implementación híbrida y vuelva a implementar las cargas de trabajo anteriores en nuevos nodos.
Utilice el comando redis-benchmark nuevamente para probar redis 192.168.1.172
para la IP del Pod de redis ;
./redis-benchmark -h 192.168.1.172 -p 6379 -n 3000000 -c 100 –q -t SET,INCR,LPUSH,LPOP,RPOP,SADD,HSET,SPOP,ZADD,ZPOPMIN
Ingrese al contenedor de estrés. Una vez que el indicador de Redis alcance la línea base y se estabilice, ejecute el comando para aumentar el uso de la CPU.
estrés de -c 4 -t 3600
Observe los indicadores de Redis y el uso de CPU en la página de Grafana y descubra que los datos de rendimiento de Redis se degradaron rápidamente durante la prueba de estrés del contenedor.
escena mixta
Actualice el grupo de nodos y configure la etiqueta híbrida para el nodo en la configuración avanzada:volcano.sh/colocation="true"
Haga clic en la gestión de configuración del grupo de nodos-configuración del componente kubelet-habilite la función de ubicación conjunta de nodos

Modifique el umbral de desalojo del nodo a 100 para evitar el desalojo directo cuando el uso de la CPU supere el umbral durante las pruebas de estrés.
kubectl anotar nodo 192.168.0.209 volcan.sh/evicting-cpu-high-watermark=100
Modifique la anotación de la carga de trabajo de estrés y márquela como negocio fuera de línea. No es necesario modificar la carga de trabajo de Redis.
tipo: Despliegue Versión api: aplicaciones/v1 metadatos: nombre: estrés Especificaciones: réplicas: 1 selector: coincidirEtiquetas: aplicación: estrés plantilla: metadatos: etiquetas: aplicación: estrés anotaciones: volcan.sh/qos-level: "-1" # Anotaciones de trabajo sin conexión Especificaciones: contenedores: - nombre: contenedor-1 imagen: swr.cn-north-4.myhuaweicloud.com/testapp/centos-stress:v1 dominio: - /bin/bash argumentos: - '-C' - si bien es cierto; haz eco hola; dormir 10; hecho recursos: límites: procesador: '4' memoria: 4Gi peticiones: procesador: 2500m memoria: 1Gi imagenPullSecrets: - nombre: secreto predeterminado Nombre del planificador: volcán afinidad: podAfinidad: requerido durante la programación ignorado durante la ejecución: - selector de etiquetas: coincidenciaExpresiones: - clave: aplicación operador: en valores: -redis espacios de nombres: - por defecto Clave de topología: kubernetes.io/hostnameUtilice el comando redis-benchmark para realizar una prueba de esfuerzo de redis
192.168.1.172
para la IP del Pod de redis ;
./redis-benchmark -h 192.168.1.172 -p 6379 -n 3000000 -c 100 –q -t SET,INCR,LPUSH,LPOP,RPOP,SADD,HSET,SPOP,ZADD,ZPOPMINIngrese al contenedor de estrés. Una vez que el indicador de Redis alcance la línea base y se estabilice, ejecute el comando para aumentar el uso de la CPU.
estrés de -c 4 -t 3600
Observe los indicadores de redis y el uso de CPU en la página de grafana. En el escenario mixto, incluso si las tareas fuera de línea intentan agotar la CPU del nodo, el sistema operativo aún mantiene las demandas de CPU de las tareas en línea, lo que garantiza la calidad del servicio de las tareas en línea. .

Haga clic para seguir y conocer las nuevas tecnologías de Huawei Cloud lo antes posible ~
Un programador nacido en los años 90 desarrolló un software de portabilidad de vídeo y ganó más de 7 millones en menos de un año. ¡El final fue muy duro! Los estudiantes de secundaria crean su propio lenguaje de programación de código abierto como una ceremonia de mayoría de edad: comentarios agudos de los internautas: debido al fraude desenfrenado, confiando en RustDesk, el servicio doméstico Taobao (taobao.com) suspendió los servicios domésticos y reinició el trabajo de optimización de la versión web Java 17 es la versión Java LTS más utilizada. Cuota de mercado de Windows 10. Alcanzando el 70%, Windows 11 continúa disminuyendo. Open Source Daily | Google apoya a Hongmeng para hacerse cargo de los teléfonos Android de código abierto respaldados por Docker; Electric cierra la plataforma abierta Apple lanza el chip M4 Google elimina el kernel universal de Android (ACK) Soporte para la arquitectura RISC-V Yunfeng renunció a Alibaba y planea producir juegos independientes en la plataforma Windows en el futuro