Sincroniza gráficos de Helm desde Artifact Registry

En esta página, se muestra cómo sincronizar gráficos de Helm desde Artifact Registry mediante la creación y el envío de un gráfico de Helm a un repositorio en Artifact Registry. También contiene una configuración de muestra para sincronizar un gráfico de tu repositorio de Helm.

A partir de la versión 1.13.0 de Anthos Config Management, puedes configurar el Sincronizador de configuración para que se sincronice desde los repositorios de Helm. Puedes almacenar gráficos de Helm en Artifact Registry, que es el repositorio recomendado para Helm de Google Cloud. Para usar esta función, debes habilitar las APIs de RootSync y RepoSync. El Sincronizador de configuración renderiza gráficos de Helm con helm template y, por lo tanto, no es compatible con la administración completa del ciclo de vida de Helm.

Antes de comenzar

Crea un repositorio de Artifact Registry

En esta sección, creará un repositorio de Artifact Registry. Para obtener más información sobre cómo crear repositorios de Artifact Registry, consulta Crea repositorios.

  1. Crea variables de entorno:

    export PROJECT_ID=PROJECT_ID
    export AR_REPO_NAME=AR_REPO_NAME
    export AR_REGION=AR_REGION
    export GSA_NAME=GSA_NAME
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID de tu proyecto
    • AR_REPO_NAME: El nombre que deseas asignar a tu repositorio de Artifact Registry.
    • AR_REGION: Es la ubicación geográfica específica en la que puedes alojar el repositorio de Artifact Registry, por ejemplo: us-central1.
    • GSA_NAME: Es el nombre de la cuenta de servicio de Google personalizada que quieres usar para conectarte a Artifact Registry.
  2. Habilita la API de Artifact Registry:

    gcloud services enable artifactregistry.googleapis.com \
          --project=${PROJECT_ID}
    
  3. Crea un repositorio de Artifact Registry:

    gcloud artifacts repositories create ${AR_REPO_NAME} \
          --repository-format=docker \
          --location=${AR_REGION} \
          --description="Config Sync Helm repo" \
          --project=${PROJECT_ID}
    
  4. Otorga la función de IAM de lector de Artifact Registry (roles/artifactregistry.reader) a la cuenta de servicio de Google:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
          --member=serviceAccount:${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \
          --role=roles/artifactregistry.reader
    

Envíe un gráfico de Helm al repositorio de Artifact Registry

En esta sección, descargará un gráfico de Helm público y lo enviará a Artifact Registry.

  1. Recupera el paquete mysql-9.3.1.tgz del repositorio público de Helm y descárgalo de forma local:

    helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1
    
  2. Autentica con un token de acceso:

    Linux/macOS

    gcloud auth print-access-token | helm registry login -u oauth2accesstoken \
    --password-stdin https://${AR_REGION}-docker.pkg.dev
    

    Windows

    gcloud auth print-access-token
    ya29.8QEQIfY_...
    
    helm registry login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
    https://${AR_REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}
    

    En este comando, oauth2accesstoken es el nombre de usuario que se usará cuando se realiza la autenticación con un token de acceso, y gcloud auth print-access-token es el comando para obtenerlo. El token de acceso es la contraseña de autenticación. La autenticación con un token de acceso es el método de autenticación más seguro.

  3. Envía el gráfico de Helm a Artifact Registry:

    helm push mysql-9.3.1.tgz oci://${AR_REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}
    

Configure el Sincronizador de configuración para que se sincronice desde su gráfico de Helm

En esta sección, crearás un objeto RootSync y configurarás el Sincronizador de configuración para que se sincronice desde el gráfico de Helm.

  1. Crea un objeto RootSync con un nombre único:

    cat <<EOF>> ROOT_SYNC_NAME.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      sourceType: helm
      helm:
        repo: oci://${AR_REGION}-docker.pkg.dev/${PROJECT_ID}/${AR_REPO_NAME}
        chart: mysql
        version: 9.3.1
        releaseName: my-mysql
        namespace: test
        auth: gcpserviceaccount
        gcpServiceAccountEmail: ${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
        # From Anthos Config Management version 1.13.1 and later, you can use
        # the optional field spec.helm.values to override default values.
        # You can use the same format as the default values file to override
        # default values.
        values:
          image:
            pullPolicy: Always
          primary:
            resources:
              limits:
                cpu: 250m
                memory: 256Mi
              requests:
                cpu: 250m
                memory: 256Mi
    EOF
    

    Reemplaza ROOT_SYNC_NAME por el nombre de tu objeto RootSync. El nombre debe ser único en el clúster y no debe tener más de 26 caracteres. Si instalaste el Sincronizador de configuración con Google Cloud Console o Google Cloud CLI, elige un nombre que no sea root-sync.

    En este ejemplo, el gráfico de Helm se implementa en el espacio de nombres test porque sus recursos contienen namespace: {{ .Release.Namespace }} en sus plantillas.

    A partir de la versión 1.13.1 de Anthos Config Management, puedes usar helm.values para anular los valores predeterminados. Para obtener información sobre los campos opcionales, consulta Configuración del repositorio de Helm.

  2. Crea una vinculación de política de IAM entre la cuenta de servicio de Google y la cuenta de servicio de Kubernetes:

    gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:${PROJECT_ID}.svc.id.goog[config-management-system/KSA_NAME]" \
          ${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
    
    • KSA_NAME: Es la cuenta de servicio de Kubernetes para el conciliador. En los repositorios raíz, si el nombre de RootSync es root-sync y KSA_NAME es root-reconciler. De lo contrario, es root-reconciler-ROOT_SYNC_NAME.
  3. Aplica el objeto RootSync:

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  4. Verifica que el Sincronizador de configuración se sincronice desde la imagen:

    nomos status --contexts=$(kubectl config current-context)
    

    El resultado similar al siguiente:

    Connecting to clusters...
    
    *cluster-name
      --------------------
      <root>:root-sync   oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/mysql:9.3.1
      SYNCED             mysql:9.3.1
      Managed resources:
         NAMESPACE   NAME                        STATUS    SOURCEHASH
                     namespace/test              Current   mysql:9
         test        configmap/my-mysql          Current   mysql:9
         test        secret/my-mysql             Current   mysql:9
         test        service/my-mysql            Current   mysql:9
         test        service/my-mysql-headless   Current   mysql:9
         test        serviceaccount/my-mysql     Current   mysql:9
         test        statefulset.apps/my-mysql   Current   mysql:9
    
    

    Ya sincronizó correctamente el gráfico de Helm con su clúster.

¿Qué sigue?