Kustomize es una herramienta de personalización de configuraciones de Kubernetes que permite gestionar configuraciones de manera declarativa. A diferencia de otras herramientas como Helm, Kustomize no requiere plantillas, lo que simplifica la gestión de configuraciones complejas.
¿Qué es Kustomize?
Kustomize permite aplicar configuraciones específicas a recursos de Kubernetes sin necesidad de modificar los archivos YAML originales. Esto se logra mediante la creación de "kustomizations" que definen cómo se deben modificar los recursos.
Características Clave de Kustomize
- Declarativo: Las configuraciones se definen de manera declarativa en archivos YAML.
- Sin Plantillas: No utiliza plantillas, lo que simplifica la gestión y reduce la complejidad.
- Superposiciones (Overlays): Permite definir configuraciones específicas para diferentes entornos (desarrollo, producción, etc.).
- Transformaciones: Aplica transformaciones a los recursos, como cambiar etiquetas, nombres, imágenes, etc.
Instalación de Kustomize
Kustomize se puede instalar como una herramienta independiente o se puede utilizar a través de kubectl
, ya que está integrado en kubectl
a partir de la versión 1.14.
Instalación Independiente
# Descargar la última versión de Kustomize curl -s "https://api.github.com/repos/kubernetes-sigs/kustomize/releases/latest" | \ grep browser_download_url | \ grep linux | \ cut -d '"' -f 4 | \ wget -qi - # Descomprimir el archivo descargado tar -xzf kustomize_v*.tar.gz # Mover el binario a una ubicación en el PATH sudo mv kustomize /usr/local/bin/
Uso con kubectl
Si tienes kubectl
versión 1.14 o superior, puedes usar Kustomize directamente:
Conceptos Básicos de Kustomize
Kustomization.yaml
El archivo kustomization.yaml
es el núcleo de Kustomize. Define los recursos y las transformaciones que se aplicarán.
Ejemplo de kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - deployment.yaml - service.yaml namePrefix: dev- commonLabels: app: my-app
Recursos
Los recursos son los archivos YAML de Kubernetes que se van a personalizar. Se especifican en la sección resources
del archivo kustomization.yaml
.
Transformaciones
Kustomize permite aplicar varias transformaciones a los recursos:
- namePrefix: Añade un prefijo a los nombres de los recursos.
- commonLabels: Añade etiquetas comunes a todos los recursos.
- images: Cambia las imágenes de los contenedores.
Ejemplo de Transformaciones
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - deployment.yaml - service.yaml namePrefix: dev- commonLabels: app: my-app images: - name: nginx newTag: 1.19.6
Superposiciones (Overlays)
Las superposiciones permiten definir configuraciones específicas para diferentes entornos. Por ejemplo, puedes tener una configuración base y superposiciones para desarrollo y producción.
Estructura de Directorios
. ├── base │ ├── deployment.yaml │ ├── service.yaml │ └── kustomization.yaml └── overlays ├── dev │ └── kustomization.yaml └── prod └── kustomization.yaml
Ejemplo de Superposición
base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - deployment.yaml - service.yaml
overlays/dev/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base namePrefix: dev- commonLabels: env: development
overlays/prod/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base namePrefix: prod- commonLabels: env: production
Ejercicio Práctico
Objetivo
Crear una configuración base y superposiciones para desarrollo y producción utilizando Kustomize.
Pasos
-
Crear la estructura de directorios:
mkdir -p my-app/{base,overlays/{dev,prod}}
-
Crear los archivos de recursos en
base
:base/deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: nginx:1.19.6 ports: - containerPort: 80
base/service.yaml
:apiVersion: v1 kind: Service metadata: name: my-app spec: selector: app: my-app ports: - protocol: TCP port: 80 targetPort: 80
base/kustomization.yaml
:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - deployment.yaml - service.yaml
-
Crear las superposiciones:
overlays/dev/kustomization.yaml
:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base namePrefix: dev- commonLabels: env: development
overlays/prod/kustomization.yaml
:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base namePrefix: prod- commonLabels: env: production
-
Aplicar las configuraciones:
kubectl apply -k overlays/dev kubectl apply -k overlays/prod
Solución
La solución consiste en verificar que los recursos se hayan creado correctamente con los prefijos y etiquetas correspondientes.
Conclusión
Kustomize es una herramienta poderosa para gestionar configuraciones de Kubernetes de manera declarativa y sin plantillas. Permite aplicar transformaciones y superposiciones de manera sencilla, facilitando la gestión de configuraciones en diferentes entornos. Con Kustomize, puedes mantener tus archivos YAML limpios y organizados, lo que mejora la mantenibilidad y la escalabilidad de tus despliegues en Kubernetes.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster