Configurar Kubernetes con Kustomize

Kustomize es una herramienta de transformación de configuración de Kubernetes que te permite personalizar archivos YAML sin plantillas, dejando los archivos originales intactos. Kustomize también puede generar recursos, como ConfigMaps y Secrets, a partir de otras representaciones. Kustomize se ha creado para la API de Kubernetes, por lo que puede entender y modificar objetos de estilo Kubernetes.

Si quieres usar charts de Helm con Config Sync, puedes hacerlo de dos formas: renderizando Helm a través de Kustomize o usando la API de Helm. En esta página se detallan los requisitos para renderizar gráficos de Helm a través de Kustomize. Para obtener más información sobre cómo usar la API de Helm, consulta Sincronizar gráficos de Helm desde Artifact Registry.

Se aplican las siguientes diferencias al usar Kustomize para renderizar charts de Helm:

  • No se admiten registros de Helm privados ni basados en OCI. Con la API Helm, se admiten registros privados y basados en OCI.
  • Los valores de Helm se pueden gestionar en la fuente de información veraz. Con la API de Helm, los valores se gestionan como parte de la API RootSync o RepoSync.
  • Se admite la renderización de varios gráficos de Helm en un objeto RootSync o RepoSync. Con la API de Helm, solo puedes renderizar un gráfico de Helm en un objeto RootSync o RepoSync.

Requisitos de Config Sync para Kustomize

Para renderizar automáticamente las configuraciones de Kustomize y los gráficos de Helm, asegúrese de que su entorno de Config Sync cumpla los siguientes requisitos:

  • Usa una fuente de información veraz no estructurada. La renderización automática no está disponible para las fuentes jerárquicas.
  • Para activar el proceso de renderización, tu fuente de información veraz debe tener un archivo de configuración de personalización (kustomization.yaml, kustomization.yml o Kustomization) en la raíz de tu directorio. Si el directorio raíz no tiene un archivo de configuración de Kustomization, Config Sync sincroniza las configuraciones tal cual, sin renderizar.
  • Incluye tus configuraciones en el archivo kustomization.yaml. Si no incluyes estos archivos de configuración, las configuraciones no se sincronizarán con el clúster.

Renderizar configuraciones de Kustomize

En el siguiente ejemplo se muestra cómo puede configurar su fuente de información veraz para usar configuraciones de Kustomize con renderización automática.

Arquitectura de ejemplo de configuraciones de Kustomize

Este directorio incluye cuatro superposiciones (team-a, team-b, team-c y external-team) que hacen referencia a la misma base, así como un archivo usado por el generador de ConfigMap.

En el siguiente diagrama se muestra la estructura de directorios:

├── example
│   ├── 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
├── external-team
│   └── kustomization.yaml
└── external-data.txt

El siguiente archivo kustomization.yaml se encuentra en la raíz de la fuente de información veraz y contiene referencias a las cuatro superposiciones con un generador de ConfigMap de un archivo local:

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

configMapGenerator:
- name: my-configmap
  namespace: my-namespace
  files:
    - ../external-data.txt

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

# ./example/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 se encuentra en el directorio base y es la base de Kustomize:

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

Puedes consultar un repositorio de ejemplo en el directorio configuring namespace-specific policies (configurar políticas específicas del espacio de nombres) de GitHub.

Renderizar gráficos de Helm mediante Kustomize

En esta sección se explica cómo renderizar gráficos de Helm a través de Kustomize. En Versiones de Helm y Kustomize incluidas se indican las versiones de Kustomize y Helm incluidas en la versión correspondiente de Config Sync.

Campos de gráficos de Helm

Puede añadir los siguientes campos de gráficos de Helm a sus archivos kustomization.yaml para admitir la representación de gráficos de Helm a través de Kustomize:

Campo Descripción
helmGlobals Parámetros aplicados a todos los gráficos de Helm
helmGlobals.chartHome Acepta una cadena. Ruta, relativa a la raíz de Kustomization, a un directorio que contenga un subdirectorio para cada gráfico que se vaya a incluir en Kustomization. El valor predeterminado de este campo es charts.
helmGlobals.configHome Acepta una cadena. Define un valor que Kustomize debe transferir a Helm con la variable de entorno HELM_CONFIG_HOME. Kustomize no intenta leer ni escribir en este directorio. Si se omite, se usa TMP_DIR/helm, donde TMP_DIR es un directorio temporal creado por Kustomize para Helm.
helmCharts Matriz de parámetros de gráficos de Helm
helmCharts.name Acepta una cadena. Nombre del gráfico. Este campo es obligatorio.
helmCharts.version Acepta una cadena. La versión del gráfico
helmCharts.repo Acepta una cadena. La URL usada para localizar el gráfico
helmCharts.releaseName Acepta una cadena. Sustituye RELEASE_NAME en la salida de la plantilla de gráfico.
helmCharts.namespace Acepta una cadena. Define el espacio de nombres de destino de una versión (Release.Namespace en la plantilla).
helmCharts.valuesInline Valores que se usarán en lugar de los valores predeterminados que acompañan al gráfico.
helmCharts.valuesFile Acepta una cadena. ValuesFile es una ruta local o una URL remota a un archivo de valores que se va a 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 Acepta merge, override, (default) o replace. ValuesMerge especifica cómo tratar ValuesInline con respecto a Values.
helmCharts.includeCRDs Acepta true o false. Especifica si Helm también debe generar CustomResourceDefinitions. El valor predeterminado es false.

Renderizar un gráfico de Helm remoto

Config Sync 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 helmCharts definiendo los siguientes campos:

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

Renderizar un gráfico de Helm local

Config Sync 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 publicada del gráfico de Helm (por ejemplo, ArtifactHub), hacer cambios localmente y, a continuación, enviar los cambios a tu fuente de información veraz.

En el siguiente diagrama se muestra la estructura de directorios:

├── base
│   ├── charts
│   │   └── cert-manager
│   └── kustomization.yaml
├── overlays
│   └── stage
│       └── kustomization.yaml
└── base_value_overrides.yaml

El siguiente kustomization.yaml renderiza un gráfico cert-manager local. El directorio predeterminado de los gráficos de Helm es charts y, como este gráfico se ha registrado en el directorio charts, no es necesario que especifiques .helmCharts.repo ni .helmCharts.version.

# ./overlays/stage/kustomization.yaml
...
# This field is optional if your Helm charts are located in the default 'charts' directory.
helmGlobals:
  chartHome: ../../base/charts
helmCharts:
- name: cert-manager
  releaseName: my-cert-manager
  namespace: cert-manager
  # Specify a local path or a remote URL to a values file instead of using the default values in CHART_HOME/NAME/values.yaml.
  valuesFile: ../../base_value_overrides.yaml
...

Renderizar varios gráficos de Helm

Config Sync admite la renderización de varios gráficos de Helm en un archivo kustomization.yaml, independientemente de si el gráfico es remoto o local.

El siguiente kustomization.yaml 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
...

Siguientes pasos