Usa un repositorio con las opciones de configuración 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 el repositorio de Git se renderizar de forma automática. La renderización automatizada 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 la renderización automatizada, el Sincronizador de configuración controla la ejecución.

  • Se reducen los costos de mantenimiento. Sin la renderización automatizada, 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 renderizado. Con la renderización automatizada, solo necesitas mantener un repositorio con los archivos de configuración originales.

  • Tu flujo de trabajo de desarrollo está simplificado. Sin la renderización 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 renderizado. 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 renderizar de forma automática las opciones de 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.
  • Usa un repositorio no estructurado. El procesamiento automático no es compatible con los repositorios jerárquicos.
  • Las API RootSync y RepoSync deben estar habilitadas. Si instalaste el Sincronizador de configuración de forma manual mediante kubectl y no tienes habilitados los API de RootSync y RepoSync, debes migrar tu objeto ConfigManagement.
  • 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 ninguna renderización.
  • Incluye tus archivos de configuración en kustomization.yaml. Si no incluyes estos archivos de configuración, no se sincronizan con el clúster.

Versiones de Helm y Kustomize en paquetes

El Sincronizador de configuración aprovecha los ejecutables de Helm y Kustomize para procesar las opciones de configuración internas. En la siguiente tabla, se proporciona una lista de las versiones del Sincronizador de configuración que admiten la función de procesamiento, junto con las versiones de Helm y Kustomize empaquetadas.

Versiones del Sincronizador de configuración Versión de Helm Versión de Kustomize
1.11.0 y posteriores v3.6.3 v4.5.2
Desde 1.9.0 hasta 1.10.2 v3.6.3 v4.3.0

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 las opciones de configuración de Kustomize con la renderización automática. 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 de 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 de 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 renderizar de forma automática los gráficos de Helm con los campos helmGlobals y helmCharts en los 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 que Kustomize creó 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 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.

Renderiza un gráfico de Helm remoto

El Sincronizador de configuración admite la renderización 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:

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

Renderiza un gráfico de Helm local

El Sincronizador de configuración admite la renderización de gráficos de Helm locales. Para usar una versión personalizada de un gráfico de Helm, puedes extraer la versión de actualización desde el 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 renderiza 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.

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

Renderiza varios gráficos de Helm

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

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

# ./kustomization.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
...

Campos disponibles

En el siguiente ejemplo, se muestra qué campos son compatibles con tu archivo kustomization.yaml:

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?