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
oKustomization
) 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
- Utilizar Config Sync con Kustomize y Helm
- Usar Config Sync en varios entornos con el renderizado automático