Mochis NoticiasTecnologíaLas 10 mejores prácticas de Kubernetes para la excelencia en la producción
Mochis NoticiasTecnologíaLas 10 mejores prácticas de Kubernetes para la excelencia en la producción
Tecnología

Las 10 mejores prácticas de Kubernetes para la excelencia en la producción

Las 10 mejores prácticas de Kubernetes para la excelencia en la producción

Kubernetes se ha convertido rápidamente en el estándar para organizar contenedores y automatizar la implementación, el escalado y las operaciones de aplicaciones en contenedores. Sin embargo, ejecutar una infraestructura de Kubernetes resistente y de alto rendimiento requiere experiencia; pueden ocurrir errores de configuración fácilmente.

En esta publicación de blog, cubriremos las mejores prácticas de Kubernetes refinadas a partir de la experiencia del mundo real sobre lo que funciona bien al operar grandes clústeres de Kubernetes, cientos de implementaciones y sistemas distribuidos de misión crítica.

Mejores prácticas de Kubernetes

Echemos un vistazo a 10 mejores prácticas de Kubernetes que puede adaptar para optimizaciones:

1. Organización del espacio de nombres

Los espacios de nombres de Kubernetes son una forma poderosa de segmentar los recursos de su clúster. Organizar adecuadamente los espacios de nombres puede mejorar significativamente la capacidad de administración, la seguridad y la asignación de recursos. Puede considerar adoptar una estructura de espacio de nombres que refleje la arquitectura de su aplicación o las divisiones del equipo.

apiVersion: v1
kind: Namespace
metadata:
  name: team-a

2. Demandas y límites de recursos

La gestión eficiente de los recursos es crucial en un entorno de Kubernetes. Establecer solicitudes de recursos y límites para contenedores garantiza una utilización óptima de los recursos y evita la contención de recursos. Las solicitudes de recursos indican la cantidad garantizada de recursos que necesita un contenedor, mientras que los límites evitan que un contenedor consuma recursos excesivos.

Asegúrese de definir diligentemente las demandas y límites de recursos de CPU/RAM en todos los pods de Kubernetes en función de las métricas de la aplicación y las etapas del proceso. Esto permite que el programador de Kubernetes tome decisiones óptimas sobre la ubicación de los nodos. Puede activar estos recursos de pod/contenedor de forma iterativa.

resources:
  requests:
    memory: "64Mi"
    cpu: "250m"
  limits:
    memory: "128Mi"
    cpu: "500m"

3. Automatizar las implementaciones de Kubernetes

Se recomienda encarecidamente automatizar las implementaciones de Kubernetes a través de canalizaciones de CI/CD en lugar de comandos manuales de aplicación ad hoc de kubectl. Depender únicamente de los desarrolladores que ejecutan imperativo kubectl conduce a cambios de configuración entre entornos. Los cambios se realizan directamente en la infraestructura crítica sin revisiones, pruebas ni reproducibilidad.

En cambio, toda la implementación de la aplicación, ya sean monolitos o microservicios, debe incluirse en flujos de trabajo de CI/CD automatizados basados ​​en git tanto como sea posible. Esto significa que los manifiestos yaml de Kubernetes se integran directamente en Pipelines especializados ofrecidos por GitLab, GitHub Actions, Jenkins, etc.

Los activadores que van desde registros de git, etiquetado de imágenes hasta alertas de producción luego inician canalizaciones declarativas. Crean, validan y lanzan sistemáticamente cambios de configuración en espacios de nombres y clústeres de forma coherente y controlable. En cada etapa del proceso se llevan a cabo pruebas adecuadas, grados de calidad y controles de confirmación para lograr una gobernanza integral.

4. Sondas de salud

Se deben configurar sondas de preparación y vida útil para monitorear las métricas del estado del contenedor y detectar problemas críticos de manera temprana. Las sondas de preparación ayudan a indicar si una aplicación que se ejecuta en el pod está realmente preparada para comenzar a manejar el tráfico de usuarios después del inicio. Esto evita enviar solicitudes prematuras que salen mal.

Por otro lado, las sondas de vida comprueban periódicamente los síntomas de vitalidad del contenedor mientras están en funcionamiento continuo. Cosas como puntos finales que no responden, pérdida de conectividad de bases de datos o incluso fallas de aplicaciones se detectan rápidamente sin una gran infraestructura.

En función de los fallos de la sonda, Kubernetes reinicia automáticamente los pods afectados después de intervalos configurables para reparar automáticamente las situaciones defectuosas. Mecanismos sofisticados, como los balanceadores de carga, se integran de forma nativa con las sondas para retirar con elegancia las instancias fallidas del tráfico hasta que las sondas las declaren listas nuevamente.

Kubernetes admite varios tipos de sondeos de estado: comprobaciones de puntos finales HTTP, códigos de salida de procesos de contenedor, retraso en la cuenta para el inicio. Asegúrese de configurar las frecuencias de las sondas con cuidado para evitar sobrecargar los sistemas con exceso de trabajo.

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 3
  periodSeconds: 3

5. Implementar controles de estado del pod

Las sondas de estado sirven como comprobaciones de estado continuas que hacen ping constantemente a los puntos finales de un módulo en ejecución para comprobar si los contenedores principales siguen respondiendo como deberían. De esta manera se detectan cosas como fallas inesperadas, desconexiones de red o excepciones no detectadas.

En función de las fallas de verificación de vida útil que exceden los umbrales definidos, Kubernetes finaliza y reinicia automáticamente los pods afectados para repararse a sí mismos.

Las sondas de preparación ayudan a saber si un pod acaba de iniciarse y si realmente está listo para comenzar a aceptar el tráfico real de la aplicación después de la implementación. Las tareas asincrónicas durante la inicialización, incluidas cosas como cargar grandes modelos de aprendizaje automático o calentar grupos de conexiones, pueden llevar un tiempo no trivial en aplicaciones complejas.

Las sondas de preparación ganan tiempo adicional para indicar de manera concluyente que los pods están completamente preparados antes de permitir que los servicios enruten el tráfico a las instancias recién implementadas. Esto evita fallas resultantes de que los pods no estén completamente listos cuando se les pide que manejen las solicitudes demasiado pronto.

6. Definiciones de recursos personalizados (CRD)

Kubernetes le permite ampliar su funcionalidad definiendo recursos y controladores personalizados mediante definiciones de recursos personalizados (CRD). Aprovechar los CRD le permite introducir abstracciones específicas de dominio y automatizar tareas complejas. Esta extensibilidad le permite adaptar Kubernetes a los requisitos únicos de sus aplicaciones.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: myapp.custom.example.com
spec:
  group: custom.example.com
  names:
    kind: MyApp
    plural: myapps
  scope: Namespaced
  version: v1

7. Copia de seguridad y recuperación ante desastres

Haga una copia de seguridad del estado esencial del clúster con regularidad y pruebe la restauración, lo que incluye:

  • Definiciones de recursos del clúster
  • Secretos y claves de Kubernetes
  • Volúmenes persistentes con instantáneas
  • Copias de seguridad de bases de datos ejecutándose en Kubernetes

Bueno, no hace falta decir que proteger sus datos y aplicaciones contra pérdidas es una consideración crítica en cualquier entorno de producción. Es esencial implementar copias de seguridad periódicas y establecer un plan sólido de recuperación ante desastres. Puede aprovechar herramientas como Velero para realizar copias de seguridad de todo el clúster y simplificar el proceso de recuperación en caso de pérdida de datos o falla catastrófica.

8. Actualizar estrategias

Las actualizaciones y las implementaciones canary son estrategias esenciales para minimizar el tiempo de inactividad durante las actualizaciones de las aplicaciones. Kubernetes le permite definir estrategias de actualización en sus configuraciones de implementación, lo que permite la implementación controlada y gradual de nuevas versiones. Esto garantiza que sus aplicaciones permanezcan disponibles y respondan durante el proceso de actualización.

strategy:
  type: RollingUpdate
  rollingUpdate:
    maxUnavailable: 1
    maxSurge: 1

9. Utilice un registro de contenedor para almacenar sus imágenes.

Un registro de contenedor proporciona una forma de almacenar y distribuir las imágenes de su contenedor. Si utiliza un registro de contenedor, puede asegurarse de que sus imágenes tengan versiones, sean seguras y de fácil acceso. Los registros de contenedores le permiten almacenar sus imágenes en una ubicación central, lo que facilita compartirlas con otros usuarios o equipos. También proporcionan funciones como control de acceso, escaneo de imágenes y detección de vulnerabilidades, que pueden ayudarlo a mantener sus imágenes seguras.

10. Utilice StatefulSets para aplicaciones con estado

StatefulSets proporciona una forma de administrar aplicaciones con estado, como bases de datos y colas de mensajes. StatefulSets garantiza que cada instancia de aplicación tenga una identidad única y un almacenamiento persistente. Esto es importante para aplicaciones con estado, que requieren identidades únicas y almacenamiento persistente para funcionar correctamente.

Para aplicaciones con estado, como bases de datos, configure StatefulSets en lugar de Implementaciones: mantienen volúmenes persistentes, implementaciones elegantes, escalamiento ordenado, ID de red estables y procedimientos de inicio/desmontaje durante los reinicios de pods y los eventos de mantenimiento del clúster.

Pensamientos finales

En conclusión, la optimización de Kubernetes requiere el cumplimiento estratégico de las mejores prácticas de Kubernetes. Organice espacios de nombres para una gestión eficiente de los recursos, establezca solicitudes y límites de recursos e implemente sondeos de estado para garantizar la confiabilidad. Proteja los datos confidenciales con Kubernetes Secrets y adopte el escalado automático de pods horizontales para realizar ajustes dinámicos de recursos.

Las herramientas de registro y monitoreo mejoran la visibilidad, mientras que las estrategias de actualización controlada y los presupuestos de interrupción de pods minimizan el tiempo de inactividad. Utilice definiciones de recursos personalizadas para lograr extensibilidad y priorice la copia de seguridad y la recuperación ante desastres para la protección de datos.

Leer más:

Preguntas frecuentes

  1. ¿Cómo optimizar los recursos de los pods de Kubernetes?

    Defina cuidadosamente las demandas y límites de CPU/RAM en función del perfil de comportamiento de tiempo de ejecución de cada aplicación en varios niveles de carga. Ajústelos constantemente para equilibrar la oferta insuficiente y excesiva.

  2. ¿Qué tipos de controles de estado ayudan a mejorar la confiabilidad de las aplicaciones?

    Las sondas de preparación y duración deben configurarse para detectar errores tempranamente y reiniciar automáticamente los pods que no responden. Intégrelos con capas de equilibrio de carga para enrutar el tráfico de manera adecuada.

  3. ¿Cómo se debe gestionar la configuración en las aplicaciones de Kubernetes?

    Desacople todos los parámetros configurables de la aplicación de las imágenes de contenedor en ConfigMaps y Secrets que se inyectan como variables de entorno o volúmenes. Esto evita la reconstrucción para los cambios.

  4. ¿Por qué utilizar espacios de nombres de Kubernetes?

    Los espacios de nombres de Kubernetes aíslan lógicamente equipos, aplicaciones y entornos en clústeres virtuales para separar las preocupaciones. Establezca cuotas de recursos por espacio de nombres para una mejor gobernanza.

  5. ¿Cómo se pueden automatizar las implementaciones de los servicios de Kubernetes?

    Contenga aplicaciones y organice flujos de trabajo de implementación mediante canalizaciones de GitOps para obtener un CD consistente y reproducible. Automatice los procedimientos de reversión y la autorreparación.

  6. ¿Por qué ejecutar aplicaciones con estado en StatefulSets en implementaciones?

    Los StatefulSets mantienen volúmenes persistentes, ID de red estables, implementación elegante y capacidades de escalamiento necesarias para que las bases de datos y los servicios de almacenamiento funcionen correctamente.

  7. ¿Qué controladores de entrada ofrecen en Kubernetes?

    Los objetos de entrada permiten que las reglas de enrutamiento, la terminación TLS, la limitación de velocidad y otros comportamientos del servicio perimetral se especifiquen claramente de manera centralizada. Utilice la entrada administrada para la gestión del tráfico de producción.

  8. ¿Cómo programar de manera óptima los pods de Kubernetes?

    Las reglas de afinidad/antiafinidad permiten que pods sofisticados abarquen dominios de topología para lograr alta disponibilidad junto con pods que gravitan hacia nodos comunes.

  9. ¿Cómo se pueden admitir las configuraciones de Kubernetes?

    Se debe realizar una copia de seguridad externa de los componentes esenciales, como definiciones de clústeres, ConfigMaps/Secrets, instantáneas de PersistentVolume y bases de datos que se ejecutan internamente, como rutina para DR.

  10. ¿Qué mejores prácticas ayudan con el registro/monitoreo de Kubernetes?

    Tallos agregados centralmente. Visualice métricas de series temporales utilizando Prometheus y Grafana. La solicitud de rastreo pasa por Jaeger. Esta observabilidad es invaluable para Kubernetes.

Source link

Hi, I’m Corina Guzman

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *