1. Objetivos
Kustomize es una herramienta que presenta una forma sin plantillas de personalizar la configuración de la aplicación, 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 de se puede usar como una CLI independiente. Para obtener más detalles, consulta kustomize.io.
En este instructivo, trabajarás con algunos de los conceptos básicos de Kustomize y lo usarás para administrar las variaciones en las aplicaciones y los entornos.
Harás lo siguiente:
- Utilizar el cliente de línea de comandos de kustomize
- Anular elementos comunes
- Aplicar parches a estructuras YAML más grandes
- Utilizar varias capas de superposiciones
2. Prepara tu espacio de trabajo
- Para abrir el editor de Cloud Shell, visita la siguiente URL:
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 espacio 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 de Kubernetes base con valores personalizados. Para ello, kustomize requiere un archivo base con instrucciones sobre dónde están los archivos y qué anular. Kustomize se incluye 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 base de kustomize y procesarás los archivos con el cliente de línea de comandos de kustomize independiente.
- Para comenzar, crearás una carpeta para contener tus archivos de configuración base:
mkdir -p chat-app/base
- Crea un
deployment.yamlsimple 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.yamlbase:
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 los recursos base.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- Ejecuta el comando kustomize en la carpeta base. Si lo haces, se generarán los archivos YAML de implementación sin cambios, lo que se espera, ya que aún no incluiste ninguna variación.
kustomize build chat-app/base
Este cliente independiente se puede combinar con el cliente kubectl para aplicar el resultado directamente, como en el siguiente ejemplo. Si lo haces, se transmite el resultado del comando de compilación directamente al comando kubectl apply.
(No ejecutar; se incluye solo 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.
Como alternativa, kustomize se puede ejecutar con las herramientas integradas en kubectl. Como en el siguiente ejemplo:
(No ejecutar; se incluye solo como referencia)
kubectl apply -k chat-app/base
4. Anula elementos comunes
Ahora que tu espacio 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 se personalizan con mucha frecuencia para cada aplicación y entorno. Dado que se cambian 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 se suele usar para crear una instancia específica de una plantilla. Ahora se puede usar un conjunto base de recursos para varias implementaciones simplemente cambiando 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.yamlpara 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:
Si ejecutas la compilación en este punto, se muestra que el archivo YAML resultante ahora contiene el espacio de nombres, las etiquetas y los nombres con prefijo en las definiciones de servicio y de implementación.
kustomize build chat-app/base
Ten en cuenta que el resultado contiene etiquetas y espacios de nombres que no están en el archivo YAML de implementación. También ten en cuenta que el nombre cambió de chat-app a my-chat-app
(No copiar el resultado)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. Aplica parches a estructuras YAML más grandes
Kustomize también proporciona la capacidad de aplicar parches que superponen los recursos base. Esta técnica se suele usar 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.
- Para comenzar, crea carpetas para los diferentes entornos:
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- Escribe el parche de 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 el desarrollo y la producción.
- Implementa los archivos YAML de kustomize para el directorio base:
Vuelve a escribir el archivo kustomization.yaml base, quita el espacio de nombres y el prefijo de nombre, ya que esta es solo la 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 de desarrollo:
Ahora implementa las variaciones para el desarrollo y la producción ejecutando los siguientes comandos en tu terminal:
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
Ten en cuenta la adición de 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:
Con los archivos base y de entorno creados, puedes ejecutar el proceso de kustomize para aplicar parches a los archivos base.
Ejecuta el siguiente comando para el desarrollo para ver 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. Utiliza varias capas de superposiciones
Muchas organizaciones tienen un equipo que ayuda a admitir los equipos de la app y administrar la plataforma. Con frecuencia, estos equipos querrán incluir detalles específicos que se incluirán en todas las apps en todos los entornos, como un agente de registro.
En este ejemplo, crearás una carpeta shared-kustomize y recursos que se incluirán en todas las aplicaciones, independientemente del entorno en el que se implementen.
- Crea la carpeta shared-kustomize:
mkdir shared-kustomize
- Crea un
deployment.yamlsimple 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:
Como 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. Las carpetas de 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 el desarrollo:
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 particular, puedes ver en la sección de contenedores valores de las tres ubicaciones.
(No copiar el resultado)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>