Cómo comenzar a escribir gráficos de Helm para sus aplicaciones de Kubernetes

Gráfico que muestra el logotipo de Helm sobre un fondo morado

Timón es un administrador de paquetes para cargas de trabajo de Kubernetes. La creación de un gráfico de Helm para su aplicación simplifica las implementaciones reproducibles en un clúster de Kubernetes. Los usuarios pueden instalar todo el gráfico con un solo comando, en lugar de aplicar manualmente manifiestos de componentes individuales con Kubectl.

En este artículo, le mostraremos cómo comenzar con Helm escribiendo un gráfico para una aplicación simple. Un «gráfico» es conceptualmente similar a un «paquete» de manifiestos de Kubernetes que Helm le permite administrar como una sola entidad.

¿Qué es un gráfico de timón?

Los gráficos de Helm aplican el modelo familiar de administración de paquetes que se encuentra en los sistemas operativos y lenguajes de programación a las aplicaciones que se ejecutan en un clúster de Kubernetes. Un gráfico de Helm puede tener dependencias e hijos; todos estos componentes se inician automáticamente en su clúster cuando instala un gráfico de nivel superior.

Los gráficos se versionan completamente utilizando una estrategia de publicación semántica. De manera similar a un módulo npm o un paquete de sistema operativo, puede anclar gráficos a versiones específicas y realizar un seguimiento de sus cambios a lo largo del tiempo. Esto simplifica la reversión de las implementaciones de aplicaciones a una buena versión conocida en caso de que surjan problemas en su clúster.

Los gráficos Helm también incorporan capacidades de creación de plantillas para proporcionar valores dinámicos en el momento de la instalación. Puede configurar nuevas aplicaciones sin editar directamente sus archivos de manifiesto, utilizando variables proporcionadas por el desarrollador del gráfico.

Instalación de timón

Helm se distribuye como un binario simple a través del proyecto Lanzamientos de GitHub página. Descargue la distribución correcta para su sistema, hágala ejecutable y muévala a una ubicación dentro de su PATH.

Helm también está presente en los repositorios de paquetes de las distribuciones de Linux más populares. Puede encontrarlo en Homebrew para macOS y Chocolatey y Scoop para Windows también.

Una vez completada la instalación, ejecute helm version para comprobar que todo funciona:

$ helm version  --template="Version: {{.Version}}"
Version: v3.8.1

Los comandos de Helm apuntan a su conexión de clúster de Kubernetes activa tal como la usa Kubectl. El archivo y el contexto de Kubeconfig seleccionados se utilizarán para todos los comandos de Helm. Puede hacer referencia a un archivo de configuración diferente con el estándar KUBECONFIG variable de entorno o --kubeconfig mecanismos de bandera

Creación de un gráfico de timón

Ahora puede comenzar a crear un gráfico de Helm para su aplicación. Utilizar el helm create comando para montar un nuevo gráfico en su directorio de trabajo:

$ helm create my-app-chart

El contenido del gráfico se depositará dentro del my-app-chart directorio. Inspeccionemos lo que contiene:

$ ls my-app-chart
Chart.yaml  charts  templates   values.yaml

Hay dos archivos de nivel superior y dos subdirectorios complementarios. Esto es para lo que se utiliza cada recurso:

  • Chart.yaml – El manifiesto de su gráfico de Helm que define las propiedades de los metadatos, incluido su nombre y versión.
  • values.yaml – Este archivo almacena valores predeterminados para variables a las que puede hacer referencia en su gráfico. Es posible anular los valores que se configuran aquí usando indicadores CLI cuando instala el gráfico.
  • templates – El directorio de plantillas contiene los manifiestos de objetos de Kubernetes de su gráfico. La instalación del gráfico aplicará todos estos manifiestos a su clúster. Cualquier manifiesto YAML de Kubernetes válido se puede colocar aquí; también puede utilizar funciones adicionales, como referencias a variables definidas en su values.yaml expediente. Veremos esta capacidad a continuación.
  • charts – Los charts El directorio contiene otros gráficos de Helm de los que depende este. Se utiliza para configurar relaciones complejas de gráficos entre padres e hijos. No cubriremos esta función en este artículo, por lo que puede eliminar el directorio si no lo necesita.

El gráfico predeterminado de Helm viene preconfigurado para implementar una instancia del servidor web NGINX. El Kubernetes se manifiesta en el templates El directorio crea los diversos componentes constituyentes, como una implementación, un servicio y un ingreso. La aplicación se configura mediante variables definidas en values.yaml; aquí encontrará la configuración de la etiqueta de imagen, el puerto de servicio y el host de entrada, entre otros:

$ cat values.yaml
# Default values for my-app-chart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

image:
  repository: nginx
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: ""
...

Instalación del gráfico

Para agregar la aplicación a su clúster, use el helm install dominio:

$ helm install my-app .
NAME: foo
LAST DEPLOYED: Tue Mar 29 14:47:48 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
...

El primer argumento del comando define el nombre de su lanzamiento. El segundo argumento hace referencia a la ruta del directorio desde donde cargar el gráfico de Helm. Puedes usar . cuando su directorio de trabajo ya está configurado en la raíz de su gráfico.

Recibirá una salida de terminal que describe la versión instalada. los NOTES La sección consta de información proporcionada por el gráfico.

Para anular values.yaml variables, proporcione una o más instancias de la --set bandera:

$ helm install my-app . --set replicaCount=3 --set image.tag=1.20

Este ejemplo implementaría tres réplicas de un contenedor que ejecuta el nginx:1.20 imagen. Puede verificar esto enumerando los Pods en su clúster usando Kubectl:

$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
my-app-my-app-chart-6d6577749c-2qbhb   1/1     Running   0          61s
my-app-my-app-chart-6d6577749c-wdmgv   1/1     Running   0          44s
my-app-my-app-chart-6d6577749c-x5wp7   1/1     Running   0          40s

Actualización, recuperación y eliminación de versiones de gráficos

A continuación, realice algunos cambios en el gráfico o modifique el valor de una variable:

$ helm install my-app . --set replicaCount=5
Error: INSTALLATION FAILED: cannot re-use a name that is still in use

repitiendo el install el comando no funciona Para aplicar cambios a un gráfico que ya está implementado, use el upgrade comando en su lugar. Esto crea un nuevo «lanzamiento» dentro del clúster.

$ helm upgrade my-app . --set replicaCount=5
Release "my-app" has been upgraded. Happy Helming!

Puede enumerar todos los lanzamientos de gráficos implementados en su clúster con helm list:

$ helm list
NAME    NAMESPACE   REVISION    UPDATED                                 STATUS      CHART               APP VERSION
my-app  default     2           2022-03-30 15:09:34.370758719 +0100 BST deployed    my-app-chart-0.1.0  1.16.0

Los detalles de cada versión incluyen su nombre, la cantidad de veces que se implementó, la hora de la última actualización y los números de versión del gráfico y la aplicación que proporciona.

Para eliminar una versión y destruir sus objetos de Kubernetes, pase su nombre al uninstall dominio:

$ helm uninstall my-app
release "my-app" uninstalled

Escribir su propio gráfico desde cero

Ahora veamos cómo escribir un gráfico básico desde cero. Cree un nuevo directorio para su gráfico; estamos llamando a los nuestros cloudsavvy-chart. Agrega un Chart.yaml archivo dentro con el siguiente contenido:

apiVersion: v2
name: cloudsavvy-chart
description: An example Helm chart.
type: application
version: 0.1.0
appVersion: 1.1.0

los type el campo generalmente debe establecerse en application. El otro tipo soportado es library. Funcionalidad del paquete de gráficos de biblioteca que se puede incluir como una dependencia de otros gráficos. No contienen ningún Kubernetes. templates ellos mismos.

los version campo se refiere a la versión de tu carta. Debe incrementar esto cada vez que modifique las plantillas del gráfico. appVersion indica la versión del componente de software principal que proporciona su gráfico. Señala a los usuarios de gráficos lo que se ejecutará en su clúster después de instalar el gráfico. Como ejemplo, si está creando un gráfico que distribuye WordPress, sería apropiado establecer appVersion al número de versión de WordPress que está proporcionando.

A continuación, cree un values.yaml archivo con algunas variables simples:

deploymentName: cloudsavvy
image: nginx:latest
replicas: 1

Se hará referencia a estas variables en su plantilla de gráfico. Agregue esta plantilla ahora como templates/deployment.yaml. Nuestro gráfico básico implementará un solo Pod, por lo que solo tendrá un archivo de plantilla. En una situación del mundo real, es una buena práctica crear archivos de manifiesto individuales para cada uno de los componentes de su aplicación.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.deploymentName }}-deployment
spec:
  selector:
    matchLabels:
      app: {{ .Values.deploymentName }}
  replicas: {{ .Values.replicas }}
  template:
    metadata:
      labels:
        app: {{ .Values.deploymentName }}
    spec:
      containers:
        - name: {{ .Values.deploymentName }}
          image: {{ .Values.image }}

La implementación utiliza valores de values.yaml para configurar la referencia de imagen y el recuento de réplicas. los deploymentName La variable se usa en todo momento para que cualquier cambio futuro se pueda hacer en un solo lugar. Campos en values.yaml se referencian mediante el {{ .Values.FIELD_NAME }} sintaxis.

Ahora use Helm para instalar el gráfico:

$ helm install cloudsavvy-app . --set replicas=3
NAME: cloudsavvy-app
LAST DEPLOYED: Tue Mar 29 15:43:21 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

los --set bandera anula el valor predeterminado de replicas eso esta puesto values.yaml. Una vez aplicadas las anulaciones, Helm inyecta los valores resueltos en los lugares correctos de sus plantillas YAML. Luego, los manifiestos finales de Kubernetes se aplican a su clúster. Ahora puede verificar que se estén ejecutando tres contenedores usando Kubectl para enumerar los pods de su clúster.

$ kubectl get pods
NAME                                     READY   STATUS              RESTARTS   AGE
cloudsavvy-deployment-7b975bd985-5r7dc   0/1     ContainerCreating   0          15s
cloudsavvy-deployment-7b975bd985-bpbkm   0/1     ContainerCreating   0          15s
cloudsavvy-deployment-7b975bd985-jzb5q   0/1     ContainerCreating   0          15s

Resumen

Los gráficos de Helm le permiten empaquetar colecciones de manifiestos de Kubernetes como aplicaciones completas que están listas para implementarse. Puede crear configuraciones con plantillas que los usuarios finales pueden cambiar fácilmente antes de instalar una versión en un clúster.

En esta guía, explicamos los conceptos básicos de la funcionalidad de Helm y mostramos cómo puede crear sus propios gráficos simples para sus aplicaciones. Sin embargo, apenas hemos cubierto la superficie de lo que Helm puede lograr: una vez que haya escrito un gráfico, puede enviarlo a un repositorio para que otros lo usen, agregar otros gráficos como dependenciasy crea gráficos más avanzados usando funciones, canalizaciones y flujo de control expresiones Tomarse el tiempo para aprender Helm hace que sus implementaciones de Kubernetes sean más flexibles, potentes y reutilizables.

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad