Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Sincroniza los gráficos de Helm desde Artifact Registry

En esta página, se muestra cómo sincronizar los gráficos de Helm desde Artifact Registry.

Desde Anthos Config Management versión 1.13.0 y posteriores, puedes configurar el Sincronizador de configuración para que se sincronice desde los repositorios de Helm. Puede almacenar gráficos de Helm en Artifact Registry, que es el repositorio de Helm recomendado para Google Cloud. Para usar esta función, debes habilitar las API de RootSync y RepoSync.

En esta página, se muestra una manera sencilla de crear y enviar 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 su repositorio de Helm.

Antes de comenzar

Para seguir estos pasos, debes instalar Helm 3.8.0 o una versión posterior. En versiones anteriores de Helm, la compatibilidad con gráficos en formato de OCI es una función experimental.

Habilita Workload Identity en tu clúster.

Crea un repositorio de Artifact Registry

En esta sección, crearás 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 deseas 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 público de Helm 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á para autenticar con un token de acceso, y gcloud auth print-access-token es el comando de gcloud para obtener el token de acceso. El token de acceso es la contraseña para la autenticación. Autenticar con 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}.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.

    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. Consulta Configuración del repositorio de Helm para obtener más información sobre los campos opcionales.

  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. Para los repositorios raíz, si el nombre de RootSync es root-sync, 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)
    

    Deberías ver un 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?