Configure Kubernetes con Kustomize

El propósito de este documento es ayudarte a comenzar a usar Kustomize, comprender sus casos de uso previstos y encontrar recursos para usarlo con otras herramientas de Google Cloud.

Kustomize es una herramienta de transformación de configuración de Kubernetes que te permite personalizar archivos YAML sin plantillas y dejar los archivos originales sin modificar. Kustomize también puede generar recursos como ConfigMaps y Secrets a partir de otras representaciones. Kustomize está compilado para la API de Kubernetes, por lo que puede comprender y modificar objetos con estilo de Kubernetes.

Acerca de Kustomize

Compilada por Google y la comunidad de Kubernetes, Kustomize se alinea con los principios de Kubernetes sobre el uso de objetos de Kubernetes para definir los archivos de configuración y administrar esta configuración de forma declarativa.. El objeto de configuración de Kustomize se denomina Kustomization, y describe cómo generar o transformar otros objetos de Kubernetes. Una Kustomization se define de forma declarativa en un archivo llamado kustomization.yaml, que Kustomize puede generar y editar.

En Kustomize, puedes definir una Kustomization común y reutilizable (llamada base) y aplicar un parche con otras kustomizaciones (llamadas superposiciones), que pueden reemplazar de forma selectiva la configuración definida en la base para producir variantes. Luego, Kustomize transforma y genera recursos, un proceso llamado hidratación o renderización, según la configuración definida en las bases y superposiciones de kustomization. Estos recursos renderizados se escriben en el resultado estándar o en los archivos para dejar los archivos YAML originales sin modificar, de modo que muchas superposiciones diferentes pueden volver a usar una base.

imagen

Este enfoque sin plantillas es potente en cuanto a la facilidad de uso y la reutilización de las bases de kustomization. Te permite personalizar la configuración de Kubernetes de la manera que desees, sin necesidad de proporcionar un gran conjunto de valores para cada caso de uso individual.

Beneficios de Kustomize

Entre los beneficios de administrar la configuración de Kubernetes con Kustomize, se incluyen los siguientes:

  • Kustomize no tiene plantillas. Cuando se usan plantillas y archivos de valores, casi todas las especificaciones en un archivo YAML se pueden convertir en un parámetro que necesita un valor, y los archivos de valores pueden ser muy grandes. En lugar de usar plantillas como texto o expresar la configuración como código, Kustomize manipula los datos de configuración. El YAML sin procesar es legible y reutilizable, ya sea que Kustomize lo renderice o no. El modelo de Kustomize es diferente; no es necesario parametrizar todo, lo que facilita la reutilización de la configuración común.

  • Kustomize se puede ejecutar de forma nativa desde la interfaz de línea de comandos de Kubernetes. Kustomize se compila en kubectl, a partir de la versión 1.14. Por lo tanto, siempre que uses kubectl, no debes instalar ni administrar Kustomize como una dependencia independiente.

  • Kustomize es totalmente declarativo. Dado que es una herramienta nativa de Kubernetes, Kustomize se alinea con el enfoque de Kubernetes para la configuración declarativa. En lugar de describir de forma imperativa y paso a paso cómo la herramienta debe personalizar sus recursos, declara lo que quieras y Kustomize lo proporciona.

  • Kustomize te permite reutilizar la misma configuración base para administrar varios parámetros de configuración diferentes. Puedes usar un archivo base en varios entornos diferentes (por ejemplo, desarrollo, etapa de pruebas y producción) y tener superposiciones únicas y mínimas para personalizar la base de cada entorno.

  • Kustomize es fácil de usar. Sigue una curva de aprendizaje muy sencilla. Puedes comenzar con una configuración simple y compilar funciones más complejas de forma gradual más adelante, una capa a la vez.

  • Kustomize es extensible y personalizable. Kustomize admite un framework de complementos para que escribas tus propios generadores y transformadores con el estilo de los atributos de modelo de recursos de Kubernetes (KRM) alojados en contenedores y que son ejecutables. Para obtener más información sobre cómo crear tus propios complementos, puedes leer la Guía oficial de complementos de Kustomize.

Instalación en entornos locales

Para instalar Kustomize en tu entorno local, ejecuta el siguiente comando:

gcloud components install kustomize

Compatibilidad de Kustomize en Google Cloud

Kustomize está preinstalado en Cloud Shell y es compatible con Skaffold. También se admite como compilador para Cloud Build.

A partir de la versión 1.9.0 de Anthos Config Management, el Sincronizador de configuración usa Kustomize de forma automática para renderizar los recursos en un repositorio si contiene un archivo de kustomization. Puedes obtener más información sobre esta función en Usa un repositorio con los parámetros de configuración de Kustomize y los gráficos de Helm.

Información sobre Kustomize

Bases y superposiciones

El enfoque de transformación de configuración de Kustomize aprovecha el uso de las capas de kustomization para que los mismos archivos de configuración base se puedan volver a usar en varios parámetros de configuración de kustomization. Esto se logra con los conceptos de bases y superposiciones.

  • Una base es un directorio que contiene un archivo llamado kustomization.yaml, que puede enumerar un conjunto de recursos con algunas personalizaciones que se aplicarán a ellos. Una base se debe declarar en el campo resources de un archivo de kustomization.
  • Una superposición es un directorio que hace referencia a otro directorio de kustomization como su base o una de sus bases.

Una base se puede considerar como el paso preliminar en una canalización, sin conocer las superposiciones a las que hace referencia. Una vez que termina el procesamiento de una base, envía sus recursos como entrada a la superposición para que se transforme según la especificación de la superposición.

El siguiente es un ejemplo de una base de kustomization:

# base/kustomization.yaml
resources:
- deployment.yaml
namePrefix: bar-
#base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx

Esta base se puede reutilizar por varias superposiciones de personalización. El siguiente es un ejemplo de una superposición que se puede referir a esta base:

# overlay/kustomization.yaml
resources:
- ../base
- configmap.yaml
namePrefix: foo-
#overlay/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: cm
data:
  red: blue

Cuando ejecutas el comando kustomize build overlay, se produce el siguiente resultado:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: foo-bar-nginx
spec:
  template:
    metadata:
    spec:
      containers:
      - image: nginx
        name: nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: foo-cm
data:
  red: blue

La implementación recibió el prefijo de nombre bar- de la kustomization base y, luego, otro prefijo de nombre foo- de la kustomization de superposición. El ConfigMap solo recibió el prefijo de nombre foo- porque se declaró en la superposición y, por lo tanto, solo lo procesó esta superposición.

Genera Secret y ConfigMaps

Puedes generar Secrets y ConfigMaps desde un archivo mediante los campos secretGenerator o configMapGenerator en el archivo de kustomization. Por ejemplo:

# kustomization.yaml
configMapGenerator:
- name: my-app
  files:
  -.properties

genera el siguiente resultado de YAML:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-app-g82klmn92h
data:
  .properties: |-
      red=blue

Edita el archivo de kustomization

Kustomize proporciona varios comandos imperativos que te permiten administrar el archivo de personalización.

  • Para agregar todos los archivos YAML en tu directorio actual al campo resources de Kustomization, ejecuta el siguiente comando:

    kustomize edit add resource *.yaml
    
  • Para ver la página de ayuda de edición de kustomize y ver todos los subcomandos que ofrece, ejecuta el siguiente comando:

    kustomize edit -h
    
  • Para obtener ayuda específica sobre los subcomandos, agrega el subcomando como argumento. Por ejemplo:

    kustomize edit add -h
    

¿Qué sigue?

Documentación oficial

Para obtener más información sobre los campos compatibles con el archivo kustomization.yaml, puedes visitar los documentos oficiales de Kustomize, que proporcionan descripciones y ejemplos de los diversos campos que puedes usar.

Características no compatibles

Para obtener una lista de las funciones que no son compatibles con Kustomize de forma intencional, puedes leer sobre los atributos estructurados de Kustomize.