En este instructivo, agregarás a tu repositorio opciones de configuración de Kustomize que hacen referencia a los gráficos de Helm y, luego, usarás el Sincronizador de configuración para sincronizar tu clúster con el repositorio.
Cuando usas el Sincronizador de configuración, las opciones de configuración de Kustomize y los gráficos de Helm que colocas en el repositorio de Git se renderizar de forma automática. La renderización automatizada te brinda los siguientes beneficios:
Ya no necesitas una canalización de hidratación externa. Sin el procesamiento automatizado, debes procesar de forma manual las opciones de configuración mediante Kustomize y Helm en tu estación de trabajo o configurar un paso para activar el proceso de hidratación en tus sistemas de CI. Con la renderización automatizada, el Sincronizador de configuración controla la ejecución.
Se reducen los costos de mantenimiento. Sin la renderización automatizada, debes mantener un repositorio de Git con la configuración original de Kustomize y los gráficos de Helm, y otro repositorio de Git con el resultado que genera la hidratación externa. Luego, debes configurar el Sincronizador de configuración para que se sincronice desde el repositorio de Git con el resultado renderizado. Con la renderización automatizada, solo necesitas mantener un repositorio con los archivos de configuración originales.
Tu flujo de trabajo de desarrollo está simplificado. Sin la renderización automatizado, los cambios realizados en los archivos de configuración originales deben revisarse dos veces antes de combinarse; una vez en el repositorio original y otra vez en el repositorio renderizado. Con el procesamiento automatizado, los archivos de configuración renderizados se generan mediante el Sincronizador de configuración y solo necesitas revisar los cambios en los archivos de configuración originales.
Configura tu repositorio
En las siguientes tareas, se muestra cómo preparar un repositorio de Git con archivos de configuración que combinan configuraciones de Kustomize con gráficos de Helm:
Crea un repositorio Git o asegúrate de tener acceso a él. Debido a que en tu repositorio se usa Kustomize y Helm, este debería ser un repositorio no estructurado.
En la raíz de tu repositorio de Git, crea un archivo llamado
kustomization.yamly pega el siguiente código en él:# ./kustomization.yaml resources: - base patches: - path: ignore-deployment-mutation-patch.yaml target: kind: DeploymentEste 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 agrega la anotación
client.lifecycle.config.k8s.io/mutation: ignorea todos los objetos Deployment. La anotación hace que el Sincronizador de configuración ignore cualquier cambio conflictivo en este objeto en el clúster después de crearlo.En tu repositorio de Git, crea un directorio llamado
base:mkdir baseEn el directorio
base, crea otro archivo llamadokustomization.yamly 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-managerEste archivo es la base de Kustomize, que renderiza el gráfico remoto de Helm.
Navega a la raíz de tu repositorio de Git, crea un archivo llamado
ignore-deployment-mutation-patch.yamly 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: ignoreEste archivo es un parche que se aplica al gráfico base de Helm. Agrega la anotación
client.lifecycle.config.k8s.io/mutation: ignorea todos los objetos Deployment en el directorio base.Confirma los cambios en tu repositorio:
git add . git commit -m 'Set up manifests.' git push
El repositorio de muestras contiene un ejemplo de cómo se vería ese repositorio.
Obtén una vista previa y valida los archivos de configuración renderizados
Antes de que el Sincronizador de configuración renderice los archivos de configuración y los sincronice con el clúster, asegúrate de que los archivos de configuración sean precisos mediante la ejecución de nomos hydrate para obtener una vista previa de la configuración renderizada y ejecuta nomos vet a fin de validar que el formato sea correcto.
Ejecuta el siguiente
nomos hydratecon los siguientes marcadores:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORYEn el ejemplo anterior, se ilustra lo siguiente:
--source-format=unstructuredpermite quenomos hydratefuncione en un repositorio no estructurado. Dado que usas archivos de configuración de Kustomize y gráficos de Helm, debes usar un repositorio no estructurado y agregar esta marca.--output=OUTPUT_DIRECTORYte permite definir una ruta de acceso a los archivos de configuración renderizados. ReemplazaOUTPUT_DIRECTORYpor la ubicación en la que deseas que se guarde el resultado.
Para verificar la sintaxis y la validez de tus archivos de configuración, ejecuta
nomos vetcon las siguientes marcas:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORYEn el ejemplo anterior, se ilustra lo siguiente:
--source-format=unstructuredpermite quenomos vetfuncione en un repositorio no estructurado.--keep-output=trueguarda los archivos de configuración renderizados.--output=OUTPUT_DIRECTORYes la ruta de acceso a los archivos de configuración renderizados.
Configura la sincronización desde el repositorio de Git
Ahora que creaste un repositorio con los archivos de configuración que deseas usar, puedes configurar la sincronización del clúster al repositorio.
Para configurar tu 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: trueReemplaza
YOUR_GIT_REPOSITORYpor la URL de tu repositorio de Git.Aplica el archivo
root-sync.yamlal clúster:kubectl apply -f root-sync.yaml
Verifique la instalación
Después de instalar y configurar el Sincronizador de configuración, puedes verificar que la instalación se haya completado correctamente.
Verifica que no haya otros errores mediante
nomos status:nomos statusResultado de ejemplo:
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5aVerifica si el componente de Helm se instaló correctamente:
kubectl get all -n cert-managerResultado de 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