# Helm: Control de despliegues en Kubernetes **Índice** - [Helm: Control de despliegues en Kubernetes](#helm-control-de-despliegues-en-kubernetes) - [¿Qué es Helm?](#qué-es-helm) - [Instalación de Helm](#instalación-de-helm) - [Opciones del comando helm](#opciones-del-comando-helm) - [Crear una release](#crear-una-release) - [Apuntes más completos](#apuntes-más-completos) ## ¿Qué es Helm? [Helm](https://helm.sh/) es uno de los proyectos más interesantes dentro de la comunidad de Kubernetes. La idea de Helm es controlar un **despliegue** (lo llaman release) de tal forma que: - Usando un solo conjunto de valores (generalmente expresado en YAML): - Todos los artefactos que lo componen (deploys, pods, configmaps, services...) tienen reflejados los valores de configuración correctos. - Están declarados correctamente en el clúster K8s. - Ante un cambio de valores, se reconfiguran los artefactos correspondientes. - El release, con un solo comando, puede: - Listarse - Detenerse - Actualizarse - Reconfigurarse - Los releases parten de planes o [charts](https://github.com/helm/charts), es decir, repositorios con el código necesario para lanzar una aplicación en Kubernetes: - Se encuentran en repositorios públicos. - Los hay de todos los tipos (mysql, mongo, Wordpress...). - Se pueden descargar y utilizar o ampliar como queramos. ![Arquitectura Helm 3](https://vergaracarmona.es/wp-content/uploads/2022/12/helm-3-arquitectura.png) ## Instalación de Helm En nuestro ubuntu es muy sencillo. - Con snap: ```shell snap install helm --classic ``` - Con apt: ```shell curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https --yes echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm ``` **¡Nota! El binario está en /snap/bin/helm, si no está en la ruta, puede incluirlo o crear un enlace simbólico, por ejemplo, a /usr/sbin/helm.* En versiones anteriores era necesario inicializar helm para empezar a trabajar con él, pero en la versión 3 ya no es así. Si estamos usando una versión anterior, tendremos que lanzar el siguiente comando: ```shell helm init ``` **¡Nota! Si dice que las versiones son incompatibles, haga `helm init --upgrade`.* **¡Nota 2! helm puede tardar un minuto en ponerse en marcha. Espere hasta que pueda interactuar con él.* Ahora, podemos crear un release. ## Opciones del comando helm helm [comando] | comando | Descripción | | :--------: | ------------------------------------------------------------------------------------------------------- | | completion | Generar scripts de autocompletado para el shell especificado | | create | Crear un nuevo chart con el nombre indicado | | dependency | Gestionar las dependencias de un chart | | env | Información del entorno de cliente | | get | Descargar información ampliada de la release nombrada | | help | Ayuda sobre cualquier comando | | history | Obtener el historial de release | | install | Instalar una chart | | lint | Examinar posibles incidencias de una chart | | list | listar releases | | package | Empaquetar un directorio chart en un fichero chart | | plugin | Instalar (install), listar (list) o desinstalar (uninstall) plugins Helm | | pull | Descargar una chart de un repositorio y (opcional) desempaquetarlo en directorio local | | repo | Añadir (add), listar (list), borrar (remove), actualizar (update), e indexar (index) repositorios chart | | rollback | roll back un release a la revisión anterior | | search | Buscar keyword en las charts | | show | Mostrar información de una chart | | status | Mostrar el estado de una release nombrada | | template | Representar localmente templates | | test | Ejecutar pruebas a una release | | uninstall | desinstalar una release | | upgrade | Actualizar una release | | verify | verificar si una chart en una path ha sido firmada y validada | | version | Mostrar información de la version del cliente helm | ## Crear una release Para crear un release, descargue el **chart** o el plano o pídale a helm que lo descargue él mismo. Los charts están en repositorios. ```shell # listamos os repos helm repo list NAME URL local http://127.0.0.1:8879/charts # Engadimos o repo de bitnami, un dos máis utilizados helm repo add bitnami https://charts.bitnami.com "bitnami" has been added to your repositories # Listamos os charts dispoñibles helm search repo bitnami NAME CHART VERSION APP VERSION bitnami/airflow 13.0.4 2.3.3 Apache Airflow is a tool to express and execute... bitnami/apache 9.1.18 2.4.54 Apache HTTP Server is an open-source HTTP serve... bitnami/argo-cd 4.0.6 2.4.8 Argo CD is a continuous delivery tool for Kuber... ``` Podemos, por ejemplo, instalar un mariadb: ```shell helm install bbdd bitnami/mariadb ``` Para ver el release ```shell helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION bbdd default 1 2022-08-11 10:12:54.717064554 -0400 EDT deployed mariadb-11.1.7 10.6.8 ``` Si exploramos nuestro clúster: ```shell kubectl get pods NAME READY STATUS RESTARTS AGE bbdd-mariadb-0 1/1 Running 0 98s ``` También creó el servicio vinculado al pod, un secreto para password y un configmap. Es decir, ¡tenemos un MariaDB instalado con las mejores prácticas de la industria para Kubernetes! Para configurarlo hay que ir a [artifacthub](https://artifacthub.io/packages/helm/bitnami/mariadb), donde nos indican los valores a modificar para gestionar nuestra instalación. Ponga esos valores en un archivo yaml: ```yaml # values.yaml db: username: paco password: segredo database: test ``` Ahora estamos relanzando nuestro release: ```shell # borramos a release helm uninstall bbdd # relanzamos cos values helm install maria -f values.yaml bitnami/mariadb ``` Y tendríamos el deployment con una base de datos creada y un usuario vinculado a ella. ## Apuntes más completos El siguiente documento contiene los apuntes tomados en el curso «[Helm 3: Despliega aplicaciones en Kubernetes](https://www.udemy.com/course/helm-3-despliega-aplicaciones-en-kubernetes/)» impartido por [Apasoft Training](https://www.linkedin.com/in/apasoft-training-b38b36134/) en diciembre de 2022. El curso udemy consta de 5 horas aproximadamente de vídeo-tutoriales. Las prácticas aquí contenidas tuvieron una duración de alrededor de unas 12 horas. [Apuntes del Curso Helm - Diciembre 2022](https://vergaracarmona.es/wp-content/uploads/2022/12/Curso_Helm_vergaracarmona.es_.pdf) --- Puedes seguir con la guía [06 K9s: Otro estilo de CLI para k8s](06-k9s.md). Todas las guías: - [01 Instalación kubctl](01-kubectl.md) - [02 Clústers](02-clusters.md) - [03 manifiestos](03-manifiestos.md) - [04 Cheatsheet kubernetes](04-cheatsheet.md) - [05 Helm: Control de despliegues en Kubernetes](05-helm.md) - [06 K9s: Otro estilo de CLI para k8s](06-k9s.md)