Por qué debería usar Kubernetes para sus entornos de desarrollo

Kubernetes se ha convertido en una de las formas más populares de ejecutar cargas de trabajo en contenedores en producción. Simplifica la implementación, el escalado y el mantenimiento de los contenedores que ejecutan su servicio.

Podría decirse que Kubernetes ha tenido menos impacto en el ámbito del desarrollo local. Es común que los desarrolladores construyan y prueben nuevos servicios utilizando contenedores Docker simples, tal vez organizados en pilas con Docker Compose. Ejecutar un clúster local de Kubernetes a menudo se considera una capa adicional de complejidad y gastos generales.

En este artículo, exploraremos algunas de las razones por las que debería usar Kubernetes para el desarrollo local, así como en sus entornos de ensayo y producción. También veremos algunas de las herramientas que puede usar para implementar un flujo de trabajo de desarrollo local de Kubernetes.

Índice de contenidos
  1. ¿Qué hace un buen entorno de desarrollo?
  2. Cómo ayudan los clústeres de desarrollo de Kubernetes
  3. Acortar el ciclo de retroalimentación
  4. Reducir la brecha con las operaciones
  5. Configuración de un entorno local de Kubernetes
  6. Las limitaciones
  7. Conclusión

¿Qué hace un buen entorno de desarrollo?

Los entornos de desarrollo local efectivos deben imitar de cerca la infraestructura de producción al tiempo que ofrecen un ciclo de retroalimentación ajustado que permite una iteración rápida. Estos dos objetivos se encuentran en extremos opuestos de un espectro. Deben equilibrarse para lograr el máximo rendimiento.

Por un lado, la optimización para la máxima replicación de la producción le brindará la mayor posibilidad de eliminar errores específicos del entorno. Sin embargo, la implementación en una infraestructura similar a la producción real podría ser un proceso lento que requiere la ejecución de una canalización de CI y el aprovisionamiento de nuevos recursos en la nube. Esperar a que se completen estos procedimientos después de cada cambio ralentizaría el desarrollo.

Por el contrario, centrarse solo en la velocidad de iteración puede hacer que el desarrollo se desvíe de cómo funciona la producción. Esto puede hacer que los usuarios experimenten problemas que el equipo de ingeniería nunca encuentra.

Cómo ayudan los clústeres de desarrollo de Kubernetes

La contenedorización ya es una tecnología poderosa para equilibrar la similitud del entorno de producción con la facilidad de iteración. La ejecución de contenedores tanto en desarrollo como en producción garantiza que el entorno de la aplicación y su sistema de archivos sean consistentes cada vez que se implementan.

El uso de Kubernetes en producción agrega una nueva tecnología a su pila. Aporta sus propios conceptos, mejores prácticas y posibles incompatibilidades. Aunque los contenedores individuales siguen siendo los mismos, tiene una capa adicional que maneja el tráfico entrante, las redes entre servicios y las preocupaciones periféricas, como la configuración y el almacenamiento.

La ejecución de su entorno de desarrollo en Kubernetes le permite replicar estas diferencias a medida que crea su solución. Es posible que un clúster que se ejecuta en su máquina local aún no replique exactamente su infraestructura de producción, pero será una coincidencia más cercana. Esto hace que las pruebas sean más realistas y reduce el número de puntos ciegos.

Acortar el ciclo de retroalimentación

Kubernetes en desarrollo acorta el ciclo de retroalimentación de la iteración. Este es uno de los aspectos de una buena experiencia de desarrollo descrito anteriormente.

Podrá replicar mejor los informes de problemas de los usuarios cuando su entorno de prueba ejecute las mismas tecnologías que la producción. Significa que puede experimentar, iterar y depurar sin implementar en un entorno real cada vez que realiza un cambio.

Los efectos de cada revisión se pueden observar rápidamente en su clúster local de Kubernetes, lo que permite un mayor rendimiento. Los desarrolladores pueden probar teorías rápidamente y evaluar nuevas soluciones, incluso si el problema radica en algo específico de Kubernetes, como las conexiones entre servicios. Esto no sería posible si Kubernetes estuviera reservado para uso de producción.

Reducir la brecha con las operaciones

El uso de Kubernetes como herramienta de desarrollo reduce la brecha entre la ingeniería y las operaciones. Los desarrolladores obtienen experiencia de primera mano sobre las herramientas y los conceptos que utiliza el equipo de operaciones para mantener las cargas de trabajo de producción.

La conciencia del panorama general puede ayudar a los desarrolladores a evitar problemas en la producción. También obtendrán una comprensión de los desafíos asociados con la operación del servicio. Si los operadores sufren de registros y métricas incompletos o difíciles de recuperar, los desarrolladores ahora también encontrarán el problema como parte de su propio trabajo.

Configuración de un entorno local de Kubernetes

Tiene varias opciones para configurar un clúster de Kubernetes para uso de desarrollo. Un enfoque es crear un nuevo clúster en su entorno de nube existente. Esto proporciona la mejor consistencia con su infraestructura de producción. Sin embargo, puede reducir la eficiencia ya que sus operaciones de desarrollo se ejecutarán en un entorno remoto.

Los desarrolladores a menudo prefieren ejecutar su propio clúster localmente para mejorar la facilidad de uso. Proyectos como Minikube y MicroK8s simplifican la implementación de clústeres de Kubernetes en su propio hardware. Como ejemplo, puede iniciar un clúster MicroK8s desde su paquete Snap ejecutando un solo comando:

$ sudo snap install microk8s --classic

Una vez que MicroK8s se haya iniciado, puede interactuar con su clúster utilizando la versión incluida de Kubectl:

$ sudo microk8s kubectl apply -f my-pod.yaml

Es posible que Kubernetes ya esté disponible en su plataforma de contenedores. Docker Desktop para Windows y Mac incluye un clúster de Kubernetes incorporado que puede activar dentro de la configuración de la aplicación. Rancher Desktop es otra utilidad que combina la gestión de contenedores simples con un clúster de Kubernetes integrado.

Independientemente de la solución que utilice, debe configurar su clúster para que coincida lo más posible con su entorno de producción. Utilice siempre la misma versión de Kubernetes para evitar incompatibilidades inesperadas y versiones de API que no coincidan.

Las limitaciones

Los entornos de desarrollo siempre diferirán de los de producción en algunos aspectos. Eso está bien siempre y cuando las discrepancias sean reconocidas y entendidas.

Cuando ejecuta Kubernetes en todos sus entornos, lo más probable es que encuentre estas limitaciones:

  • Recursos limitados - La mayoría de los clústeres de desarrollo se ejecutarán localmente, en una sola máquina. Un clúster de producción podría abarcar docenas de nodos y admitir cientos o miles de pods. Esto puede dificultar medir con precisión qué tan bien se escala su aplicación.
  • discrepancias de configuración - Cuando cada desarrollador aprovisiona su propio clúster, puede cambiar la configuración para que se comporte de manera diferente a otros entornos. Es importante estandarizar en una sola distribución, como Minikube o MicroK8s, y una versión específica de Kubernetes para evitar estos problemas.
  • Diferencias de proveedores - Las implementaciones locales de Kubernetes, como Minikube y MicroK8s, tienen algunas diferencias inherentes en comparación con los clústeres en la nube implementados por proveedores como Amazon EKS, Azure AKS y Google GKE. Las integraciones de almacenamiento y redes funcionan de manera diferente entre los proveedores, por lo que aún existe la posibilidad de que surjan incompatibilidades.
  • Complejidad y curva de aprendizaje - El uso de Kubernetes en el desarrollo agrega una complejidad inevitable. Aunque mostramos los beneficios del enfoque, también es importante reconocer la carga que se impone a los desarrolladores, en particular a los recién llegados a un equipo, cuando tienen que aprender Kubernetes y mantenerse actualizados en su cadencia de lanzamiento regular.

La mayoría de los problemas anteriores se pueden resolver proporcionando un clúster de desarrollo interno administrado de forma centralizada por un administrador de DevOps. Puede usar los espacios de nombres de Kubernetes y los controles RBAC para configurar áreas aisladas para que trabaje cada desarrollador. Si bien esto garantiza la estandarización de la distribución, la versión y la disponibilidad de recursos de Kubernetes, puede reducir la autonomía de los desarrolladores, ya que ya no son dueños de su clúster. También puede crear cuellos de botella cuando muchos ingenieros esperan que se implementen nuevos cambios dentro del clúster compartido.

Conclusión

El uso de Kubernetes en el desarrollo le permite probar el software en un entorno equivalente al de ensayo y producción. Esto puede ayudarlo a detectar problemas antes, antes de que los usuarios los encuentren. La adopción de Kubernetes como herramienta de desarrollo también brinda a los ingenieros familiaridad con la forma en que su aplicación se implementa en producción.

Cambiar a Kubernetes puede parecer desalentador. Una buena comprensión de los fundamentos de los contenedores lo ayudará a comprender qué agrega Kubernetes y cómo funciona. Ahora hay varias buenas opciones para implementar un clúster local de Kubernetes en una estación de trabajo de desarrollo. El uso de este tipo de solución significa que no necesita esperar a que las implementaciones de prueba se implementen en la infraestructura remota.

Las herramientas que mejoran la consistencia a través del proceso de desarrollo de software benefician a todos los involucrados. Ya hemos visto esto en los cimientos del movimiento de contenedores y la adopción generalizada de Docker. Ejecutar un clúster local de Kubernetes le permite desarrollarse más cerca de la producción, acortar los ciclos de retroalimentación y mejorar la colaboración entre equipos.

Descubre más contenido

Subir Change privacy settings