Tutorial

Introducción a Helm, el administrador de paquetes de Kubernetes

ConceptualKubernetes

Introducción

Implementar aplicaciones en Kubernetes (el popular y sólido sistema contenedor y organizador) puede ser un proceso complejo. Configurar una sola aplicación puede implicar crear varios recursos de interdependientes de Kubernetes (tales como lugares de descarga, servicios, implementaciones y ReplicaSets), cada uno de los cuales requiere la redacción de un archivo de manifiesto YAML detallado.

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

Actualmente, Helm es un proyecto oficial de Kubernetes y forma parte de Cloud Native Computing Foundation, una organización sin fines de lucro que respalda proyectos de código abierto en el ecosistema de Kubernetes y a su alrededor.

En este artículo, proporcionaremos una descripción general de Helm y las diversas abstracciones que usa para simplificar la implementación de aplicaciones en Kubernetes. Si no conoce Kubernetes, Introducción a Kubernetes puede resultarle útil antes para familiarizarse con los conceptos básicos.

Descripción general de Helm

La mayoría de los sistemas operativos y de programación de lenguaje tienen su propio administrador de paquetes para la instalación y el mantenimiento de software. Helm proporciona el mismo conjunto de funciones básicas que muchos de los administradores que seguramente ya conoce, como apt de Debian o pip de Python.

Helm puede:

  • Instalar software
  • Instalar de manera automática dependencias de software
  • Actualizar software
  • Configurar implementaciones de software
  • Obtener paquetes de software de repositorios

Helm proporciona esta funcionalidad a través de los siguientes componentes:

  • Una herramienta de línea de comandos, helm, que proporciona la interfaz de usuario para todas las funcionalidades de Helm.
  • Un componente de servidor complementario, tiller, que funciona en su clúster de Kubernetes, escucha los comandos de helm y gestiona la configuración e implementación de versiones de software en el clúster.
  • El formato de empaquetado de Helm, llamado charts.
  • Un repositorio de charts oficiales seleccionados con charts empaquetados previamente para proyectos de software de código abierto populares.

A continuación, investigaremos el formato de los charts en mayor detalle.

Charts

Los paquetes de Helm se llaman charts, y constan de algunos archivos de configuración YAML y algunas plantillas que se convierten en archivos de manifiesto de Kubernetes. Esta es la estructura de directorios básica de un chart:

Example chart directory
package-name/
  charts/
  templates/
  Chart.yaml
  LICENSE
  README.md
  requirements.yaml
  values.yaml

Estos directorios y archivos tienen las siguientes funciones:

  • charts/: en este directorio se pueden disponer dependencias de charts administradas manualmente, aunque suele ser mejor usar requirements.yaml para vincular las dependencias de manera dinámica.
  • templates/: este directorio contiene archivos de plantillas que se combinan con valores de configuración (de values.yaml y la línea de comandos) y se representan en manifiestos de Kubernetes. Las plantillas usan el formato Go programming language.
  • Chart.yaml: archivo YAML con metadatos sobre el chart, como el nombre y la versión de este, la información del mantenedor, un sitio web relevante y palabras claves de búsqueda.
  • LICENSE: licencia de texto sin formato para el chart.
  • README.md: archivo readme con información para usuarios del chart.
  • requirements.yaml: archivo YAML que enumera las dependencias del chart.
  • values.yaml: archivo YAML con valores de configuración predeterminados para el chart.

El comando helm puede instalar un chart de un directorio local o de una versión .tar.gz empaquetada de esta estructura de directorio. Estos charts empaquetados también pueden descargarse e instalarse automáticamente desde los repositorios de charts, o repos.

A continuación, analizaremos los repositorios de charts.

Repositorios de charts

Un repo de charts de Helm es un sitio HTTP simple que proporciona un archivo index.yaml y charts empaquetados .tar.gz. El comando helm tiene subcomandos disponibles para ayudar a empaquetar charts y crear el archivo index.yaml necesario. En cualquier servidor web, servicio de almacenamiento de objetos o sitio estático, como las páginas GitHub, se pueden proporcionar estos archivos.

Helm viene previamente configurado con un repositorio de charts predeterminado, conocido como stable. Este repo apunta a un depósito de almacenamiento de Google en https://kubernetes-charts.storage.googleapis.com. La fuente del repo *stable *se puede encontrar en el repositorio Git de helm/charts en GitHub.

Los repos alternativos pueden agregarse con el comando helm repo add. Los siguientes son algunos repositorios alternativos populares:

Si instala un chart que desarrolló a nivel local o uno de un repo, debe configurarlo para su instalación en particular. A continuación, veremos las configuraciones.

Configuración de charts

Un chart suele incorporar valores de configuración predeterminados en su archivo values.yaml. Algunas aplicaciones pueden implementarse completamente con valores predeterminados, pero por lo general deberá sobrescribir alguna de las configuraciones para que el chart cumpla con sus requisitos.

El autor del chart determina los valores expuestos para la configuración. Algunos se usan para configurar Kubernetes antiguos y algunos pueden pasarse a través del contenedor subyacente para configurar la propia aplicación.

A continuación, se brinda un fragmento de algunos valores de ejemplo:

values.yaml
service:
  type: ClusterIP
  port: 3306

Estas son opciones para configurar un recurso de servicio de Kubernetes. Puede usar helm inspect values chart-name para desechar todos los valores de configuración disponibles para un chart.

Estos valores pueden sobrescribirse redactando su propio archivo YAML y usándolo al ejecutar helm install, o al establecer opciones de manera individual en la línea de comandos con el indicador --set. Solo necesita especificar esos valores predeterminados que desee cambiar.

Un chart de Helm implementado con una configuración particular se conoce como release. Hablaremos sobre los releases a continuación.

Releases

Durante la instalación de un chart, Helm combina las plantillas del chart con la configuración especificada por el usuario y los valores predeterminados de value.yaml. Estos se convierten en manifiestos de Kubernetes que se implementan a través de la API de Kubernetes. Con esto se crea un release, una configuración e implementación específica de un chart en particular.

El concepto de los lanzamientos es importante, ya que posiblemente desee implementar la misma aplicación más de una vez en un clúster. Por ejemplo, es posible que necesite varios servidores de MySQL con distintas configuraciones.

También es posible que quiera mejorar distintas instancias de un chart de manera individual. Es posible que una aplicación esté lista para un servidor MySQL actualizado, y que otra no lo esté. Con Helm, puede mejorar cada release de forma individual.

Es posible que mejore un release porque se actualizó el chart de este o porque quiere actualizar la configuración del propio release. De cualquier manera, con cada mejora se creará una nueva revisión de un release y Helm le permitirá restablecer fácilmente revisiones anteriores en caso de que se produzca un problema.

Creación de charts

Si no puede encontrar un chart existente para el software que implementará, es posible que prefiera crear uno propio. Helm puede generar la estructura del directorio de un chart con helm create chart-name. Con esto, se creará una carpeta con los archivos y directorios que analizamos en la sección Charts anterior.

A partir de este punto, debe completar los metadatos de su chart en Chart.yaml y disponer sus archivos de manifiesto de Kubernetes en el directorio templates. Luego, debe quitar las variables de configuración pertinentes de sus manifiestos y disponerlas en values.yaml,y luego incluirlas de nuevo en sus plantillas de manifiestos mediante el sistema de creación de plantillas.

El comando helm tiene muchos subcomandos disponibles para ayudarlo a probar, empaquetar y administrar sus charts. Para obtener más información, consulte la documentación oficial de Helm vinculada al desarrollo de charts.

Conclusión

A lo largo de este artículo, hicimos una revisión de Helm, el administrador de paquetes de Kubernetes. Observamos la arquitectura de Helm y los componentes individuales helm y tiller, vimos en detalle el formato de charts de Helm y analizamos los repositorios de charts. También investigamos la forma de configurar un chart de Helm y de combinar e implementar las configuraciones y los charts como releases en clústeres de Kubernetes. Por último, vimos brevemente los conceptos básicos con los que se puede crear un chart cuando no hay uno adecuado disponible.

Para obtener más información sobre Helm, consulte la documentación oficial de Helm. Para encontrar charts oficiales para Helm, consulte el repositorio oficial de Git helm/charts en GitHub.

Creative Commons License