Cómo instalar software en clústeres de Kubernetes con el administrador de paquetes Helm 3

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Instalación de Helm 3
  • Paso 2: Configuración de repositorios de gráficos
  • Paso 3: Instalación de un gráfico de timón
  • Paso 4: Actualizar una versión
  • Paso 5: revertir y eliminar una versión
  • Paso 6 (opcional): creación de gráficos personalizados
  • Conclusión
  • Helm es un administrador de paquetes para Kubernetes que permite a los desarrolladores y operadores configurar e implementar aplicaciones más fácilmente en clústeres de Kubernetes.

    Los paquetes de Helm se denominan charts (gráficos ) y contienen plantillas de definiciones de recursos que implementan y configuran determinadas aplicaciones con un mínimo esfuerzo por parte del usuario. Con las plantillas, puede administrar el gráfico, su configuración y comportamiento al pasar definiciones de variables sin modificar el gráfico real. Helm administra automáticamente las definiciones de recursos personalizadas, así como las modificaciones a las definiciones ya implementadas. Un gráfico implementado, con posibles personalizaciones, se denomina release (versión) .

    En este tutorial, configurará Helm 3 y aprenderá a instalar, actualizar, revertir y administrar gráficos y versiones. También aprenderá a crear y empaquetar sus propios gráficos, así como a configurar repositorios de gráficos, que alojan gráficos que puede instalar de inmediato.

    Prerrequisitos

    • Un clúster de Kubernetes con control de acceso basado en roles (RBAC) habilitado. Para obtener más información sobre las versiones, puede consultar la página de versiones de Helm .

    • La kubectlherramienta de línea de comandos instalada en su máquina local, configurada para conectarse a su clúster. Puede leer más sobre la instalación kubectl en la documentación oficial .

      Puede probar su conectividad con el siguiente comando:

      1. 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 verificar que haya seleccionado el contexto de clúster correcto ejecutando lo siguiente:

      1. kubectl config get-contexts

      La salida enumerará las configuraciones disponibles:

      OutputCURRENT   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 do-fra1-helm3-exampleclúster. Para cambiar de clúster, ejecute:

      1. kubectl config use-context context-name

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

    Paso 1: Instalación de Helm 3

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

    Comience navegando a /tmp, donde almacenará el script de instalación ejecutando:

    1. cd /tmp

    Descargue el script con el siguiente comando:

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

    Puede examinarlo get_helm.shen su editor de texto para asegurarse de que sea seguro.

    Hazlo ejecutable estableciendo sus permisos de la siguiente manera:

    1. chmod u+x get_helm.sh

    Por último, ejecútelo para instalar Helm 3:

    1. ./get_helm.sh

    Recibirá un resultado similar al siguiente:

    OutputDownloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gzVerifying checksum... Done.Preparing to install helm into /usr/local/binhelm installed into /usr/local/bin/helm

    Tienes Helm 3 instalado en tu equipo. Ahora aprenderás sobre 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 cualquiera puede alojar. De forma predeterminada, Helm 3 no viene preconfigurado con ningún repositorio. Las versiones anteriores de Helm incluían un repositorio de gráficos central seleccionado; sin embargo, el diseño de Helm 3 evolucionó deliberadamente para que los desarrolladores de gráficos administren su propio repositorio, lo que permite más libertad y lanzamientos más rápidos. Esto significa que, para cada gráfico que desee utilizar, deberá asegurarse de agregar 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 hace un seguimiento de los gráficos populares y útiles que utilizan otros proyectos de CNCF, por lo que se diferencia del stablerepositorio desde el que funcionaban las versiones anteriores de Helm. Para proyectos comunes, como los ingresos de Nginx o las herramientas de monitoreo, es una gran fuente.

    Puede buscar un gráfico que desee instalar a través de la página de inicio. La búsqueda nginxmostrará todos los gráficos indexados relacionados con él.

    Instalarás la edición comunitaria administrada por el equipo de Kubernetes. Busca para ingress-nginxencontrarla en los resultados. Selecciónala para acceder a su página.

    Cada gráfico debe tener una descripción que detalle lo que hace, junto con los comandos para agregar su repositorio a su instalación e instalar el gráfico. Si no es así, puede obtener los comandos necesarios presionando el botón INSTALAR a la derecha de la página.

    Puede hacer clic en el botón azul que se encuentra junto a un comando para copiarlo. Haga lo mismo con el primer comando y ejecútelo:

    1. 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 agregas un nuevo repositorio, debes informarle a Helm qué contiene ejecutando lo siguiente:

    1. helm repo update

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

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

    En este paso, aprendiste sobre ArtifactHub y lo que ofrece. También agregaste un nuevo repositorio a tu instalación de Helm. En el siguiente paso, instalarás un gráfico de Helm.

    Paso 3: Instalación de un gráfico de timón

    En la sección anterior, agregó el repositorio para el ingress-nginxgráfico. Ahora lo instalará en su clúster.

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

    1. helm show values chart_name

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

    1. helm show values ingress-nginx/ingress-nginx

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

    Para instalar un gráfico, puede utilizar helm install:

    1. helm install release_name repository/chart_name

    Un lanzamiento es una instancia implementada del gráfico, y aquí lo estás llamando ingress-nginx.

    Este comando instalará el gráfico en su clúster con los valores predeterminados de las variables. Si desea modificar algunas de ellas, puede pasar los nuevos valores de las variables mediante --set:

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

    Puedes repetir el proceso --setpara tantas variables como necesites. Como no lo personalizaremos ahora, instálalo tal como está ejecutando:

    1. helm install ingress-nginx ingress-nginx/ingress-nginx

    La salida será similar a la siguiente:

    OutputNAME: ingress-nginxLAST DEPLOYED: Wed Feb 24 10:12:37 2021NAMESPACE: defaultSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES: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 NAMEcorresponde al nombre de la versión que especificó. Helm también incluye información común, como el estado de la versión y el espacio de nombres en el que se implementó. La NOTESsección varía entre los gráficos y, por lo general, contiene una guía de inicio rápido o advierte sobre algunos problemas comunes al usar los recursos del gráfico. Aquí, se indica que se está creando el equilibrador de carga y que puede tardar un tiempo en completarse.

    Para comprobar los gráficos implementados, utilice helm list:

    1. helm list

    Descubrirás que este ingress-nginxes el único gráfico implementado en este momento:

    OutputNAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSIONingress-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:

    1. kubectl get services

    La salida será similar a esto:

    OutputNAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                      AGEingress-nginx-controller             LoadBalancer   10.245.211.81   46.101.68.67   80:30704/TCP,443:30700/TCP   7m19singress-nginx-controller-admission   ClusterIP      10.245.50.17    none         443/TCP                      7m19skubernetes                           ClusterIP      10.245.0.1      none         443/TCP                      83m

    Ahora que ha implementado una versión en su clúster, modificará su configuración mientras está implementada.

    Paso 4: Actualizar una versión

    Una vez que se implementa una versión, no es necesario desmantelarla y volver a implementarla por completo cuando se necesita cambiar su configuración. Puede usar el helm upgradecomando para actualizar la versión con una nueva versión del gráfico o para establecer nuevos ajustes.

    El ingress-nginxgráfico muestra la controller.replicaCountvariable que controla la cantidad de pods de controlador implementados. De manera predeterminada, está establecida en uno, lo cual puede verificar enumerando los pods disponibles:

    1. kubectl get pods

    Descubrirás que solo hay uno:

    OutputNAME                                        READY   STATUS    RESTARTS   AGEingress-nginx-controller-7fc74cf778-kjtst   1/1     Running   0          12m

    Si desea que se implementen más para redundancia (por ejemplo, tres), puede realizar upgradela liberación y configurar la variable 3ejecutando:

    1. 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 base sus cambios en la versión implementada, preservando la configuración anterior.

    En la salida, Helm actualizará la revisión para indicar que la versión se ha actualizado:

    OutputNAME: ingress-nginxLAST DEPLOYED: Wed Feb 24 12:07:54 2021NAMESPACE: defaultSTATUS: deployedREVISION: 2TEST SUITE: NoneNOTES:...

    Puede enumerar los pods disponibles ejecutando lo siguiente:

    1. kubectl get pods

    Encontrará tres pods enumerados, en lugar de uno:

    OutputNAME                                        READY   STATUS    RESTARTS   AGEingress-nginx-controller-7fc74cf778-4hk9g   1/1     Running   0          18singress-nginx-controller-7fc74cf778-kjtst   1/1     Running   0          22mingress-nginx-controller-7fc74cf778-wz595   1/1     Running   0          18s

    A continuación, revertirá los cambios y eliminará las versiones por completo.

    Paso 5: revertir y eliminar una versión

    Cuando se lanza upgradeuna versión, se incrementa el número de revisión. Internamente, Helm almacena todas las revisiones de una versión, lo que permite volver a una revisión anterior si es necesario.

    Para revertir la cantidad de pods a solo uno, puede ejecutar helm upgradenuevamente y configurar manualmente la cantidad porque es un cambio pequeño. Sin embargo, cuando se trabaja con gráficos más grandes con muchas variables, la reversión manual no es factible y debe automatizarse.

    Para revertir una versión anterior, utilice helm rollback:

    1. helm rollback release_name release_revision

    Puedes usarlo para revertir los cambios que realizaste ingress-nginxvolviendo a la revisión 1:

    1. helm rollback ingress-nginx 1

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

    OutputRollback was a success! Happy Helming!

    Puede comprobar la revisión actual enumerando las versiones:

    1. helm list

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

    OutputNAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSIONingress-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, incluidas las reversiones, como una nueva revisión de una versión. Puede comprobar que la revisión 3es igual a la primera comprobando la cantidad de pods implementados ejecutando lo siguiente:

    1. kubectl get pods

    Descubrirás que solo hay uno:

    OutputNAME                                        READY   STATUS    RESTARTS   AGEingress-nginx-controller-7fc74cf778-kjtst   1/1     Running   0          41m

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

    1. helm delete release_name

    Como ya no lo necesitarás, elimínalo ingress-nginxejecutando el siguiente comando:

    1. helm delete ingress-nginx

    La salida será:

    Outputrelease "ingress-nginx" uninstalled

    Puedes enumerar los lanzamientos para comprobar que no hay ninguno:

    1. helm list

    La tabla de salida no tendrá filas:

    OutputNAME    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): creación de gráficos personalizados

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

    Creará un nuevo gráfico llamado example-chart. Ejecute el siguiente comando para crearlo:

    1. helm create example-chart

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

    gráfico de ejemplo/

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

    Las definiciones de recursos que su gráfico instalará en los clústeres de destino se encuentran en el templatesdirectorio. Las predeterminadas que Helm creó como punto de partida implementan un controlador de ingreso de Nginx. Aunque su extensión de archivo es YAML, utilizan la sintaxis de plantillas de Go para seguir siendo personalizables a través de variables expuestas que puede pasar. Puede verificarlo mostrando el contenido de service.yamlejecutando:

    1. cat example-chart/templates/service.yaml

    Descubrirás que tiene directivas de plantillas para generar valores rodeados de llaves dobles:

    OutputapiVersion: v1kind: Servicemetadata:  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 a las que se hace referencia se exponen al usuario y se definen en values.yaml. El NOTEStexto que Helm muestra después de la implementación se almacena en NOTES.txt, y también se crea una plantilla. Los metadatos del gráfico, como el nombre, la versión y la versión del software que se está implementando, se especifican en Chart.yaml:

    ejemplo-gráfico/Chart.yaml

    apiVersion: v2name: mychartdescription: A Helm chart for Kubernetes...type: application...version: 0.1.0...appVersion: "1.16.0"

    Para comprobar lo que implementaría Helm, puedes pasar --dry-runy --debugapuntar helm installal directorio del gráfico:

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

    El resultado será extenso y contendrá todas las definiciones de recursos finales que se aplicarán a su clúster. Mientras trabaja en su gráfico, puede usarlo helm upgradepara enviar nuevas versiones a Kubernetes.

    Cuando llegue el momento de compartir su gráfico terminado, puede empaquetarlo para su distribución ejecutando lo siguiente:

    1. helm package ./example-chart

    La salida será:

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

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

    En este paso, ha creado un gráfico personalizado y lo ha implementado. También lo ha empaquetado y ha aprendido sobre su estructura.

    Conclusión

    Ahora sabe cómo usar Helm para instalar y actualizar el software implementado en su clúster de Kubernetes. Ha agregado repositorios de gráficos y ha aprendido por qué son importantes y cómo ArtifactHub puede ayudarlo a encontrarlos. También ha creado un nuevo gráfico personalizado y ha aprendido sobre las revisiones de versiones y cómo revertirlas si es necesario.

    Para obtener más información sobre la creación de gráficos personalizados, visita la guía oficial .

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

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

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion