Introducción

Helm es un administrador de paquetes para Kubernetes que permite a los desarrolladores y operadores configurar e implementar de forma más sencilla aplicaciones en los clústeres de Kubernetes.

En este tutorial, configuraremos Helm y lo utilizaremos para instalar, volver a configurar, restaurar y luego borrar una instancia de la aplicación Kubernetes Dashboard. El panel es una GUI de Kubernetes oficial basado en la web.

Para obtener una descripción general conceptual de Helm y su ecosistema de paquetes, lea nuestro artículo _Introducción a Helm._

Requisitos previos

con illustration for: Requisitos previos

Para este tutorial, necesitará lo siguiente:

  • Un clúster de Kubernetes 1.8, o versiones posteriores, con control de acceso basado en roles (RBAC) habilitado.
  • La herramienta de línea de comandos kubectl instalada en su equipo local, configurada para conectarse a su clúster. Puede leer más sobre la instalación de kubectl en la documentación oficial.

Puede probar su conectividad con el siguiente comando:

				
					
 kubectl cluster-info

				
			

Si no ve errores, estará conectado al clúster. Si accede a varios clústeres con kubectl, asegúrese de verificar que haya seleccionado el contexto de clúster correcto:

				
					
 kubectl config get-contexts

				
			
				
					
 [secondary_label Output]

 CURRENT NAME CLUSTER AUTHINFO NAMESPACE

 <^>*<^> do-nyc1-k8s-example do-nyc1-k8s-example do-nyc1-k8s-example-admin

 docker-for-desktop docker-for-desktop-cluster docker-for-desktop

				
			

En este ejemplo, el asterisco (<^>*^>) indica que estamos conectados al clúster do-nyc1-k8s-example. Para cambiar de clústeres ejecute:

				
					
 kubectl config use-context &lt;^&gt;context-name&lt;^&gt;

				
			

Cuando esté conectado al clúster correcto, continúe con el paso 1 para comenzar a instalar Helm.

Paso 1: Instalar Helm

Primero, instalaremos la utilidad de línea de comandos helm en nuestro equipo local. Helm proporciona una secuencia de comandos que gestiona el proceso de instalación en MacOS, Windows o Linux.

Pase a un directorio editable y descargue la secuencia de comandos del repositorio de GitHub de Helm:

				
					
cd /tmp

curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get &gt; install-helm.sh

				
			

Haga que la secuencia de comandos sea ejecutable con chmod:

				
					
chmod u+x install-helm.sh

				
			

En este punto, puede utilizar su editor de texto favorito para abrir la secuencia de comandos e inspeccionarla a fin de asegurarse de que sea segura. Cuando esté satisfecho, ejecútela:

				
					
./install-helm.sh

				
			

Es posible que se le solicite la contraseña. Ingrésela y presione ENTER.

				
					
[secondary_label Output]

helm installed into /usr/local/bin/helm

Run 'helm init' to configure helm.

				
			

A continuación, terminaremos la instalación agregando algunos componentes de Helm a nuestro clúster.

Paso 2: Instalar Tiller

Tiller es un complemento del comando helm que se ejecuta en su clúster, recibe comandos de helm y se comunica directamente con la API de Kubernetes para hacer el verdadero trabajo de crear y eliminar recursos. A fin de proporcionar a Tiller los permisos que necesita para ejecutarse en el clúster, crearemos un recurso serviceaccount de Kubernetes.

Nota: Vincularemos serviceaccount al rol de clúster de cluster-admin. Esto permitirá que el superusuario del servicio de tiller acceda al clúster e instale todos los tipos de recursos en todos los espacios de nombres. Esto es adecuado para explorar Helm, pero es posible que desee una configuración más restringida para un clúster de Kubernetes de producción.

Consulte la documentación oficial del RBAC de Helm para obtener más información sobre diferentes configuraciones del RBAC para Tiller.

Cree la serviceaccount de tiller:

				
					
kubectl -n kube-system create serviceaccount tiller

				
			

A continuación, vincule la serviceaccount de tiller al rol cluster-admin:

				
					
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

				
			

Ahora podemos ejecutar helm init, que instala Tiller en nuestro clúster, junto con algunas tareas de mantenimiento locales, como la descarga de información del repositorio stable:

				
					
helm init --service-account tiller

				
			
				
					
[secondary_label Output]

. . .



Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.



Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.

For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation

Happy Helming!

				
			

Para verificar que Tiller esté en ejecución, enumere los pods en el espacio de nombres de kube-system:

				
					
kubectl get pods --namespace kube-system

				
			
				
					
[secondary_label Output]

NAME READY STATUS RESTARTS AGE

. . .

kube-dns-64f766c69c-rm9tz 3/3 Running 0 22m

kube-proxy-worker-5884 1/1 Running 1 21m

kube-proxy-worker-5885 1/1 Running 1 21m

kubernetes-dashboard-7dd4fc69c8-c4gwk 1/1 Running 0 22m

&lt;^&gt;tiller-deploy-5c688d5f9b-lccsk 1/1 Running 0 40s&lt;^&gt;

				
			

El nombre del pod de Tiller comienza con el prefijo tiller-deploy-.

Ahora que instalamos ambos componentes de Helm, estamos listos para usar helm en la instalación de nuestra primera aplicación.

Paso 3: Instalar un chart de Helm

Los paquetes de software de Helm se llaman _charts_. Helm viene preconfigurado con un repositorio seleccionado de charts llamado stable. Puede explorar los charts disponibles en el repositorio de GitHub asignado a ellos. Instalaremos Kubernetes Dashboard a modo de ejemplo.

Utilice helm para instalar el paquete kubernetes-dashboard desde el repositorio stable:

				
					
helm install stable/kubernetes-dashboard --name dashboard-demo

				
			
				
					
[secondary_label Output]

NAME: &lt;^&gt;dashboard-demo&lt;^&gt;

LAST DEPLOYED: Wed Aug 8 20:11:07 2018

NAMESPACE: default

STATUS: DEPLOYED



. . .

				
			

Observe la línea de NAME, resaltada en el resultado del ejemplo anterior. En este caso, especificamos el nombre dashboard-demo. Este es el nombre de nuestra _versión_. Una _versión_ de Helm es una única implementación de un chart con una configuración específica. Puede implementar varias versiones del mismo chart, cada una con su propia configuración.

Si no especifica su propio nombre de versión usando --name, Helm creará por usted un nombre al azar.

Podemos solicitar a Helm una lista de versiones en este clúster:

				
					
helm list

				
			
				
					
[secondary_label Output]

NAME 	REVISION	UPDATED 	STATUS 	CHART 	NAMESPACE

&lt;^&gt;dashboard-demo&lt;^&gt;	1 	Wed Aug 8 20:11:11 2018	DEPLOYED	kubernetes-dashboard-0.7.1	default

				
			

Ahora podemos usar kubectl para verificar que se haya implementado un nuevo servicio en el clúster:

				
					
kubectl get services

				
			
				
					
[secondary_label Output]

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

&lt;^&gt;dashboard-demo-kubernetes-dashboard ClusterIP 10.32.104.73 &lt;none&gt; 443/TCP 51s&lt;^&gt;

kubernetes ClusterIP 10.32.0.1 &lt;none&gt; 443/TCP 34m

				
			

Tenga en cuenta que por defecto el nombre de servicio correspondiente a nuestra versión es una combinación del nombre de versión de Helm y el nombre del chart.

Ahora que implementamos la aplicación, utilicemos Helm para cambiar su configuración y actualizar la implementación.

Paso 4: Actualizar una versión

El comando helm upgrade puede utilizarse para actualizar una versión con un chart nuevo o actualizado, o para actualizar las opciones de configuración de este mismo.

Haremos un cambio sencillo en nuestra versión de dashboard-demo para demostrar el proceso de actualización y reversión: actualizaremos el nombre del servicio de panel simplemente a dashboard, en lugar de dashboard-demo-kubernetes-dashboard​​​​​​.

El chart kubernetes-dashboard proporciona una opción de configuración de fullnameOverride para controlar el nombre de servicio. Ejecutaremos helm upgrade con este conjunto de opciones:

				
					
helm upgrade &lt;^&gt;dashboard-demo&lt;^&gt; stable/kubernetes-dashboard &lt;^&gt;--set fullnameOverride="dashboard"&lt;^&gt;

				
			

Visualizará un resultado similar al del paso inicial de ​​​​​​helm install.

Verifique si sus servicios de Kubernetes reflejan los valores actualizados:

				
					
kubectl get services

				
			
				
					
[secondary_label Output]

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.32.0.1 &lt;none&gt; 443/TCP 36m

&lt;^&gt;dashboard&lt;^&gt; ClusterIP 10.32.198.148 &lt;none&gt; 443/TCP 40s

				
			

Se actualizó nuestro nombre de servicio al nuevo valor.

Nota: En este punto, es posible que desee cargar Kubernetes Dashboard en su navegador y revisarlo. Para hacerlo, primero ejecute el siguiente comando:

				
					
kubectl proxy

				
			

Esto crea un proxy que le permite acceder a recursos de clústeres remotos desde su computadora local. Conforme a las instrucciones anteriores, su servicio de panel se llama kubernetes-dashboard y se ejecuta en el espacio de nombres default. Ahora podrá acceder al panel en la siguiente URL:

				
					
http://localhost:8001/api/v1/namespaces/&lt;^&gt;default&lt;^&gt;/services/https:&lt;^&gt;dashboard&lt;^&gt;:/proxy/

				
			

Si es necesario, sustituya su propio nombre de servicio y espacio de nombres por las partes resaltadas. Las instrucciones para el uso del panel quedan fuera del alcance de este tutorial, pero puede leer los documentos oficiales de Kubernetes Dashboard para obtener más información.

A continuación, veremos la capacidad de Helm para revertir las versiones.

Paso 5: Realizar una reversión de una versión

Cuando actualizamos nuestra versión <^>dashboard-demo<^> en el paso anterior, creamos una segunda _revisión_ de la versión. Helm conserva todos los detalles de las versiones anteriores en caso de que deba realizar una reversión a una configuración o un chart anterior.

Utilice helm list para inspeccionar la versión de nuevo:

				
					
helm list

				
			
				
					
[secondary_label Output]

NAME 	REVISION	UPDATED 	STATUS 	CHART 	NAMESPACE

dashboard-demo	&lt;^&gt;2&lt;^&gt; 	Wed Aug 8 20:13:15 2018	DEPLOYED	kubernetes-dashboard-0.7.1	default

				
			

En la columna REVISON se indica que ésta es ahora la segunda revisión.

Utilice helm rollback para revertir la primera revisión:

				
					
helm rollback &lt;^&gt;dashboard-demo&lt;^&gt; 1

				
			

Debería ver el siguiente resultado, lo cual indica que la reversión se realizó:

				
					
[secondary_label Output]

Rollback was a success! Happy Helming!

				
			

En este punto, si ejecuta kubectl get services de nuevo, observará que el nombre de servicio se cambió de nuevo a su valor anterior. Helm volvió a implementar la aplicación con la configuración de la revisión 1.

A continuación, veremos la eliminación de versiones con Helm.

Paso 6: Eliminar una versión

Es posible eliminar versiones de helm con el comando helm delete:

				
					
helm delete &lt;^&gt;dashboard-demo&lt;^&gt;

				
			
				
					
[secondary_label Output]

release "dashboard-demo" deleted

				
			

Aunque la versión se eliminó y la aplicación del panel ya no está en ejecución, Helm guarda toda la información de revisión en caso de que desee volver a implementar la versión. Si intentara instalar una nueva versión de dashboard-demo con helm install en este momento, vería un mensaje de error:

				
					
Error: a release named dashboard-demo already exists.

				
			

Si utiliza el indicador --deleted para enumerar sus versiones eliminadas, verá que la versión sigue vigente:

				
					
helm list --deleted

				
			
				
					
[secondary_label Output]

NAME 	REVISION	UPDATED 	STATUS 	CHART 	NAMESPACE

dashboard-demo	3 	Wed Aug 8 20:15:21 2018	DELETED	kubernetes-dashboard-0.7.1	default

				
			

Para eliminar _realmente_ la versión y purgar todas las revisiones antiguas, utilice el indicador --purge con el comando helm delete:

				
					
helm delete dashboard-demo --purge

				
			

Con esto, la versión se eliminó realmente y podrá reutilizar el nombre de versión.

Conclusión

A través de este tutorial, instalamos la herramienta de línea de comandos helm y su servicio complementario tiller. También exploramos la instalación, la actualización, reversión y eliminación de charts y versiones de Helm.

Para obtener más información sobre Helm y sus charts, consulte la documentación oficial de Helm.