Skip to main content

Desplegando Con Helm Chart

Para buscar charts, utiliza el repositorio predeterminado https://artifacthub.io/. Por ejemplo vamos a instalar el ingress controller de nginx.

nginxfind

Siempre observa si el repositorio es el oficial, la cantidad de estrellas, si es un repo que recibe actualizaciones, etc.

Entrando en este chart https://artifacthub.io/packages/helm/nginx/nginx-ingress y leyendo la documentación observamos que tenemos dos métodos de instalación. Podemos clonar el proyecto que generó el chart, para que podamos basándonos en este chart generar un subchart (un chart dependiente de otro) o podemos solamente seguir el flujo y añadir el repositorio. Vamos solo a hacer lo básico y añadir el repositorio con los comandos que él mismo mostró.

# nginx-stable es el nombre que vamos a dar al repositorio, pero podría ser cualquier otro
helm repo add nginx-stable https://helm.nginx.com/stable
# Es necesario actualizar para que Helm tenga conocimiento de los charts disponibles incluyendo el nuevo repositorio
helm repo update

Antes de instalar podemos observar que en este repositorio tenemos varios charts publicados.

❯ helm search repo nginx
NAME CHART VERSION APP VERSION DESCRIPTION
nginx-stable/nginx-appprotect-dos-arbitrator 0.1.0 1.1.0 NGINX App Protect Dos arbitrator
nginx-stable/nginx-devportal 1.3.1 1.3.1 A Helm chart for Kubernetes
# Mira aquí está
nginx-stable/nginx-ingress 0.15.2 2.4.2 NGINX Ingress Controller
nginx-stable/nginx-service-mesh 0.6.0 1.6.0 NGINX Service Mesh
nginx-stable/nms 1.0.0 1.0.0 A chart for installing the NGINX Management Suite
nginx-stable/nms-acm 1.3.1 1.3.1 A Helm chart for Kubernetes
nginx-stable/nms-hybrid 2.6.0 2.6.0 A Helm chart for Kubernetes

Si miramos la documentación del chart veremos que la instalación referencia ese mismo chart. El nombre del repositorio es nginx-stable y el chart es el nginx-ingress dentro de este repositorio.

Si ejecutamos la instalación con el método abajo, estaremos utilizando los valores ya disponibles en el archivo Values.yaml del propio chart.

helm install my-release nginx-stable/nginx-ingress

Puedes analizar el Values.yaml en la propia página del proyecto. Todo proyecto tiene un Values.yaml que puede ser alterado para ajustes más finos de acuerdo con tus intereses.

details detailsvalues

En algunos proyectos está habilitado y en otros no, pero con el comando helm show podemos ver esos valores predeterminados.

helm show values nginx-stable/nginx-ingress > /docs/kubernetes/helm/resources/Values.yaml

Echa un vistazo a ese archivo y mira lo que podríamos ajustar.

Para instalar el chart apuntando a un archivo de Values.yaml personalizado podemos utilizar el -f.

helm install nginx-ingress nginx-stable/nginx-ingress -f /docs/kubernetes/helm/resources/Values.yaml
#NAME: nginx-ingress
#LAST DEPLOYED: Mon Dec 26 01:20:59 2022
#NAMESPACE: default
#STATUS: deployed
#REVISION: 1
#TEST SUITE: None
#NOTES:
#The NGINX Ingress Controller has been installed.

También podríamos cambiar solamente un parámetro en el archivo de valores predeterminados solo referenciando la clave y el valor usando el --set.

Por ejemplo vamos a alterar de deployment a daemonset. La parte abajo es un corte del Values.yaml, mostrando lo que podríamos alterar.

  ## El tipo de instalación del Ingress Controller - deployment o daemonset.
kind: deployment

Ya que no estamos instalando, podemos hacer solamente un upgrade. Observa que la revisión va a subir, pues ya es la segunda vez que estamos aplicando. Hace esto para poder hacer el rollback si es necesario.

helm upgrade nginx-ingress --set kind=daemonset nginx-stable/nginx-ingress
#Release "nginx-ingress" has been upgraded. Happy Helming!
#NAME: nginx-ingress
#LAST DEPLOYED: Mon Dec 26 01:25:48 2022
#NAMESPACE: default
#STATUS: deployed
#REVISION: 2
#TEST SUITE: None
#NOTES:
#The NGINX Ingress Controller has been installed.

Eliminar también es muy simple.

helm uninstall nginx-ingress
#release "nginx-ingress" uninstalled

Como no definimos un namespace anteriormente en la instalación acabó siendo instalado en el namespace default. Vamos a aplicar nuevamente pasando el namespace deseado.

# --create-namespace creará si no existe el --namespace pasado
helm install nginx-ingress nginx-stable/nginx-ingress --values /docs/kubernetes/helm/resources/Values.yaml --create-namespace --namespace nginx-ingress
#NAME: nginx-ingress
#LAST DEPLOYED: Mon Dec 26 01:54:55 2022
#NAMESPACE: nginx-ingress
#STATUS: deployed
#REVISION: 1
#TEST SUITE: None
#NOTES:
#The NGINX Ingress Controller has been installed.

Siempre es bueno tener el Values.yaml definido para lo que fue aplicado y en el futuro usar gitops para control.

Para verificar lo que tenemos creado con helm.

helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
nginx-ingress nginx-ingress 1 2022-12-26 02:06:02.518055414 -0300 -03 deployed nginx-ingress-0.15.2 2.4.2