En este tutorial, añadirás configuraciones de Kustomize que hagan referencia a charts de Helm en tu repositorio y, a continuación, usarás Config Sync para sincronizar tu clúster con tu repositorio.
Cuando usas Config Sync, las configuraciones de Kustomize y los gráficos de Helm que colocas en tu repositorio de Git se renderizan automáticamente. La renderización automática te ofrece las siguientes ventajas:
Ya no necesitas una canalización de hidratación externa. Si no usas el renderizado automático, tendrás que renderizar manualmente las configuraciones con Kustomize y Helm en tu estación de trabajo, o bien configurar un paso para activar el proceso de hidratación en tus sistemas de integración continua. Con el renderizado automático, Config Sync se encarga de la ejecución.
Se reducen los costes de mantenimiento. Si no usas la renderización automatizada, tendrás que mantener un repositorio de Git con las configuraciones de Kustomize y los gráficos de Helm originales, y otro repositorio de Git con el resultado generado por la hidratación externa. Después, debes configurar Config Sync para que se sincronice desde el repositorio de Git con el resultado renderizado. Con el renderizado automático, solo tienes que mantener un repositorio con las configuraciones originales.
Tu flujo de trabajo de desarrollo se simplifica. Sin el renderizado automático, los cambios realizados en las configuraciones originales deben revisarse dos veces antes de combinarse: una vez en el repositorio original y otra en el repositorio renderizado. Con el renderizado automático, Config Sync genera las configuraciones renderizadas y solo tienes que revisar los cambios en las configuraciones originales.
Configurar un repositorio
En las siguientes tareas se muestra cómo preparar un repositorio de Git con configuraciones que combinen configuraciones de Kustomize con charts de Helm:
Crea un repositorio de Git o asegúrate de tener acceso a uno. Como tu repositorio usa Kustomize y Helm, debe ser un repositorio no estructurado.
En la raíz de tu repositorio de Git, crea un archivo llamado
kustomization.yaml
y pega el siguiente código en él:# ./kustomization.yaml resources: - base patches: - path: ignore-deployment-mutation-patch.yaml target: kind: Deployment
Este archivo es una superposición de Kustomize que apunta a la base de Kustomize. Esta superposición incluye un parche para la base del gráfico de Helm que añade la anotación
client.lifecycle.config.k8s.io/mutation: ignore
a todos los objetos Deployment. La anotación hace que Config Sync ignore cualquier cambio conflictivo en este objeto del clúster después de que lo hayas creado.En tu repositorio de Git, crea un directorio llamado
base
:mkdir base
En el directorio
base
, crea otro archivo llamadokustomization.yaml
y pega el siguiente código en él:# ./base/kustomization.yaml helmCharts: - name: cert-manager repo: https://charts.jetstack.io version: v1.5.3 releaseName: my-cert-manager namespace: cert-manager
Este archivo es la base de Kustomize, que renderiza el gráfico de Helm remoto.
Vuelve a la raíz de tu repositorio de Git, crea un archivo llamado
ignore-deployment-mutation-patch.yaml
y pega el siguiente código en él:# ./ignore-deployment-mutation-patch.yaml apiVersion: apps/v1 kind: Deployment metadata: name: any annotations: client.lifecycle.config.k8s.io/mutation: ignore
Este archivo es un parche que se aplica al gráfico de Helm base. Añade la anotación
client.lifecycle.config.k8s.io/mutation: ignore
a todas las implementaciones del directorio base.Confirma los cambios en tu repositorio:
git add . git commit -m 'Set up manifests.' git push
El repositorio de ejemplos incluye un ejemplo de cómo sería un repositorio de este tipo.
Previsualizar y validar las configuraciones renderizadas
Antes de que Config Sync renderice las configuraciones y las sincronice con el clúster, asegúrate de que sean precisas. Para ello, ejecuta nomos hydrate
para previsualizar la configuración renderizada y nomos vet
para validar que el formato sea correcto.
Ejecuta el siguiente
nomos hydrate
con las siguientes marcas:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORY
En este comando:
--source-format=unstructured
permite quenomos hydrate
funcione en un repositorio no estructurado. Como usas configuraciones de Kustomize y charts de Helm, debes usar un repositorio no estructurado y añadir esta marca.--output=OUTPUT_DIRECTORY
te permite definir una ruta a las configuraciones renderizadas. SustituyeOUTPUT_DIRECTORY
por la ubicación en la que quieras guardar el resultado.
Comprueba la sintaxis y la validez de tus configuraciones ejecutando
nomos vet
con las siguientes marcas:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORY
En este comando:
--source-format=unstructured
permite quenomos vet
funcione en un repositorio no estructurado.--keep-output=true
guarda las configuraciones renderizadas.--output=OUTPUT_DIRECTORY
es la ruta a las configuraciones renderizadas.
Configurar la sincronización desde el repositorio de Git
Ahora que has creado un repositorio con las configuraciones que quieres usar, puedes configurar la sincronización desde tu clúster hasta tu repositorio.
Para configurar el objeto
RootSync
, crea un archivoroot-sync.yaml
:# root-sync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: YOUR_GIT_REPOSITORY branch: main auth: none override: enableShellInRendering: true
Sustituye
YOUR_GIT_REPOSITORY
por la URL de tu repositorio de Git.Aplica el archivo
root-sync.yaml
a tu clúster:kubectl apply -f root-sync.yaml
Verificar la instalación
Una vez que hayas instalado y configurado Config Sync, puedes verificar que la instalación se haya completado correctamente.
Verifica que no haya otros errores con
nomos status
:nomos status
Ejemplo:
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5a
Verifica si el componente de Helm se ha instalado correctamente:
kubectl get all -n cert-manager
Ejemplo:
NAME READY STATUS RESTARTS AGE pod/my-cert-manager-54f5ccf74-wfzs4 1/1 Running 0 10m pod/my-cert-manager-cainjector-574bc8678c-rh7mq 1/1 Running 0 10m pod/my-cert-manager-webhook-7454f4c77d-rkct8 1/1 Running 0 10m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/my-cert-manager ClusterIP 10.76.9.35 <none> 9402/TCP 10m service/my-cert-manager-webhook ClusterIP 10.76.11.205 <none> 443/TCP 10m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-cert-manager 1/1 1 1 10m deployment.apps/my-cert-manager-cainjector 1/1 1 1 10m deployment.apps/my-cert-manager-webhook 1/1 1 1 10m NAME DESIRED CURRENT READY AGE replicaset.apps/my-cert-manager-54f5ccf74 1 1 1 10m replicaset.apps/my-cert-manager-cainjector-574bc8678c 1 1 1 10m replicaset.apps/my-cert-manager-webhook-7454f4c77d 1 1 1 10m