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 se usa el renderizado automático, tienes 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 que se hagan 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 Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud 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
RootSync
yRepoSync
están habilitadas. spec.override.enableShellInRendering
se define comotrue
para 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.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 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
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 Google Cloud 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 elementos por error, Config Sync no te permite eliminar 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 BRANCH
Sustituye
BRANCH
por 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 BRANCH
Verifica que el espacio de nombres cert-manager no exista:
kubectl get namespace cert-namespace
Ejemplo:
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 Google Cloud , completa las siguientes tareas:
En la Google Cloud 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.