Creación e instalación de un gráfico de Helm
Los gráficos de Helm facilitan la implementación de aplicaciones en cualquier clúster de Kubernetes. Helm se usa para crear una plantilla con la información de implementación de la aplicación como un gráfico de Helm, que después se usa para implementar la aplicación.
Supongamos que el equipo de desarrollo ya ha implementado el sitio web de la tienda de mascotas de su empresa en el clúster de AKS. El equipo crea tres archivos para implementar el sitio web:
- Un manifiesto de implementación que describe cómo instalar y ejecutar la aplicación en el clúster,
- Un manifiesto de servicio que describe cómo exponer el sitio web en el clúster y
- Un manifiesto de entrada que describe cómo se enruta el tráfico desde fuera del clúster a la aplicación web.
El equipo implementa estos archivos en cada uno de los tres entornos como parte del ciclo de vida de desarrollo del software. Cada uno de los tres archivos se actualiza con variables y valores específicos del entorno. Puesto que cada archivo está codificado de forma rígida, el mantenimiento de estos archivos es propenso a errores.
¿Cómo procesa Helm un gráfico?
El cliente de Helm implementa un motor de plantillas basado en el lenguaje Go que analiza todos los archivos disponibles en las carpetas de un gráfico. El motor de plantillas crea archivos de manifiesto de Kubernetes combinando las plantillas de la carpeta templates/
del gráfico con los valores de los archivos Chart.yaml
y values.yaml
.
Una vez que los archivos de manifiesto están disponibles, el cliente puede instalar, actualizar y eliminar la aplicación definida en los archivos de manifiesto generados.
Procedimiento para definir un archivo Chart.yaml
El archivo Chart.yaml
es uno de los necesarios en una definición de gráfico de Helm y proporciona información al respecto. El contenido del archivo consta de tres campos obligatorios y varios opcionales.
Los tres campos obligatorios son:
apiVersion
: Versión de la API del gráfico que se va a usar. Establezca la versión env2
para los gráficos que usen Helm 3.name
: Nombre del gráfico.version
: El número de versión del gráfico, que usa el control de versiones semántico 2.0.0 y sigue la notación de números de versiónMAJOR.MINOR.PATCH
.
En el ejemplo siguiente, se muestra el contenido de un archivo básico Chart.yaml
:
apiVersion: v2
name: webapp
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore, cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 1.0.0
Observe el uso del campo type
en el archivo de ejemplo. Puede crear gráficos para instalar aplicaciones o bibliotecas. El tipo de gráfico predeterminado es application
y se puede establecer en library
para especificar que el gráfico instalará una biblioteca.
Hay muchos campos opcionales disponibles para adaptar el proceso de implementación de gráficos. Por ejemplo, puede usar el campo dependencies
para especificar requisitos adicionales para el gráfico, como una aplicación web que depende de una base de datos.
Nota:
La cobertura detallada de todos los campos opcionales está fuera del ámbito de este módulo. Sin embargo, en la sección de resumen del módulo encontrará un vínculo a la documentación de Helm.
Procedimiento para definir una plantilla de gráfico
Una plantilla de gráfico de Helm es un archivo que describe distintos archivos de manifiesto de tipo de implementación. Las plantillas de gráfico se escriben en el lenguaje de plantilla Go y proporcionan funciones de plantilla para automatizar la creación de archivos de manifiesto del objeto de Kubernetes.
Los archivos de plantilla se almacenan en la carpeta templates/
de un gráfico. El motor de plantillas procesa estos archivos para crear el manifiesto de objeto final.
Por ejemplo, supongamos que el equipo de desarrollo usa el siguiente archivo de manifiesto de implementación para implementar el componente frontal de la tienda de mascotas de la solución:
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: store-front
template:
metadata:
labels:
app: store-front
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: store-front
image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
ports:
- containerPort: 8080
name: store-front
env:
- name: VUE_APP_ORDER_SERVICE_URL
value: "http://order-service:3000/"
- name: VUE_APP_PRODUCT_SERVICE_URL
value: "http://product-service:3002/"
resources:
requests:
cpu: 1m
memory: 200Mi
limits:
cpu: 1000m
memory: 512Mi
startupProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 3
initialDelaySeconds: 5
periodSeconds: 5
readinessProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 3
initialDelaySeconds: 3
periodSeconds: 3
livenessProbe:
httpGet:
path: /health
port: 8080
failureThreshold: 5
initialDelaySeconds: 3
periodSeconds: 3
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: {{ .Values.storeFront.serviceType }}
ports:
- port: 80
targetPort: 8080
selector:
app: store-front
Fíjese en cómo la ubicación de la imagen de contenedor está codificada de forma rígida con la sintaxis {{.Values.<property>}}
. La sintaxis permite crear marcadores de posición para cada valor personalizado.
El proceso de creación manual de gráficos de Helm es tedioso. Una manera sencilla de crear un nuevo gráfico de Helm es usar el comando helm create
. A continuación, puede personalizar los archivos generados automáticamente para que se ajusten a los requisitos de la aplicación.
Procedimiento para definir un archivo values.yaml
Los valores del gráfico se usan para personalizar la configuración de un gráfico de Helm. Los valores del gráfico pueden ser predefinidos o proporcionados por el usuario en el momento de la implementación del gráfico.
Un valor predefinido es un valor que distingue mayúsculas de minúsculas, que está predefinido en el contexto de un gráfico de Helm y que el usuario no puede modificar. Por ejemplo, puede usar Release.Name
para hacer referencia al nombre de la versión o Release.IsInstall
para comprobar si la operación actual es una instalación.
También puede usar valores predefinidos para extraer datos del contenido de Chart.yaml
. Por ejemplo, si quiere comprobar la versión del gráfico, puede hacer referencia a Chart.Version
. Tenga en cuenta que solo puede hacer referencia a campos conocidos. Imagine que los valores predefinidos son constantes que se van a usar en las plantillas que cree.
La sintaxis para incluir nombres de valores en un archivo de plantilla involucra la inclusión del nombre del valor entre llaves dobles, por ejemplo, {{.Release.Name}}
. Fíjese en el uso de un punto delante del nombre del valor. Al usar un punto de esta manera, este funciona como un operador de búsqueda e indica el ámbito actual de la variable.
Por ejemplo, el siguiente fragmento de código YAML contiene un diccionario definido en un archivo de valores:
object:
key: value
Para acceder al valor de una plantilla, puede usar la sintaxis siguiente:
{{ .Values.object.key }}
Un valor proporcionado le permite procesar valores arbitrarios en la plantilla del gráfico. El archivo values.yaml
define estos valores.
En el ejemplo, el equipo de desarrollo permite los siguientes valores configurables:
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: {{ .Values.replicaCount }}
...
containers:
- name: store-front
image: {{ .Values.storeFront.image.repository }}:{{ .Values.storeFront.image.tag }}
ports:
...
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: {{ .Values.storeFront.serviceType }}
...
Este es un ejemplo del archivo values.yaml
:
...
replicaCount: 1
...
storeFront:
image:
repository: "ghcr.io/azure-samples/aks-store-demo/store-front"
tag: "latest"
serviceType: LoadBalancer
...
Una vez que el motor de plantillas aplique los valores, el resultado final será similar al de este ejemplo:
apiVersion: apps/v1
kind: Deployment
metadata:
name: store-front
spec:
replicas: 1
...
containers:
- name: store-front
image: ghcr.io/azure-samples/aks-store-demo/store-front:latest
ports:
---
apiVersion: v1
kind: Service
metadata:
name: store-front
spec:
type: LoadBalancer
...
Procedimiento para usar un repositorio de Helm
Un repositorio de Helm es un servidor HTTP dedicado que almacena información sobre los gráficos de Helm. Los repositorios de Helm se configuran con el cliente de Helm para que pueda instalar gráficos a partir de un repositorio mediante el comando helm repo add
.
Por ejemplo, puede agregar el repositorio de Helm de Azure Marketplace al cliente de Helm local mediante la ejecución del siguiente comando:
helm repo add azure-marketplace https://marketplace.azurecr.io/helm/v1/repo
La información sobre los gráficos disponibles en un repositorio se almacena en la memoria caché del host del cliente. Debe actualizar periódicamente la memoria caché para capturar la información más reciente del repositorio mediante el comando helm repo update
.
El comando helm search repo
le permite buscar gráficos en todos los repositorios de Helm agregados localmente. Puede ejecutar el comando helm search repo
de forma independiente para devolver una lista de todos los gráficos de Helm conocidos para cada repositorio agregado. El resultado muestra el nombre del gráfico, la versión y la versión de la aplicación implementada por el gráfico, tal como se muestra en la salida de ejemplo siguiente:
NAME CHART VERSION APP VERSION DESCRIPTION
azure-marketplace/airflow 11.0.8 2.1.4 Apache Airflow is a platform to programmaticall...
azure-marketplace/apache 8.8.3 2.4.50 Chart for Apache HTTP Server
azure-marketplace/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
azure-marketplace/bitnami-common 0.0.7 0.0.7 Chart with custom tempaltes used in Bitnami cha...
azure-marketplace/cassandra 8.0.5 4.0.1 Apache Cassandra is a free and open-source dist...
Puede buscar un gráfico específico agregando un término de búsqueda al comando helm search repo
. Por ejemplo, si busca un gráfico basado en ASP.NET, puede usar el comando siguiente:
helm search repo aspnet
En este ejemplo, el cliente local tiene dos repositorios registrados y devuelve un resultado de cada uno, como se muestra en la salida de ejemplo siguiente:
NAME CHART VERSION APP VERSION DESCRIPTION
azure-marketplace/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
bitnami/aspnet-core 1.3.18 3.1.19 ASP.NET Core is an open-source framework create...
Procedimiento para probar un gráfico de Helm
Helm proporciona una opción para generar los archivos de manifiesto que el motor de plantillas crea a partir del gráfico. Esta característica le permite probar el gráfico antes de una versión mediante la combinación de dos parámetros adicionales: --dry-run
y debug
. El parámetro --dry-run
garantiza que se simula la instalación y que el parámetro --debug
habilita la salida detallada.
helm install --debug --dry-run my-release ./chart-name
El comando muestra información sobre los valores usados y todos los archivos generados. Es posible que tenga que desplazarse para ver todos los resultados generados.
Procedimiento para instalar un gráfico de Helm
Use el comando helm install
para instalar un gráfico. Puede instalar un gráfico de Helm desde cualquiera de las ubicaciones siguientes:
- Carpetas de gráficos
- Gráficos de archivo tar
.tgz
empaquetados - Repositorios de Helm
Sin embargo, los parámetros necesarios varían en función de la ubicación del gráfico. En todos los casos, el comando install
requiere el nombre del gráfico que quiere instalar y un nombre para la versión que la instalación crea.
Puede instalar un gráfico local mediante una carpeta de gráficos desempaquetada de archivos o un archivo .tar .tgz
empaquetado. Para instalar un gráfico, el comando helm
hace referencia al sistema de archivos local de la ubicación del gráfico. Este es un ejemplo del comando de instalación que implementará una versión de un gráfico desempaquetado:
helm install my-release ./chart-name
En el ejemplo anterior, el parámetro my-release
es el nombre de la versión, y el parámetro ./chart-name
es el nombre del paquete de gráficos desempaquetado.
Un gráfico empaquetado se instala haciendo referencia al nombre de archivo del gráfico empaquetado. En el ejemplo siguiente se muestra la sintaxis de la misma aplicación, que ahora está empaquetada como archivo .tar:
helm install my-release ./chart-name.tgz
Al instalar un gráfico desde un repositorio de Helm, se utiliza una referencia de gráfico como nombre del gráfico. La referencia del gráfico incluye dos parámetros, el nombre del repositorio y el nombre del gráfico, como se muestra en el ejemplo siguiente:
helm install my-release repository-name/chart-name
En el ejemplo, el parámetro repository-name/chart-name
contiene la referencia del repositorio, repository-name
, y el nombre del gráfico, chart-name
.