Prácticas sostenibles de ingeniería de software en Azure Kubernetes Service (AKS)
Los principios de ingeniería de software sostenible son un conjunto de competencias que le ayudarán a definir, crear y ejecutar aplicaciones sostenibles. El objetivo general es reducir la huella de carbono de cada aspecto de la aplicación. La guía de Azure Well-Architected Framework para la sostenibilidad se alinea con los Principios de ingeniería de software sostenible de la Green Software Foundation y proporciona información general sobre los principios de ingeniería de software sostenible.
La ingeniería de software sostenible supone un cambio de prioridades y de enfoque. En muchos casos, la forma en que se diseña y ejecuta la mayoría del software prioriza un rendimiento rápido y una latencia baja. La ingeniería de software sostenible se centra en reducir las emisiones de carbono tanto como sea posible.
- La aplicación de principios de ingeniería de software sostenible puede proporcionar un rendimiento más rápido o una menor latencia, por ejemplo, al reducir el recorrido total de la red.
- Reducir las emisiones de carbono puede ralentizar el rendimiento o aumentar la latencia, como el retraso de las cargas de trabajo de prioridad baja.
La siguiente guía se centra en los servicios que va a compilar u operar en Azure con Azure Kubernetes Service (AKS). En este artículo se incluyen listas de comprobación de diseño y configuración, prácticas de diseño recomendadas y opciones de configuración. Antes de aplicar principios de ingeniería de software sostenible a una aplicación, revise las prioridades, las necesidades y las ventajas e inconvenientes de su aplicación.
Requisitos previos
- Reconocimiento de la guía de sostenibilidad de Well-Architected Framework puede ayudarle a generar una arquitectura de nube de alta calidad, estable y eficaz. Le recomendamos que empiece por leer más sobre las cargas de trabajo sostenibles y que revise su carga de trabajo mediante la evaluación Microsoft Azure Well-Architected Review.
- Tener requisitos empresariales claramente definidos es fundamental al compilar aplicaciones, ya que podrían tener un impacto directo en las arquitecturas y configuraciones de clúster y de carga de trabajo. Al compilar o actualizar aplicaciones existentes, revise las áreas de diseño de sostenibilidad de Well-Architected Framework, junto con el ciclo de vida holístico de la aplicación.
Reconocimiento del modelo de responsabilidad compartida
La sostenibilidad es una responsabilidad compartida entre el proveedor de nube y el cliente o el asociado que diseña e implementa clústeres de AKS en la plataforma. La implementación de AKS no hace que sea sostenible automáticamente, incluso si los centros de datos están optimizados para la sostenibilidad. Las aplicaciones que no están correctamente optimizadas podrían seguir emitiendo más carbono de lo necesario.
Obtenga más información sobre el modelo de responsabilidad compartida para la sostenibilidad.
Principios de diseño
Eficiencia de carbono: emitir la menor cantidad de carbono posible.
Una aplicación en la nube eficiente en carbono es una que está optimizada y el punto de partida es la optimización de costos.
Eficiencia energética: usar la menor cantidad de energía posible.
Una manera de aumentar la eficiencia energética es ejecutar la aplicación en tan pocos servidores como sea posible, con los servidores ejecutándose en la tasa de utilización más alta, aumentando también la eficiencia del hardware.
Eficiencia del hardware: usar la menor cantidad posible de carbono incorporado.
Hay dos enfoques principales para la eficiencia del hardware:
- En el caso de los dispositivos de usuario final, extiende la vida útil del hardware.
- En el caso de la informática en la nube, aumenta el uso de recursos.
Conciencia del carbono: haga más cuando la electricidad es más limpia y haga menos cuando la electricidad es más sucia.
Ser consciente del carbono significa responder a los cambios en la intensidad del carbono aumentando o disminuyendo su demanda.
Modelos y prácticas de diseño
Antes de revisar las recomendaciones detalladas en cada una de las áreas de diseño, se recomienda considerar detenidamente los siguientes patrones de diseño para crear cargas de trabajo sostenibles en AKS:
Diseño de aplicación
Explore esta sección para obtener más información sobre cómo optimizar las aplicaciones para un diseño de aplicaciones más sostenible.
Diseño para el escalado independiente de componentes lógicos
Una arquitectura de microservicios puede reducir los recursos de proceso necesarios, ya que permite el escalado independiente de sus componentes lógicos y garantiza que se escalen según la demanda.
- Considere la posibilidad de usar Dapr Framework u otros proyectos CNCF para ayudarle a separar la funcionalidad de su aplicación en diferentes microservicios y permitir el escalado independiente de sus componentes lógicos.
Diseño para el escalado controlado por eventos
El escalado de la carga de trabajo basado en métricas empresariales relevantes, como las solicitudes HTTP, la longitud de la cola y los eventos de la nube, puede ayudar a reducir el uso de recursos y, por tanto, sus emisiones de carbono.
- Use Keda al compilar aplicaciones controladas por eventos para permitir el escalado vertical a cero cuando no haya demanda.
Objetivo de diseño sin estado
Al quitar el estado del diseño, se reducen los datos en memoria o en disco requeridos por la carga de trabajo para funcionar.
- Considere el diseño sin estado para reducir la carga de red innecesaria, el procesamiento de datos y los recursos de proceso.
Plataforma de aplicaciones
Explore esta sección para aprender a tomar mejores decisiones relacionadas con la plataforma fundamentadas en torno a la sostenibilidad.
Habilitación de actualizaciones automáticas de clústeres y nodos
Un clúster actualizado evita problemas de rendimiento innecesarios y garantiza que se beneficie de las últimas mejoras de rendimiento y optimizaciones de proceso.
- Habilite la actualización automática del clúster y aplique actualizaciones de seguridad a los nodos automáticamente mediante Acciones de GitHub para asegurarse de que el clúster tenga las mejoras más recientes.
Instalación de complementos y extensiones compatibles
Los complementos y extensiones cubiertos por la directiva de soporte técnico de AKS proporcionan funcionalidades adicionales y admitidas al clúster, a la vez que le permiten beneficiarse de las últimas mejoras de rendimiento y optimizaciones energéticas durante todo el ciclo de vida del clúster.
- Instale KEDA como complemento.
- Instale GitOps & Dapr como extensiones.
Incluir en contenedores la carga de trabajo cuando corresponda
Los contenedores permiten reducir la asignación innecesaria de recursos y mejorar el uso de los recursos implementados, ya que permiten el empaquetado de contenedores y requieren menos recursos de proceso que las máquinas virtuales.
- Use Draft para simplificar la contenedorización de aplicaciones mediante la generación de Dockerfiles y manifiestos de Kubernetes.
Uso de hardware eficiente en energía
Los procesadores nativos de la nube de Ampere están diseñados de forma exclusiva para satisfacer las necesidades de alto rendimiento y eficiencia energética de la nube.
- Evalúe si los nodos con procesadores basados en Ampere Altra Arm son una buena opción para las cargas de trabajo.
Satisfacer las necesidades de escalabilidad y usar funcionalidades de escalado automático y expansión
Un clúster sobredimensionado no maximiza el uso de recursos de proceso y puede dar lugar a un desperdicio de energía. Separe las aplicaciones en diferentes grupos de nodos para permitir el dimensionamiento correcto del clúster y el escalado independiente según los requisitos de la aplicación. A medida que se agote la capacidad del clúster AKS, pase de AKS a ACI para escalar horizontalmente los pods adicionales a los nodos sin servidor y garantizar que su carga de trabajo use todos los recursos asignados de forma eficiente.
- Ajuste el tamaño del clúster para que coincida con las necesidades de escalabilidad de la aplicación. Use la escalabilidad automática del clúster con los nodos virtuales para escalar y maximizar rápidamente el uso de recursos.
- Aplique cuotas de recursos en el nivel del espacio de nombres y escale grupos de nodos de usuario a cero cuando no haya demanda.
Desactivar cargas de trabajo y grupos de nodos fuera del horario comercial
Es posible que las cargas de trabajo no necesiten ejecutarse continuamente y podrían desactivarse para reducir los residuos energéticos y, en consecuencia, las emisiones de carbono. Puede desactivar por completo (detener) sus grupos de nodos en su clúster AKS, lo que le permitirá también ahorrar en costos de proceso.
- Use la detención o el inicio del grupo de nodos para desactivar los grupos de nodos fuera del horario comercial.
- Use el escalador de KEDA CRON para reducir verticalmente las cargas de trabajo (pods) en función del tiempo.
Procedimientos operativos
Explore esta sección para configurar el entorno para medir y mejorar continuamente el costo de las cargas de trabajo y la eficiencia del carbono.
Eliminar recursos no utilizados
Los recursos no usados, como las imágenes no referenciadas y los recursos de almacenamiento, se deben identificar y eliminar, ya que tienen un impacto directo en el hardware y en la eficiencia energética. Para garantizar la optimización continua de energía, debe tratar la identificación y eliminación de recursos sin usar como un proceso en lugar de una actividad en un momento dado.
- Use Azure Advisor para buscar los recursos infrautilizados.
- Use ImageCleaner para limpiar imágenes obsoletas y quitar un área de riesgo del clúster.
Etiquetado de los recursos
Es importante obtener la información y los conocimientos adecuados en el momento oportuno para elaborar informes sobre el rendimiento y el uso de los recursos.
- Establezca etiquetas de Azure en el clúster para habilitar la supervisión de las cargas de trabajo.
Storage
Explore esta sección para aprender a diseñar una arquitectura de almacenamiento de datos más sostenible y a optimizar las implementaciones existentes.
Optimización del uso del almacenamiento
Las operaciones de recuperación de datos y almacenamiento de datos pueden tener un impacto significativo en la eficiencia energética y de hardware. El diseño de soluciones con el patrón de acceso a datos correcto puede reducir el consumo de energía y el carbono incorporado.
- Comprenda las necesidades de la aplicación para elegir el almacenamiento adecuado y definirlo mediante clases de almacenamiento para evitar la infrautilización del almacenamiento.
- Además, considere la posibilidad de aprovisionar volúmenes de forma dinámica para escalar automáticamente el número de recursos de almacenamiento.
Red y conectividad
Explore esta sección para aprender a mejorar y optimizar la eficiencia de la red para reducir las emisiones de carbono innecesarias.
Elegir una región más cercana a los usuarios
La distancia desde un centro de datos a los usuarios tiene un impacto significativo en el consumo de energía y las emisiones de carbono. Acortar la distancia a la que viaja un paquete de red mejora tanto la energía como la eficiencia del carbono.
- Revise los requisitos de la aplicación y las zonas geográficas de Azure para elegir la región más cercana a donde se envían la mayoría de los paquetes de red.
Reducción del recorrido de red entre nodos
La colocación de nodos en una sola región o en una sola zona de disponibilidad reduce la distancia física entre las instancias. Sin embargo, en el caso de las cargas de trabajo críticas para la empresa, debe asegurarse de que el clúster esté repartido en varias zonas de disponibilidad, lo que puede dar lugar a un mayor cruce de redes y a un aumento de la huella de carbono.
- Considere la posibilidad de implementar los nodos dentro de un grupo con ubicación por proximidad para reducir el recorrido de red asegurándose de que los recursos de proceso se encuentran físicamente cerca entre sí.
- Para las cargas de trabajo críticas, configure grupos con ubicación por proximidad con zonas de disponibilidad.
Evaluación mediante una malla de servicio
Una malla de servicio implementa contenedores adicionales para la comunicación, normalmente en un patrón sidecar, para proporcionar funcionalidades más operativas que conducen a un aumento del uso de CPU y del tráfico de red. Sin embargo, le permite desacoplar la aplicación de estas funcionalidades a medida que las mueve del nivel de aplicación y hacia abajo hasta el nivel de infraestructura.
- Considere cuidadosamente el aumento del uso de la CPU y del tráfico que generan los componentes de comunicación de la malla de servicios antes de tomar la decisión de usar uno.
Optimización de la recopilación de registros
Enviar y almacenar todos los registros de todos los orígenes posibles (cargas de trabajo, servicios, diagnósticos y actividad de la plataforma) puede aumentar considerablemente el tráfico de red y el almacenamiento, lo que repercutiría en mayores costos y emisiones de carbono.
- Asegúrese de recopilar y conservar solo los datos de registro necesarios para satisfacer sus requisitos. Configure las reglas de recopilación de datos para las cargas de trabajo de AKS e implemente consideraciones de diseño para optimizar los costos de Log Analytics.
Almacenar en caché datos estáticos
El uso de Content Delivery Network (CDN) es un enfoque sostenible para optimizar el tráfico porque reduce el movimiento de datos a través de una red. Minimiza la latencia mediante el almacenamiento de datos estáticos de lectura frecuente más cerca de los usuarios y ayuda a reducir el tráfico de red y la carga del servidor.
- Asegúrese de seguir los procedimientos recomendados para CDN.
- Considere la posibilidad de usar Azure CDN para reducir el ancho de banda consumido y mantener los costos bajos.
Seguridad
Explore esta sección para más información sobre las recomendaciones que conducen a una posición de seguridad sostenible y de tamaño adecuado.
Evaluar si se va a usar la terminación TLS
La seguridad de la capa de transporte (TLS) garantiza que todos los datos que se transmiten entre el servidor web y los navegadores permanecen privados y cifrados. Sin embargo, la terminación y el nuevo establecimiento de TLS aumentan el uso de la CPU y pueden ser innecesarios en determinadas arquitecturas. Un nivel de seguridad equilibrado puede ofrecer una carga de trabajo más sostenible y energéticamente eficiente, mientras que un mayor nivel de seguridad puede aumentar los requisitos de recursos de proceso.
- Revise la información sobre la terminación TLS al usar Application Gateway o Azure Front Door. Determine si puede finalizar TLS en la puerta de enlace de borde y continuar con un almacenamiento distinto de TLS para el equilibrador de carga de trabajo y la carga de trabajo.
Usar herramientas y controles de seguridad de red nativos de la nube
Azure Font Door y Application Gateway ayudan a administrar el tráfico de las aplicaciones web, mientras que Azure Web Application Firewall proporciona protección frente a los 10 ataques principales de OWASP y la carga de bots incorrectos en el perímetro de red. El uso de estas capacidades ayuda a eliminar la transmisión innecesaria de datos y reduce la carga de la infraestructura de la nube, con un menor ancho de banda y menos requisitos de infraestructura.
- Use Application Gateway Ingress Controller (AGIC) en AKS para filtrar y descargar el tráfico en el borde de la red para que no llegue a su origen y así reducir el consumo de energía y las emisiones de carbono.
Análisis de vulnerabilidades
Muchos ataques en la infraestructura en la nube buscan mal los recursos implementados para la ganancia directa del atacante, lo que conduce a un aumento innecesario del uso y el costo. Las herramientas de examen de vulnerabilidades ayudan a minimizar la ventana de oportunidad para los atacantes y mitigar cualquier posible uso malintencionado de recursos.
- Siga las recomendaciones de Microsoft Defender for Cloud.
- Ejecute herramientas automatizadas de análisis de vulnerabilidades, como Defender para contenedores, y evite el uso innecesario de recursos. Estas herramientas ayudan a identificar vulnerabilidades en las imágenes y a minimizar la ventana de oportunidad para los atacantes.
Pasos siguientes
Azure Kubernetes Service