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
- Visita la siguiente URL para abrir el editor de Cloud Shell.
https://ide.cloud.google.com
- En la ventana de la terminal, crea un directorio de trabajo para este instructivo
mkdir kustomize-lab
- 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.
- Para comenzar, crearás una carpeta que contenga tus archivos de configuración de base
mkdir -p chat-app/base
- 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
- 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
- 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
.
- 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
- 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.
- Comienza por crear carpetas para los diferentes entornos
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- 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
- 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.
- 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
- 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.
- 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
- 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.
- Crea la carpeta shared-kustomize
mkdir shared-kustomize
- 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
- Crea un archivo kustomization.yaml en la carpeta compartida
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- 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
- 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)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>