10.2 Gestión de charts y despliegue de aplicaciones

Como hemos visto anteriormente, por defecto, tenemos instalado un repositorio:

helm repo list
NAME  	URL                          
stable	https://charts.helm.sh/stable

Podemos buscar más repositorios de charts buscando en la página Artifact Hub, por ejemplo podemos añadir el repositorio de charts de Bitnami de la siguiente manera:

helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

Y podemos comprobar que hemos añadido un nuevo repositorio:

helm repo list
NAME   	URL                               
stable 	https://charts.helm.sh/stable     
bitnami	https://charts.bitnami.com/bitnami

Si queremos actualizar la lista de charts ofrecidos por los repositorios:

helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈

Buscar charts

Como hemos comentado anteriormente, los charts los podemos buscar en la página Artifact Hub o los podemos buscar desde la línea de comandos, por ejemplo si queremos buscar un chart relacionado con nginx:

helm search repo nginx
NAME                            	CHART VERSION	APP VERSION	DESCRIPTION                                       
bitnami/nginx                   	9.3.0        	1.21.0     	Chart for the nginx server                        
bitnami/nginx-ingress-controller	7.6.12       	0.47.0     	Chart for the nginx Ingress controller            
stable/nginx-ingress            	1.41.3       	v0.34.1    	DEPRECATED! An nginx Ingress controller that us...
stable/nginx-ldapauth-proxy     	0.1.6        	1.13.5     	DEPRECATED - nginx proxy with ldapauth            
...

Para obtener información sobre el chart bitnami/nginx podemos buscar en Artifact Hub.

Todos los ficheros yaml que forman parte de un chart están parametrizados, es decir cada propiedad tiene un valor por defecto, pero a la hora de instalarlo se puede cambiar. Por ejemplo, ¿qué tipo de Service se creará al instalar el chart bitnami/nginx? Por defecto, el parámetro service.type tiene como valor LoadBalancer, pero si queremos un Service de tipo NodePort, podremos redefinir este parámetro a la hora de instalar el chart.

¿Y cómo sabemos los parámetros que tiene definido cada chart y sus valores por defecto?. Estudiando la documentación del chart en Artifact Hub. En concreto para el chart con el que estamos trabajando, accediendo a la url https://artifacthub.io/packages/helm/bitnami/nginx. También podemos obtener esta información ejecutando el siguiente comando:

helm show all bitnami/nginx

Instalación del chart

Para instalar el chart ejecutamos la siguiente instrucción:

helm install serverweb bitnami/nginx --set service.type=NodePort

Como vemos hemos nombrado el chart desplegado (serverweb), indicado el chart (bitnami/nginx) y, en este caso, hemos redefinido el parámetro service.type.

Cuando se despliega el chart se nos ofrece información que nos muestra cómo acceder a la aplicación:

NOTES:
** Please be patient while the chart is being deployed **

NGINX can be accessed through the following DNS name from within your cluster:

    serverweb-nginx.default.svc.cluster.local (port 80)

To access NGINX from outside the cluster, follow the steps below:

1. Get the NGINX URL by running these commands:

    export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services serverweb-nginx)
    export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
    echo "http://${NODE_IP}:${NODE_PORT}"

Si queremos acceder a la aplicación desde el exterior debemos ejecutar las tres últimas instrucciones, que nos muestran la ip de nuestro cluster y el puerto asignado al Service NodePort.

Siempre podemos volver a ver esta información ejecutando la siguiente instrucción:

helm status serverweb

Podemos comprobar los Deployments que hemos realizado con Helm, ejecutando:

helm ls
NAME     	NAMESPACE	REVISION	UPDATED                                 	STATUS  	CHART      	APP VERSION
serverweb	default  	1       	2021-06-29 19:11:15.975016119 +0200 CEST	deployed	nginx-9.3.0	1.21.0   

Y podemos comprobar también los recursos que se han creado en el cluster:

kubectl get all
NAME                                   READY   STATUS    RESTARTS   AGE
pod/serverweb-nginx-7b7f75d476-kxq8j   1/1     Running   0          56s

NAME                      TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes        ClusterIP   10.96.0.1      <none>        443/TCP        5m14s
service/serverweb-nginx   NodePort    10.99.80.141   <none>        80:30137/TCP   56s

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/serverweb-nginx   1/1     1            1           56s

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/serverweb-nginx-7b7f75d476   1         1         1       56s

Por último, para desinstalar una aplicación completa, ejecutamos:

helm delete serverweb
release "serverweb" uninstalled

Aunque no entra en el ámbito de este curso, hay que indicar que si nosotros desarrollamos una aplicación podemos empaquetarla para instalarla con Helm, creando nuestros propios charts. Para más información puedes entrar en la documentación oficial.