Cómo instalar software en clústeres de Kubernetes con la gestión de paquetes de Helm 3

0 acciones
0
0
0
0

Introducción

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

Los paquetes de Helm se denominan gráficos y contienen plantillas de definiciones de recursos que implementan y configuran aplicaciones específicas con un mínimo esfuerzo por parte del usuario. Con las plantillas, se puede administrar el gráfico, su configuración y su comportamiento mediante la transferencia de definiciones de variables sin modificar el gráfico real. Helm gestiona automáticamente las definiciones de recursos personalizadas, así como los cambios en las definiciones preimplementadas. El gráfico implementado, con posibles personalizaciones, se denomina versión.

En este tutorial, configurarás Helm 3 y aprenderás a instalar, actualizar, restaurar y administrar cartas y versiones. También aprenderás a crear y empaquetar tus propias cartas, así como a configurar repositorios de cartas que alojan cartas que puedes instalar inmediatamente.

Requisitos previos
  • Un clúster de Kubernetes con control de acceso basado en roles (RBAC) habilitado.
  • La herramienta de línea de comandos kubectl está instalada en su máquina local y configurada para conectarse a su clúster.
  • Puede probar su conexión con el siguiente comando:
  • kubectl cluster-info
  • Si no recibe ningún error, está conectado al clúster. Si accede a varios clústeres con kubectl, asegúrese de haber seleccionado el contexto de clúster correcto ejecutando lo siguiente:
  • kubectl config get-contexts
  • La salida enumera las configuraciones disponibles:
  • Output
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE
    * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin
  • Aquí, el asterisco (*) indica que estamos conectados al clúster do-fra1-helm3-example. Para cambiar de clúster, ejecute:
  • kubectl config use-context context-name
  • Una vez que esté conectado al clúster correcto, continúe con el Paso 1 para comenzar a instalar Helm.

Paso 1: Instalar Helm 3

En esta sección, instalará Helm 3 utilizando el script de shell proporcionado oficialmente.

Comience yendo a /tmp, donde podrá encontrar el script de instalación ejecutando:

cd /tmp

Descargue el script con el siguiente comando:

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

Puedes verificar get_helm.sh en tu editor de texto para asegurarte de que sea seguro.

Hazlo ejecutable estableciendo sus permisos de la siguiente manera:

chmod u+x get_helm.sh

Finalmente, ejecútelo para instalar Helm 3:

./get_helm.sh

Obtendrá un resultado similar al siguiente:

Output
Downloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm

Has instalado Helm 3 en tu equipo. Ahora conocerás los repositorios de gráficos y cómo usarlos.

Paso 2: Configuración de repositorios de gráficos

Los gráficos de Helm se almacenan en repositorios de gráficos que cualquier persona puede alojar. Por defecto, Helm 3 no viene preconfigurado con ningún repositorio. Las versiones anteriores de Helm incluían un repositorio central de gráficos. Sin embargo, el diseño de Helm 3 se orientó específicamente a que los desarrolladores de gráficos gestionaran su propio repositorio, lo que les permitió mayor libertad y agilizar los lanzamientos. Esto significa que, para cada gráfico que desee utilizar, debe asegurarse de añadir el repositorio de alojamiento a su instalación de Helm.

Para ayudarte a encontrar el repositorio adecuado, puedes usar ArtifactHub.io, un sitio web de código abierto administrado por CNCF que cataloga los gráficos de Helm y sus repositorios. También rastrea gráficos populares y útiles que utilizan otros proyectos de CNCF, por lo que es diferente del repositorio estable con el que funcionaban las versiones anteriores de Helm. Es un excelente recurso para proyectos comunes, como registros de Nginx o herramientas de monitorización.

Puedes buscar el gráfico que deseas instalar desde la página principal. La búsqueda de Nginx mostrará todos los gráficos indexados relacionados.


Instalará la versión comunitaria administrada por el equipo de Kubernetes. Busque ingress-nginx para encontrarlo en los resultados. Selecciónelo para acceder a la página.


Cada gráfico debe incluir una descripción que detalle la tarea, junto con instrucciones para agregar su repositorio a la instalación del gráfico. De lo contrario, puede obtener las instrucciones necesarias pulsando el botón INSTALAR a la derecha de la página.


Puedes hacer clic en el botón azul junto al comando para copiarlo. Para el primer comando, haz lo siguiente y ejecútalo:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

Para agregar un repositorio a Helm, ejecute helm repo add. Los parámetros que acepta son el nombre del repositorio y su ubicación.

La salida será:

Output
"ingress-nginx" has been added to your repositories

Cuando agrega un nuevo repositorio, debe indicarle a Helm qué contiene ejecutando:

helm repo update

Recibirá el siguiente resultado indicando que la actualización fue exitosa:

Output
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈Happy Helming!⎈

En este punto, ya se ha familiarizado con ArtifactHub y sus funciones. También ha añadido un nuevo repositorio a su instalación de Helm. A continuación, instalará el diagrama de Helm.

Paso 3 – Instalación del gráfico de timón

En la sección anterior, agregó el repositorio de gráficos ingress-nginx. Ahora lo instalará en su clúster.

Cada gráfico tiene variables de configuración que puedes configurar para cambiar su comportamiento. Estas variables se almacenan en un archivo llamado values.yaml que forma parte del gráfico. A menos que hayas descargado el gráfico en tu dispositivo, deberás ejecutar el siguiente comando para verlo:

helm show values chart_name

Para mostrar las variables disponibles para ingress-nginx, reemplace chart_name:

helm show values ingress-nginx/ingress-nginx

La salida será larga y mostrará el contenido de values.yaml para ingress-nginx.

Para instalar el gráfico, puede utilizar el comando de instalación:

helm install release_name repository/chart_name

Una versión es una instancia implementada del gráfico y aquí la llamamos ingress-nginx.

Este comando instalará el gráfico con los valores predeterminados de las variables de su clúster. Si desea cambiar alguno, puede pasar nuevos valores de variable mediante –set:

helm install ingress-nginx/ingress-nginx --set variable_name=variable_value

Puedes repetir "–set" para tantas variables como necesites. Como no lo personalizaremos ahora, instálalo tal cual ejecutando:

helm install ingress-nginx ingress-nginx/ingress-nginx

La salida será similar a la siguiente:

Output
NAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 10:12:37 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
...

Tenga en cuenta que NOMBRE coincide con el nombre de la versión que especificó. Helm también muestra información común, como el estado de la versión y el espacio de nombres en el que se implementa. La sección NOTAS varía según el gráfico y suele contener consejos de inicio rápido o advertencias sobre problemas comunes al usar los recursos del gráfico. Aquí se menciona que se está creando el balanceador de carga y que su creación puede tardar un tiempo.

Para comprobar los gráficos implementados, utilice la lista de comandos:

helm list

Notarás que ingress-nginx es el único gráfico implementado actualmente:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

Puede encontrar los servicios que tiene en su clúster ejecutando lo siguiente:

kubectl get services

La salida será similar a esto:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s
ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m

Ahora que ha implementado una versión en su clúster, cambiará su configuración durante la implementación.

Paso 4 – Actualizar una versión

Una vez que una versión está en ejecución, no es necesario destruirla y volver a crearla para cambiar su configuración. Puede usar el comando de actualización para actualizar la versión con una nueva versión del gráfico o para establecer nuevos ajustes.

El diagrama de ingress-nginx muestra la variable controller.replicaCount, que controla el número de pods de controlador implementados. De forma predeterminada, está establecida en uno, lo cual puede verificarse enumerando los pods disponibles:

kubectl get pods

Notarás que solo hay uno:

Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m

Si desea que se implementen más para redundancia (por ejemplo, tres), puede actualizar la versión y establecer la variable en 3 ejecutando:

helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values

También pasa --reuse-values, que le indica a Helm que coloque sus cambios sobre la versión implementada y preserve la configuración anterior.

En la salida, Helm realiza correcciones para indicar que la versión se ha actualizado:

Output
NAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...

Puede enumerar los pods disponibles ejecutando lo siguiente:

kubectl get pods

En lugar de uno, encontrará tres pods enumerados:

Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m
ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s

A continuación, revertirá los cambios y eliminará la publicación por completo.

Paso 5 – Restaurar y eliminar una copia

Al actualizar una versión, su número de revisión aumenta. Helm almacena internamente todas las versiones de una versión, lo que permite volver a una anterior si es necesario.

Para revertir el número de pods a uno solo, puede volver a ejecutar el comando de actualización y ajustar manualmente el número, ya que se trata de un cambio pequeño. Sin embargo, al trabajar con gráficos grandes con muchas variables, la reversión manual no es posible y debería ser automática.

Para restaurar una versión, utilice el comando restaurar:

helm rollback release_name release_revision

Puedes usarlo para revertir los cambios que realizaste en ingress-nginx, volviendo a la versión 1:

helm rollback ingress-nginx 1

Recibirá el siguiente resultado indicando que la operación fue exitosa:

Output
Rollback was a success! Happy Helming!

Puedes comprobar la versión actual enumerando las versiones:

helm list

Notarás que la revisión ahora es 3 y no 1:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

Helm considera cada cambio, incluyendo una reversión, como una nueva revisión en una versión. Al comprobar el número de pods implementados, ejecute:

kubectl get pods

Notarás que solo hay uno:

Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m

Para eliminar una versión y todas sus revisiones, puedes usar helm delete:

helm delete release_name

Como ya no lo necesitará, elimine ingress-nginx ejecutando el siguiente comando:

helm delete ingress-nginx

La salida será:

Output
release "ingress-nginx" uninstalled

Puedes enumerar las versiones para comprobar que no existe ninguna:

helm list

La tabla de salida no tendrá filas:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

Ahora que se ha eliminado la versión, puedes reutilizar su nombre para futuras implementaciones.

Paso 6 – (Opcional) Crear gráficos personalizados

En este paso opcional, aprenderá cómo crear un gráfico personalizado, dónde colocar las definiciones de recursos y cómo empaquetarlo para su posterior distribución.

Creará un nuevo gráfico llamado sample-chart. Para crearlo, ejecute el siguiente comando:

helm create example-chart

Esto creará un nuevo directorio llamado example-chart con los siguientes archivos y estructura:

charts/
templates/
├─ tests/
│ ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml

Las definiciones de recursos que tu gráfico instala en los clústeres de destino se encuentran en el directorio de plantillas. Las predeterminadas que Helm creó como punto de partida implementan un controlador de entrada Nginx. Aunque su extensión de archivo es YAML, utilizan la sintaxis de formato de Go para seguir siendo configurables mediante variables expuestas que puedes pasar. Puedes ver el contenido de service.yaml ejecutando:

cat example-chart/templates/service.yaml

Notarás que tiene instrucciones de formato para producir valores rodeados por paréntesis dobles:

OutputapiVersion: v1
kind: Service
metadata:
name: {{ include "mychart.fullname" . }}
labels:
{{- include "mychart.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "mychart.selectorLabels" . | nindent 4 }}

Las variables referenciadas se exponen al usuario y se definen en values.yaml. El texto de las NOTAS de Helm se almacena en NOTES.txt tras la implementación y también se formatea. Los metadatos de los gráficos, como el nombre, la versión y la versión del software que se está implementando, se especifican en Chart.yaml:

apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
...
type: application
...
version: 0.1.0
...
appVersion: "1.16.0"

Para verificar qué está implementando Helm, puede pasar –dry-run y –debug a helm install apuntando al directorio del gráfico:

helm install example-chart --dry-run --debug ./example-chart

El resultado será extenso e incluirá todas las definiciones de recursos finales que se aplicarán a tu clúster. Mientras trabajas en tu gráfico, puedes usar el comando de actualización para enviar nuevas versiones a Kubernetes.

Cuando haya terminado de compartir el gráfico, puede ponerlo a disposición para su distribución ejecutando lo siguiente:

helm package ./example-chart

La salida será:

Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgz

El gráfico empaquetado se puede instalar igual que los de los repositorios agregados:

helm install example-chart example-chart-0.1.0.tgz

En este punto, ya ha creado e implementado un gráfico personalizado. También lo ha empaquetado y se ha familiarizado con su estructura.

Resultado

Ya sabes usar Helm para instalar y actualizar el software implementado en tu clúster de Kubernetes. Agregaste repositorios de gráficos y aprendiste por qué son importantes y cómo ArtifactHub puede ayudarte a encontrarlos. También creaste un nuevo gráfico personalizado y aprendiste sobre las revisiones de versiones y cómo revertirlas si es necesario.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

También te puede gustar