Usar un repositorio con las configuraciones de Kustomize y los gráficos de Helm

Cuando usas el Sincronizador de configuración, las opciones de configuración de Kustomize y los gráficos de Helm que colocas en tu repositorio de Git se procesan de forma automática. El procesamiento automatizado te brinda los siguientes beneficios:

  • Ya no necesitas una canalización de hidratación externa. Sin el procesamiento automatizado, debes procesar de forma manual las opciones de configuración mediante Kustomize y Helm en tu estación de trabajo, o configurar un paso para activar el proceso de hidratación en tus sistemas de CI. Con el procesamiento automatizado, el Sincronizador de configuración controla la ejecución.

  • Se reducen los costos de mantenimiento. Sin la renderización automática, debes mantener un repositorio de Git con la configuración original de Kustomize y los gráficos de Helm y otro repositorio de Git con el resultado que genera la hidratación externa. Luego, debes configurar el Sincronizador de configuración para que se sincronice desde el repositorio de Git con el resultado procesado. Con el procesamiento automatizado, solo necesitas mantener un repositorio con los archivos de configuración originales.

  • Tu flujo de trabajo de desarrollo está simplificado. Sin el procesamiento automatizado, los cambios realizados en los archivos de configuración originales deben revisarse dos veces antes de combinarse una vez en el repositorio original y otra vez en el repositorio procesado. Con el procesamiento automatizado, los archivos de configuración renderizados se generan mediante el Sincronizador de configuración y solo necesitas revisar los cambios en los archivos de configuración originales.

Requisitos

Para procesar de forma automática la configuración de Kustomize y los gráficos de Helm, asegúrate de que el entorno cumpla con los siguientes requisitos:

  • Tiene una versión de Anthos Config Management 1.9.0 o posterior. Si es necesario, actualiza Anthos Config Management.
  • Tiene habilitado el modo de varios repositorios. Si usaste Google Cloud Console o la herramienta de línea de comandos de gcloud para instalar el Sincronizador de configuración, el modo de varios repositorios está habilitado de forma predeterminada en las versiones 1.7.0 y posteriores.
  • Para activar el proceso de renderización, tu repositorio de Git debe tener un archivo de configuración de Kustomization (kustomization.yaml, kustomization.yml o Kustomization) en la raíz del directorio de Git. Si el directorio raíz no tiene un archivo de configuración de Kustomization, el Sincronizador de configuración sincroniza los archivos de configuración como están sin ningún procesamiento.
  • Incluye tus archivos de configuración en kustomization.yaml. Si no incluyes estos archivos de configuración, no se sincronizan con el clúster.

Arquitectura de repositorio de ejemplo para las opciones de configuración de Kustomize

En el siguiente repositorio de ejemplo, se muestra cómo puedes configurar el repositorio para usar Kustomize con configuraciones automáticas de procesamiento. Este repositorio incluye tres superposiciones (team-a, team-b y team-c) que hacen referencia a la misma base.

En el siguiente diagrama, se muestra la estructura del directorio:

├── base
│   ├── kustomization.yaml
│   ├── namespace.yaml
│   ├── networkpolicy.yaml
│   ├── rolebinding.yaml
│   └── role.yaml
├── kustomization.yaml
├── README.md
├── team-a
│   └── kustomization.yaml
├── team-b
│   └── kustomization.yaml
└── team-c
    └── kustomization.yaml

El siguiente archivo kustomization.yaml se encuentra en la raíz del repositorio y contiene referencias a las tres superposiciones:

# ./kustomization.yaml
resources:
- team-a
- team-b
- team-c

El siguiente kustomize.yaml está en el directorio team-a y es la superposición de team-a:

# ./team-a/kustomization.yaml
namespace: team-a

resources:
- ../base

patches:
- target:
   kind: RoleBinding
   name: team-admin-rolebinding
 patch: |-
   - op: replace
     path: /subjects/0/name
     value: team-a-admin@mydomain.com
- target:
   kind: Namespace
   name: default
 patch: |-
   - op: replace
     path: /metadata/name
     value: team-a

El siguiente kustomization.yaml está en el directorio base y es la base Kustomize:

# ./base/kustomization.yaml
resources:
- namespace.yaml
- rolebinding.yaml
- role.yaml
- networkpolicy.yaml

Puedes explorar este repositorio en el directorio Configura políticas específicas de espacio de nombres del repositorio de muestra de Anthos Config Management.

Renderiza automáticamente gráficos de Helm

Puedes procesar de forma automática los gráficos de Helm con los campos helmGlobals y helmCharts en tus archivos kustomization.yaml.

Campos del gráfico de Helm

El Sincronizador de configuración admite la adición de los siguientes campos a los archivos kustomization.yaml:

Campo Descripción
helmGlobals Parámetros aplicados a todos los gráficos de Helm
helmGlobals.chartHome Acepta una string. Una ruta de acceso de archivo, en relación con la raíz de Kustomization, a un directorio que contiene un subdirectorio para cada gráfico que se incluirá en Kustomization. El valor predeterminado de este campo es charts.
helmGlobals.configHome Acepta una string. Define un valor que Kustomize debe pasar a Helm con la variable de entorno HELM_CONFIG_HOME. Kustomize no intenta leer ni escribir este directorio. Si se omite, se usa TMP_DIR/helm, en el que TMP_DIR es un directorio temporal creado por Kustomize para Helm.
helmCharts Un arreglo de parámetros de gráficos de Helm
helmCharts.name Acepta una string. Es el nombre del gráfico. Este campo es obligatorio.
helmCharts.version Acepta una string. La versión del gráfico
helmCharts.repo Acepta una string. La URL que se usa para ubicar el gráfico
helmCharts.releaseName Acepta una string. Reemplaza RELEASE_NAME en el resultado de la plantilla del gráfico.
helmCharts.namespace Acepta una string. Establece el espacio de nombres de destino de una versión (.Release.Namespace en la plantilla)
helmCharts.valuesInline Valores para usar en lugar de valores predeterminados que acompañan al gráfico
helmCharts.valuesFile Acepta una string. valuesFile es una ruta de acceso de archivo local o una URL remota a un archivo de valores para usar en lugar de los valores predeterminados que acompañaban al gráfico. Los valores predeterminados están en CHART_HOME/NAME/values.yaml.
helmCharts.valuesMerge Se acepta merge, override, (default) o replace. ValueFusion especifica cómo tratar los valores en línea con respecto a los valores.
helmCharts.includeCRDs Se acepta true o false. Especifica si Helm también debe generar CustomResourceDefinitions. El valor predeterminado es false.

Ejemplos de gráficos de Helm

En los ejemplos de las siguientes secciones, se muestran algunas de las diferentes formas en las que puedes usar los gráficos de Helm.

Renderice un gráfico de Helm remoto

El Sincronizador de configuración admite el procesamiento de gráficos de Helm remotos en clústeres que tienen acceso público a Internet.

El siguiente kustomization.yaml renderiza un cert-manager remoto mediante la configuración de los siguientes campos helmCharts:

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  repo: https://charts.jetstack.io
  version: v1.5.3
  releaseName: my-cert-manager
  namespace: cert-manager
...

Renderice un gráfico de Helm local

El Sincronizador de configuración admite el procesamiento de gráficos de Helm locales. Para usar una versión personalizada de un gráfico de Helm, puedes extraer la versión publicada del repositorio de gráficos de Helm (por ejemplo, ArtifactHub), realizar cambios de forma local y, luego, enviar los cambios a tu repositorio.

En el siguiente kustomization.yaml, se procesa un gráfico cert-manager local. El directorio predeterminado para los gráficos de Helm es charts y, como este gráfico se registra en el directorio charts, no necesitas especificar .helmCharts.repo ni .helmCharts.version.

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
...

Procesa varios gráficos de Helm

El Sincronizador de configuración admite el procesamiento de varios gráficos de Helm en un archivo kustomiztion.yaml, sin importar si el gráfico es remoto o local.

En el siguiente kustomization.yaml, se procesa un gráfico de Helm local (cert-manager):

# ./kustomizaiton.yaml
...
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
- name: prometheus
  repo: https://prometheus-community.github.io/helm-charts
  version: 14.3.0
  releaseName: my-prometheus
  namespace: monitoring
...

Formato de ejemplo

En el siguiente ejemplo, se muestra lo siguiente:

helmGlobals:
  chartHome: string
  configHome: string
helmCharts:
- name: string
  version: string
  repo: string
  releaseName: string
  namespace: string
  valuesInline: map[string]interface{}
  valuesFile: string
  valuesMerge: string
  includeCRDs: bool

¿Qué sigue?