Skaffold | ¿Qué es y cómo impulsa los desarrollos?
Explica: Yasniel Fajardo, Expert FullStack developer
Crear, enviar y desplegar tus aplicaciones de forma más optimizada es posible gracias a la herramienta Skaffold.
Todo desarrollador busca lograr que sus flujos de trabajo sean mucho más ágiles y optimizados; para lograrlo existe una herramienta fantástica y muy poco aprovechada, Skaffold.
¿Qué es Skaffold?
Para que puedas comprender todo lo que deseo contarte en este artículo, te comparto una serie de puntos claves que marcan la definición de esta herramienta:
- Skaffold gestiona el flujo de trabajo de creación, envío y despliegue de su aplicación, lo que le permite centrarse en lo más importante: escribir código.
- Rápido, Repetible y Sencillo. Desarrollo local de Kubernetes.
- Fue creada por Google y lanzada en agosto de 2017.
Antes de continuar, me gustaría compartirte los desafíos que he observado en el desarrollo de diferentes tipos de proyectos sin implementar dicha aplicación.
Experiencia de desarrollo en proyectos Monolíticos:
En este tipo de proyectos, los desarrolladores a menudo encuentran una mayor facilidad de desarrollo y depuración en comparación con arquitecturas más complejas. Esto se debe a la naturaleza centralizada y cohesiva de los sistemas monolíticos.
Experiencia de desarrollo con Microlitos:
En proyectos de arquitectura de microlitos, los desarrolladores enfrentan una serie de desafíos específicos en términos de complejidad de desarrollo y depuración. Los microlitos son sistemas distribuidos compuestos por múltiples servicios interconectados.
Experiencia de desarrollo con Microservicios:
En proyectos que utilizan la arquitectura de microservicios y eventos, los desarrolladores enfrentan desafíos particulares en términos de complejidad de desarrollo y depuración. Esta combinación de arquitectura distribuida y patrones de eventos introduce ciertas complejidades adicionales.
Comprendiendo todas estas complejidades, continuemos con lo que te ha traído a este artículo. Profundizar más sobre esta herramienta e impulsar tus desarrollos a nuevos niveles.
El que creo Skaffold:
La genialidad detrás de Skaffold radica en su enfoque en agilizar y simplificar el ciclo de vida de desarrollo y despliegue de aplicaciones en un entorno moderno y altamente escalable.
Google creó Skaffold para abordar varios desafíos comunes que enfrentan los equipos de desarrollo al trabajar con contenedores y Kubernetes:
- Rápido Ciclo de Retroalimentación: En entornos de desarrollo modernos, es crucial recibir retroalimentación rápidamente sobre los cambios de código. Skaffold automatiza el proceso de construcción y despliegue, lo que permite a los desarrolladores ver rápidamente los resultados de sus modificaciones sin tener que realizar pasos manuales complejos.
- Automatización de Tareas: Skaffold automatiza muchas tareas que de otro modo serían repetitivas y propensas a errores, como la construcción de imágenes de contenedor, la implementación en clústeres Kubernetes y la actualización de recursos.
- Integración con Herramientas de Desarrollo: Skaffold se integra con herramientas comunes de desarrollo, como herramientas de control de versiones y sistemas de compilación. Esto facilita la incorporación de Skaffold en los flujos de trabajo existentes como el CI/CD.
- Portabilidad y Consistencia: Al proporcionar un flujo de trabajo estandarizado para el desarrollo y despliegue, Skaffold ayuda a garantizar que las aplicaciones se comporten de manera consistente en diferentes entornos, desde el entorno local del desarrollador hasta el entorno de producción en Kubernetes.
- Desarrollo Local con Kubernetes: Skaffold permite a los desarrolladores ejecutar aplicaciones en su propio entorno de Kubernetes local, lo que facilita la replicación de entornos de producción y la detección temprana de problemas.
- Adopción de Kubernetes: Al facilitar la adopción y el uso de Kubernetes para el desarrollo y despliegue, Skaffold puede ayudar a las organizaciones a aprovechar los beneficios de la orquestación de contenedores.
Ejemplo:
Imagina que tienes una arquitectura de microservicios con un ingress load balancer y un bff para no exponer todos los servicios, por otra parte cuentas con service1 y service2 los cuales serían tus servicios, como se ve en la imagen:
Dentro de la infraestructura de k8s podrías tener configuraciones básicas de deployments y servicios de ClusterIP para la comunicación en el cluster, uno por cada servicio, como se en el ejemplo a continuación:
Si ya tienes toda la infraestructura de microservicios podrías arrancar con la configuración de Skaffold para correr los microservicios en algún cluster de k8s que tengas en local o en algún proveedor cloud como GCP o AWS.
Arrancas definiendo los artefactos por cada microservicio, el contexto que no es más que la carpeta donde estaría el proyecto del microservicio, la ubicación del Dockerfile, y la configuración de “sync” la cual es para que sepas qué archivos se quedaría Skaffold escuchando cambios y así refrescar en tiempo real.
Conclusiones:
Con todas las ventajas que podemos tener con Skaffold, los tiempos de entrega de nuevas features en proyectos grandes, con varios microservicios, sería reducido considerablemente, ya que puedes tener ambientes absolutamente controlados y similares a producción, viendo los cambios de todos los proyectos reflejados en segundos, mejorando la experiencia de desarrollo y el debug de errores.
Además de la posibilidad de adaptación de Skaffold al proceso de CI/CD y la ejecución de test de nuestras imágenes para garantizar la fiabilidad y consistencia.
Con Skaffold garantizamos el feedback temprano, reducción de errores, la retroalimentación continua y por tanto un ahorro de tiempo y dinero a fin de cuentas, por lo que es una herramienta que deberías levantar y considerar si quieres garantizar que tu proyecto perdure mucho tiempo.