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.
Objetivos
- Configura tu repositorio con configuraciones de Kustomize que hagan referencia a un chart de Helm predefinido para cert-manager. cert-manager es una herramienta para Kubernetes que te ayuda a gestionar tus certificados.
- Previsualiza y valida las configuraciones que crees.
- Usa Config Sync para renderizar automáticamente tu gráfico y sincronizar tu clúster con tu repositorio.
- Verifica que la instalación se ha realizado correctamente.
Costes
En este documento, se utilizan los siguientes componentes facturables de Cloud de Confiance by S3NS:
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que hayas creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
- Crea un clúster o asegúrate de tener acceso a uno que cumpla los requisitos de Config Sync y que use los siguientes ajustes de Config Sync:
- Usa un repositorio no estructurado.
- Las APIs
RootSyncyRepoSyncestán habilitadas. spec.override.enableShellInRenderingse define comotruepara que Config Sync pueda extraer bases remotas de repositorios públicos en el proceso de renderización.
- Registre su clúster en una flota.
- Instala la herramienta de línea de comandos
nomos. Si ya has instalado la herramientanomos, asegúrate de actualizarla a la versión 1.9.0 o a una posterior. - Instala Helm.
También es útil tener conocimientos de Git, Kustomize y Helm.
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.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 añade la anotación
client.lifecycle.config.k8s.io/mutation: ignorea todos los objetos Deployment. La anotación hace que Config Sync ignore cualquier cambio conflictivo en este objeto del clúster después de haberlo creado.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 de Helm remoto.
Vuelve 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 de Helm base. Añade la anotación
client.lifecycle.config.k8s.io/mutation: ignorea 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 hydratecon las siguientes marcas:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORYEn este comando:
--source-format=unstructuredpermite quenomos hydratefuncione en un repositorio no estructurado. Como estás usando configuraciones de Kustomize y charts de Helm, debes usar un repositorio no estructurado y añadir esta marca.--output=OUTPUT_DIRECTORYte permite definir una ruta a las configuraciones renderizadas. SustituyeOUTPUT_DIRECTORYpor la ubicación en la que quieras guardar el resultado.
Comprueba la sintaxis y la validez de tus configuraciones ejecutando
nomos vetcon las siguientes marcas:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORYEn este comando:
--source-format=unstructuredpermite quenomos vetfuncione en un repositorio no estructurado.--keep-output=trueguarda las configuraciones renderizadas.--output=OUTPUT_DIRECTORYes 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: trueSustituye
YOUR_GIT_REPOSITORYpor la URL de tu repositorio de Git.Aplica el archivo
root-sync.yamla 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 statusEjemplo:
*CLUSTER_NAME -------------------- <root> https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init SYNCED fd17dd5aVerifica si el componente de Helm se ha instalado correctamente:
kubectl get all -n cert-managerEjemplo:
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
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
Eliminar el proyecto
- In the Cloud de Confiance console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Eliminar recursos concretos
Elimina los manifiestos de tu repositorio
Para evitar que se eliminen por error, Config Sync no te permite quitar todos los espacios de nombres ni los recursos con ámbito de clúster en una sola confirmación. Sigue estas instrucciones para desinstalar el componente correctamente y eliminar el espacio de nombres en confirmaciones independientes:
Elimina el componente cert-manager de tu repositorio:
git rm -rf manifests/cert-manager \ && git commit -m "uninstall cert-manager" \ && git push origin BRANCHSustituye
BRANCHpor la rama en la que has creado tu repositorio.Elimina el espacio de nombres cert-manager:
git rm manifests/namespace-cert-manager.yaml \ && git commit -m "remove the cert-manager namespace" \ && git push origin BRANCHVerifica que el espacio de nombres cert-manager no exista:
kubectl get namespace cert-namespaceEjemplo:
Error from server (NotFound): namespaces "cert-namespace" not found
Elimina el clúster
Para eliminar el clúster, ejecuta los siguientes comandos:
Consola
Para eliminar un clúster mediante la consola Cloud de Confiance , completa las siguientes tareas:
En la Cloud de Confiance consola, ve a la página de GKE.
Junto al clúster que quieras eliminar, haz clic en more_vert Acciones y, a continuación, en delete Eliminar.
Cuando se te solicite confirmación, vuelve a hacer clic en Eliminar.
gcloud
Para eliminar un clúster con la CLI de Google Cloud, ejecuta el siguiente comando:
gcloud container clusters delete CLUSTER_NAME
Para obtener más información, consulta la documentación de gcloud container clusters delete.
Siguientes pasos
- Consulta más información sobre cómo trabajar con repositorios no estructurados.