Guia-Tutorial-kubernetes/guias/05-helm.md
Manuel Vergara fbe7d8883c Update guía Helm
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
2022-12-07 20:30:57 +01:00

9.0 KiB

Helm: Control de despliegues en Kubernetes

Índice

¿Qué es Helm?

Helm 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, 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

Instalación de Helm

En nuestro ubuntu es muy sencillo.

  • Con snap:
snap install helm --classic
  • Con apt:
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:

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.

# 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:

helm install bbdd bitnami/mariadb

Para ver el release

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:

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, donde nos indican los valores a modificar para gestionar nuestra instalación.

Ponga esos valores en un archivo yaml:

# values.yaml
db:
  username: paco
  password: segredo
  database: test

Ahora estamos relanzando nuestro release:

# 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» impartido por Apasoft Training 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


Puedes seguir con la guía 06 K9s: Otro estilo de CLI para k8s.

Todas las guías: