Uso de werf para desplegar gráficos complejos de Helm



El artículo está dedicado al desarrollo de gráficos Helm para Kubernetes utilizando soluciones listas para usar de los repositorios de gráficos. Con este enfoque, el usuario aplica recetas de la comunidad o las suyas propias, asegurando la actualización oportuna de los componentes estándar de todos sus proyectos y la conveniencia de mantener soluciones en general.

Esta característica conveniente ahora está integrada en nuestra utilidad werf GitOps, que debería simplificar todo el proceso de operación de la infraestructura para aplicaciones ensambladas y desplegadas en Kubernetes.

Casco incorporado


Quizás el principal éxito de Helm, el "administrador de paquetes para Kubernetes", se asocie no tanto con su funcionalidad como con el repositorio oficial de gráficos y el soporte para repositorios en general. Las recetas y la configuración de los gráficos están acompañadas por una gran comunidad. Los especialistas respaldan las soluciones actualizadas que requieren los usuarios finales. Cada gráfico del repositorio oficial está estandarizado y bien documentado.

En casos triviales, el usuario ni siquiera necesita crear un gráfico para implementar la aplicación: solo encuentra una solución preparada, lee la documentación, prepara la configuración y utiliza el gráfico oficial.

Durante mucho tiempo, hemos estado utilizando Helm dentro de werf para implementar la infraestructura de la aplicación y ahora vamos más allá. A partir de la versión v1.0.4-alpha.10 , los comandos para trabajar con dependencias y repositorios de gráficos se han agregado a werf para abandonar completamente el cliente Helm.

Los principales comandos para esto:

  • werf helm repo

     add Add a chart repository fetch Download a chart from a repository and (optionally) unpack it in local directory init Init default chart repositories configuration list List chart repositories remove Remove a chart repository search Search for a keyword in charts update Update information of available charts locally from chart repositories 
  • werf helm dependency

     build Rebuild the charts/ directory based on the requirements.lock file list List the dependencies update Update charts/ based on the contents of requirements.yaml 

Además, se ha agregado soporte para referencia de gráfico al werf helm deploy-chart .

Y así es como se ve toda esta magia en acción: más precisamente, aquí mostramos una comparación del despliegue del mismo gráfico en werf (izquierda) y en Helm (derecha):

imagen

Más práctica


Volviendo a la conveniencia de usar soluciones listas para implementar aplicaciones completas, un ejemplo común con WordPress . La implementación de su tabla Helm en el clúster de Kubernetes usando werf podría verse así:

 $ cat << EOF > values.yaml wordpressBlogName: flant wordpressUsername: admin wordpressPassword: password mariadb: mariadbRootPassword: password EOF $ werf helm deploy-chart --values values.yaml stable/wordpress my-web-app 

Demostración en asciicinema .

Dado que los repositorios contienen muchas soluciones , puede crear sus propias aplicaciones a partir de ellos como cubos, donde los cubos serán los diversos gráficos Helm de los que depende todo el sistema. Lo más probable es que solo necesite configurar adecuadamente los componentes según sus necesidades.

Por ejemplo, una aplicación web requiere una cola, caché y almacenamiento de datos. ¿Cómo desplegamos estos componentes a través de werf?

Para comenzar, agilicemos la búsqueda de todo lo que necesita usando la CLI:

 $ werf helm repo search queue NAME CHART VERSION APP VERSION DESCRIPTION stable/rabbitmq 6.4.1 3.7.17 Open source message broker software that implements the A... stable/rabbitmq-ha 1.31.0 3.7.15 Highly available RabbitMQ cluster, the open source messag... 

Por analogía, encontraremos los componentes restantes para todos los repositorios de gráficos registrados (la lista de repositorios usados ​​se puede ver ejecutando el werf helm repo list ).

Después de encontrar todo, solo queda agregarlos al gráfico. Hay varias formas de hacer esto: agregue gráficos de componentes al directorio de gráficos o cree un archivo werf helm dependency build|list|update y describa las dependencias, y luego interactúe con ellas usando werf helm dependency build|list|update especiales de werf helm dependency build|list|update .

Ilustración del segundo camino:

 $ cat << EOF > .helm/requirements.yaml dependencies: - name: mysql version: 0.3.4 repository: "@stable" - name: redis version: 1.1.11 repository: "@stable" - name: rabbitmq version: 0.6.16 repository: "@stable" EOF $ werf helm dependency build $ werf deploy --env test 

Demostración en asciicinema .

Durante el proceso de implementación, werf creará todas las dependencias y las rastreará junto con el resto de los recursos; no se requieren acciones adicionales.

Como resultado, teniendo en cuenta la experiencia de la comunidad con experiencia, ahorrará significativamente tiempo en el desarrollo y mantenimiento de gráficos. Sin embargo, nadie lo restringe a usar gráficos públicos: puede desplegar sus gráficos con el mismo éxito, cuya configuración se prepara teniendo en cuenta los detalles necesarios.

Aquí se presenta la documentación sobre los comandos de repositorio y dependencia en werf. También puede estar interesado en leer la documentación para obtener más detalles sobre la implementación de werf y las principales diferencias con respecto a Helm .

Conclusión


La ausencia de características críticas para nosotros en las soluciones de código abierto existentes nos obliga a crear las capacidades, enlaces e integración correspondientes. El proyecto werf fue creado y apoyado, en primer lugar, para resolver las tareas cotidianas de nuestros ingenieros de DevOps.

Como ejemplo, hemos estado trabajando durante mucho tiempo (¡segundo año!) Para que nuestra propuesta de seguimiento de recursos en Helm sea aceptada como un modo alternativo en la base del código principal del proyecto (upstream). La comunidad aceptó y apoyó la idea, como Muchos necesitan esta oportunidad. Sin embargo, el progreso en esta dirección comenzó en Helm 3 y solo ahora ...

Hasta ahora, la implementación de esta idea en Helm ha sido prácticamente bloqueada por los desarrolladores. Sin embargo, durante este tiempo hemos desarrollado las funciones correspondientes para el seguimiento de recursos en una biblioteca de código abierto separada, kubedog , y ya la estamos utilizando en werf. Y a juzgar por la actividad en GitHub, la biblioteca encontró interés entre otros usuarios de Kubernetes / Helm, lo cual es muy agradable.

Puede apoyar nuestra idea (e implementación) colocando una estrella en el proyecto kubedog en GitHub y / o aprobado en el número original de Helm. Gracias

PS


Lea también en nuestro blog:

Source: https://habr.com/ru/post/468049/


All Articles