Escalamiento con Kustomize

1. Objetivos

Kustomize es una herramienta que presenta una forma de personalizar la configuración de las aplicaciones sin plantillas, lo que simplifica el uso de aplicaciones listas para usar. Está disponible como una utilidad independiente y está integrada en kubectl a través de kubectl apply -k. Se puede usar como una CLI independiente. Para obtener más información, lee kustomize.io.

En este instructivo, trabajarás con algunos de los conceptos básicos de Kustomize y lo usarás para administrar variaciones en las aplicaciones y los entornos.

Harás lo siguiente:

  • Utiliza el cliente de línea de comandos de Kustomize
  • Cómo anular elementos comunes
  • Aplica parches a estructuras yaml más grandes
  • Utiliza varias capas de superposiciones

2. Preparando tu lugar de trabajo

  1. Visita la siguiente URL para abrir el editor de Cloud Shell.

https://ide.cloud.google.com

  1. En la ventana de la terminal, crea un directorio de trabajo para este instructivo

mkdir kustomize-lab

  1. Cambia al directorio y configura el lugar de trabajo del IDE.

cd kustomize-lab && cloudshell workspace .

3. Utiliza el cliente de línea de comandos de Kustomize

La potencia de Kustomize proviene de la capacidad de superponer y modificar los archivos yaml base de Kubernetes con valores personalizados. Para hacerlo, se necesita un archivo base con instrucciones sobre la ubicación de los archivos y lo que se debe anular. Kustomize está incluido en el ecosistema de Kubernetes y se puede ejecutar a través de varios métodos.

En esta sección, crearás una configuración de Kustomize base y procesarás los archivos con el cliente independiente de línea de comandos kustomize.

  1. Para comenzar, crearás una carpeta que contenga tus archivos de configuración de base

mkdir -p chat-app/base

  1. Crea un deployment.yaml simple de Kubernetes en la carpeta base

cat <<EOF > chat-app/base/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`metadata:`

  `name: chat-app`

`spec:`

  `containers:`

  `- name: chat-app`

    `image: chat-app-image`

EOF

  1. Crea el kustomization.yaml base

Kustomize busca un archivo llamado kustomization.yaml como punto de entrada. Este archivo contiene referencias a los distintos archivos base y de anulación, así como valores de anulación específicos.

Crea un archivo kustomization.yaml que haga referencia a deployment.yaml como recursos base.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Ejecuta el comando kustomize en la carpeta base. Esto genera los archivos YAML de implementación sin cambios, lo cual es normal, ya que aún no incluiste ninguna variación.

kustomize build chat-app/base

Este cliente independiente se puede combinar con el cliente de kubectl para aplicar el resultado directamente, como en el siguiente ejemplo. Cuando lo hagas, el resultado del comando de compilación se transmitirá directamente al comando kubectl apply.

(No ejecutar: solo se incluye como referencia)

kustomize build chat-app/base | kubectl apply -f -

Esta técnica es útil si se necesita una versión específica del cliente de Kustomize.

De manera alternativa, kustomize se puede ejecutar con las herramientas integradas en kubectl. Como en el siguiente ejemplo.

(No ejecutar: solo se incluye como referencia)

kubectl apply -k chat-app/base

4. Anula elementos comunes

Ahora que tu lugar de trabajo está configurado y verificaste que Kustomize funciona, es momento de anular algunos de los valores base.

Las imágenes, los espacios de nombres y las etiquetas suelen personalizarse para cada aplicación y entorno. Dado que se modifican con frecuencia, Kustomize te permite declararlos directamente en kustomize.yaml, lo que elimina la necesidad de crear muchos parches para estas situaciones comunes.

Esta técnica suele usarse para crear una instancia específica de una plantilla. Ahora se puede usar un conjunto base de recursos para varias implementaciones con solo cambiar el nombre y su espacio de nombres.

En este ejemplo, agregarás un espacio de nombres, un prefijo de nombre y algunas etiquetas a tu kustomization.yaml.

  1. Actualiza el archivo kustomization.yaml para incluir etiquetas y espacios de nombres comunes.

Copia y ejecuta los siguientes comandos en tu terminal

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. Ejecuta el comando de compilación

Ejecutar la compilación en este punto muestra que el archivo YAML resultante ahora contiene el espacio de nombres, las etiquetas y los nombres con prefijos en las definiciones de implementación y servicio.

kustomize build chat-app/base

Observa que el resultado contiene etiquetas y espacios de nombres que no están en el archivo YAML de implementación. Observa también cómo se cambió el nombre de chat-app a my-chat-app

(No se copie el resultado)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. Aplicación de parches a estructuras yaml más grandes

Kustomize también ofrece la capacidad de aplicar parches que se superponen a los recursos base. Esta técnica suele usarse para proporcionar variabilidad entre las aplicaciones y los entornos.

En este paso, crearás variaciones de entorno para una sola aplicación que usa los mismos recursos base.

  1. Comienza por crear carpetas para los diferentes entornos

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. Escribe el parche de la etapa con el siguiente comando

cat <<EOF > chat-app/dev/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: dev`

EOF

  1. Ahora, escribe el parche de producción con el siguiente comando

cat <<EOF > chat-app/prod/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: prod`

EOF

Ten en cuenta que los parches anteriores no contienen el nombre de la imagen de contenedor. Ese valor se proporciona en el archivo base/deployment.yaml que creaste en el paso anterior. Sin embargo, estos parches contienen variables de entorno únicas para desarrollo y producción.

  1. Implementa los archivos YAML de Kustomize para el directorio base

Reescribe el archivo kustomization.yaml base y quita el espacio de nombres y el prefijo de nombre, ya que es solo el archivo de configuración base sin variación. Esos campos se moverán a los archivos de entorno en un momento.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. Implementa los archivos YAML de Kustomize para el directorio dev

Ahora implementa las variaciones para dev y prod. Para ello, ejecuta los siguientes comandos en la terminal.

cat <<EOF > chat-app/dev/kustomization.yaml

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

Observa que se agregó la sección patches: del archivo. Esto indica que Kustomize debe superponer esos archivos sobre los recursos base.

  1. Implementa los archivos YAML de Kustomize para el directorio de producción

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. Ejecuta kustomize para combinar los archivos

Una vez creados los archivos base y de entorno, puedes ejecutar el proceso de Kustomize para aplicar parches a los archivos base.

Ejecuta el siguiente comando para que dev vea el resultado combinado.

kustomize build chat-app/dev

Ten en cuenta que el resultado contiene resultados combinados, como etiquetas de las configuraciones base y de desarrollo, así como el nombre de la imagen de contenedor de la base y la variable de entorno de las carpetas de desarrollo.

6. Utilizar múltiples capas de superposiciones

Muchas organizaciones tienen un equipo que brinda asistencia a los equipos de apps y administra la plataforma. Con frecuencia, estos equipos querrán incluir detalles específicos que se incluyan en todas las apps de todos los entornos, como un agente de Logging.

En este ejemplo, crearás una carpeta y recursos shared-kustomize que se incluirán en todas las aplicaciones y sin importar el entorno en el que se implementen.

  1. Crea la carpeta shared-kustomize

mkdir shared-kustomize

  1. Crea un deployment.yaml simple en la carpeta compartida.

cat <<EOF > shared-kustomize/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: logging-agent`

    `image: logging-agent-image`

EOF

  1. Crea un archivo kustomization.yaml en la carpeta compartida

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Haz referencia a la carpeta shared-kustomize desde tu aplicación

Dado que deseas que la carpeta shared-kustomize sea la base de todas tus aplicaciones, deberás actualizar tu chat-app/base/kustomization.yaml para usar shared-kustomize como base. Luego, aplica un parche a su propio deployment.yaml por encima. Además, las carpetas del entorno volverán a aplicar parches.

Copia y ejecuta los siguientes comandos en tu terminal

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- ../../shared-kustomize

commonLabels:

app: chat-app

patches:

- deployment.yaml

EOF

  1. Ejecuta kustomize y visualiza los resultados combinados para dev

kustomize build chat-app/dev

Ten en cuenta que el resultado contiene resultados combinados de la base de la app, el entorno de la app y las carpetas shared-kustomize. En concreto, puedes ver en la sección de contenedores los valores de las tres ubicaciones.

(no lo copie en el resultado)

&lt;pre&gt;

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

&lt;/pre&gt;