Usa el Sincronizador de configuración con Kustomize y Helm

Aprende a usar el Sincronizador de configuración a fin de instalar un componente de Helm listo para usar.

En este instructivo, agregarás Kustomize opciones de configuración que hacen referencia a los gráficos de Helm a tu repositorio y, luego, usarás el Sincronizador de configuración para sincronizar tu clúster con el repositorio.

Objetivos

  • Configura tu repositorio con las configuraciones de Kustomize que hacen referencia a un gráfico de Helm listo para usar para cert-manager. cert-manager es una herramienta para Kubernetes que te ayuda a administrar tu certificados.
  • Obtén una vista previa y valida los archivos de configuración que creas.
  • Usa el Sincronizador de configuración para procesar el gráfico de forma automática y sincronizar el clúster con el repositorio.
  • Verifica que la instalación se haya realizado correctamente.

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud sean aptos para obtener una prueba gratuita.

Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta cómo hacer una limpieza.

Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Antes de comenzar

  1. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  3. Crea o asegúrate de tener acceso a un clúster que cumpla con los requisitos del Sincronizador de configuración y que tenga la versión 1.9.0 o una posterior.
  4. Registra tu clúster en una flota.
  5. Instala el comando nomos. Si ya instalaste nomos, asegúrate de actualizarlo a la versión 1.9.0 o posterior.
  6. Instalar Helm.

También es útil tener conocimientos de Git, Kustomize y Helm.

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:

  1. Crea un repositorio de 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.

  2. 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 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: ignore a todos los objetos de implementación. 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.

  3. En tu repositorio de Git, crea un directorio llamado base:

    mkdir base
    
  4. En el directorio base, crea otro archivo llamado kustomization.yaml y pega el código siguiente 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 Kustomize, que procesa el gráfico remoto de Helm.

  5. Navega 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 base de Helm. Agrega la anotación client.lifecycle.config.k8s.io/mutation: ignore a todas las implementaciones en el directorio base.

  6. Confirma los cambios en tu repositorio:

    git add .
    git commit -m 'Set up manifests.'
    git push
    

El repositorio de muestras de Anthos Config Management 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 procese 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.

  1. Ejecuta el siguiente nomos hydrate con los siguientes marcadores:

    nomos hydrate \
        --source-format=unstructured \
        --output=OUTPUT_DIRECTORY
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • --source-format=unstructured permite que nomos hydrate funcione en un repositorio no estructurado. Dado que usas configuraciones de Kustomize y gráficos de Helm, debes usar un repositorio no estructurado y agregar esta marca.
    • --output=OUTPUT_DIRECTORY te permite definir una ruta de acceso a los archivos de configuración renderizados. Reemplaza OUTPUT_DIRECTORY por la ubicación en la que deseas que se guarde el resultado.
  2. Para verificar la sintaxis y la validez de tus archivos de configuración, ejecuta nomos vet con las siguientes marcas:

    nomos vet \
        --source-format=unstructured \
        --keep-output=true \
        --output=OUTPUT_DIRECTORY
    

    En el ejemplo anterior, se ilustra lo siguiente:

    • --source-format=unstructured permite que nomos vet funcione en un repositorio no estructurado.
    • --keep-output=true guarda los archivos de configuración renderizados.
    • --output=OUTPUT_DIRECTORY es la ruta de acceso a las configuraciones procesadas.

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.

Console

Para configurar la sincronización desde Google Cloud Console, completa las siguientes tareas:

  1. En Google Cloud Console, ve a la página Anthos Config Management.

    Ir a Anthos Config Management

  2. Selecciona tu clúster y haz clic en Configurar.

  3. En la lista desplegable Autenticación del repositorio de Git para ACM, selecciona un tipo de autenticación.

  4. Sigue las instrucciones en Google Cloud Console para otorgar acceso de solo lectura al Sincronizador de configuración a Git y haz clic en Continuar.

  5. En la sección Configuración de ACM para tus clústeres, completa los siguientes pasos:

    1. En el campo Versión, selecciona una versión.
    2. Selecciona la casilla de verificación Habilitar el Sincronizador de configuración.
    3. En la lista desplegable que aparece, completa los siguientes pasos:

      1. En el campo URL, agrega la URL de tu repositorio de Git. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples/ usa el protocolo HTTPS. Si no ingresas un protocolo, la URL se trata como una URL HTTPS.
      2. (Opcional): En el campo Rama, agrega la rama del repositorio desde la que deseas realizar la sincronización. La rama predeterminada es master.
      3. (Opcional): En el campo Etiqueta/Confirmación, agrega la revisión de Git (etiqueta o hash) que se debe verificar. El predeterminado es HEAD.
      4. (Opcional): En el campo Directorio de políticas, agrega la ruta dentro del repositorio a la parte superior de la jerarquía de políticas que deseas sincronizar. La opción predeterminada es el directorio raíz del repositorio.
      5. (Opcional): En el campo Tiempo de espera para la sincronización, agrega el período en segundos entre las sincronizaciones consecutivas. El tiempo predeterminado es 15 segundos.
      6. (Opcional): En el campo Proxy de Git, ingresa la URL para el proxy HTTPS que se usará durante la comunicación con el repositorio de Git. Este es un campo opcional y, si se deja en blanco, no se usa ningún proxy.
      7. En la lista desplegable Formato de origen, selecciona no estructurado. Dado que tu repositorio usa Helm, debes usar un repositorio no estructurado.
  6. Haz clic en Listo. Volverás al menú de Anthos Config Management.

gcloud

Para configurar la sincronización mediante la herramienta de línea de comandos de gcloud, completa las siguientes tareas:

  1. Crea un archivo llamado apply-spec.yaml y copia el siguiente archivo YAML en él:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      configSync:
        enabled: true
        # Since your repository is using Helm, you need to use an unstructured repository.
        sourceFormat: unstructured
        syncRepo: REPO
        syncBranch: BRANCH
        secretType: TYPE
        policyDir: "DIRECTORY"
    

    Reemplaza lo siguiente:

    • REPO: Agrega la URL de tu repositorio de Git. Puedes ingresar las URL con el protocolo HTTPS o SSH. Por ejemplo, https://github.com/GoogleCloudPlatform/anthos-config-management-samples/ usa el protocolo HTTPS. Si no ingresas un protocolo, la URL se trata como una URL HTTPS.
    • BRANCH: La rama del repositorio desde la que se realiza la sincronización. La rama predeterminada es master.
    • TYPE: Uno de los siguientes SecretTypes:

      • none
      • ssh
      • cookiefile
      • token
      • gcenode

      Si agregaste un secretType que no sea none, otorga acceso al Sincronizador de configuración a tu repositorio de Git.

    • DIRECTORY: La ruta del repositorio de Git al directorio raíz que contiene la configuración con la que deseas sincronizar. La opción predeterminada es el directorio raíz del repositorio.

    Por ejemplo, el siguiente archivo apply-spec.yaml se sincroniza con los archivos de configuración del directorio helm-component/manifests del repositorio de muestras de Anthos Config Management:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      configSync:
        enabled: true
        sourceFormat: unstructured
        syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
        syncBranch: main
        secretType: none
        policyDir: helm-component/manifests
    
  2. Aplica el archivo apply-spec.yaml:

     gcloud alpha container hub config-management apply \
         --membership=MEMBERSHIP_NAME \
         --config=CONFIG_YAML_PATH \
         --project=PROJECT_ID
    

    Reemplaza lo siguiente:

    • MEMBERSHIP_NAME: Es el nombre de la membresía que elegiste cuando registraste el clúster. Si registraste tu clúster con Google Cloud Console, el nombre de la membresía es el mismo que el nombre de tu clúster.
    • CONFIG_YAML_PATH: La ruta de acceso a tu archivo apply-spec.yaml
    • PROJECT_ID: El ID de tu proyecto

Revisa la instalación

Después de instalar y configurar el Sincronizador de configuración, puedes verificar que la instalación se haya completado correctamente.

  1. Verifica que la instalación esté sincronizada:

    Console

    1. En Cloud Console, ve a la página Anthos Config Management.

      Ir a Anthos Config Management

    2. Consulta la columna Estado. Si la instalación se realiza correctamente, tendrá el estado Sincronizada.

    gcloud

    Ejecuta el siguiente comando:

    gcloud alpha container hub config-management status \
        --project=PROJECT_ID
    

    Reemplaza PROJECT_ID por el ID del proyecto.

    Si la instalación se realiza correctamente, tendrá el estado SYNCED.

  2. Verifica que no haya otros errores mediante nomos status:

    nomos status
    

    Resultado de ejemplo:

    *CLUSTER_NAME
    --------------------
    <root>   https:/github.com/GoogleCloudPlatform/anthos-config-management-samples.git/helm-component/manifests@init
    SYNCED   fd17dd5a
    
  3. Verifica si el componente de Helm se instaló correctamente:

    kubectl get all -n cert-manager
    

    Resultado 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
    

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos individuales

Borra los manifiestos de tu repositorio

Para evitar la eliminación accidental, el Sincronizador de configuración no te permite quitar todos los espacios de nombres o recursos con permiso de clúster en una sola confirmación. Sigue estas instrucciones a fin de desinstalar el componente de forma correcta y quitar el espacio de nombres en confirmaciones separadas:

  1. Quita el componente de cert-manager del repositorio:

    git rm -rf manifests/cert-manager \
        && git commit -m "uninstall cert-manager" \
        && git push origin BRANCH
    

    Reemplaza BRANCH por la rama en la que creaste el repositorio.

  2. Borra el espacio de nombres de cert-manager:

    git rm manifests/namespace-cert-manager.yaml \
        && git commit -m "remove the cert-manager namespace" \
        && git push origin BRANCH
    
  3. Verifica que el espacio de nombres de cert-manager no exista:

    kubectl get namespace cert-namespace
    

    Resultado de ejemplo:

    Error from server (NotFound): namespaces "cert-namespace" not found
    

Borra el clúster

Para borrar el clúster, completa los siguientes comandos:

Console

Para borrar un clúster mediante Cloud Console, completa las siguientes tareas:

  1. En Cloud Console, ve a la página de GKE.

    Ir a GKE

  2. Junto al clúster que deseas borrar, haz clic en Acciones y, luego, en Borrar.

  3. Cuando se te solicite confirmación, haz clic en Borrar de nuevo.

gcloud

Para borrar un clúster con la herramienta de línea de comandos de gcloud, 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.

¿Qué sigue?