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 suvalues.yaml
expediente. Veremos esta capacidad a continuación.charts
– Loscharts
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.