Sincronizar gráficos do Helm no Artifact Registry

Esta página mostra como sincronizar gráficos do Helm do Artifact Registry ao criar e enviar um gráfico do Helm para um repositório no Artifact Registry. Ela também contém uma configuração de amostra para sincronizar um gráfico do seu repositório do Helm.

A partir da versão 1.13.0 do Anthos Config Management, é possível configurar o Config Sync para fazer a sincronização de repositórios do Helm. É possível armazenar gráficos do Helm no Artifact Registry, que é o repositório Helm recomendado para o Google Cloud. Para usar esse recurso, você precisa ativar as APIs RootSync e RepoSync. O Config Sync renderiza gráficos do Helm usando helm template e, portanto, não oferece suporte ao gerenciamento completo do ciclo de vida do Helm.

Antes de começar

Crie um repositório do Artifact Registry

Nesta seção, você criará um repositório do Artifact Registry. Para saber mais sobre como criar repositórios do Artifact Registry, consulte Criar repositórios.

  1. Crie variáveis de ambiente:

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

    Substitua:

    • PROJECT_ID: ID do projeto
    • AR_REPO_NAME: o nome que você quer dar ao repositório do Artifact Registry.
    • AR_REGION: a localização geográfica específica em que você pode hospedar seu repositório do Artifact Registry, por exemplo: us-central1.
    • GSA_NAME: o nome da conta de serviço do Google personalizada que você quer usar para se conectar ao Artifact Registry.
  2. Ative a API Artifact Registry.

    gcloud services enable artifactregistry.googleapis.com \
          --project=${PROJECT_ID}
    
  3. Crie um repositório do Artifact Registry:

    gcloud artifacts repositories create ${AR_REPO_NAME} \
          --repository-format=docker \
          --location=${AR_REGION} \
          --description="Config Sync Helm repo" \
          --project=${PROJECT_ID}
    
  4. Conceda o papel do IAM Leitor do Artifact Registry (roles/artifactregistry.reader) à conta de serviço do Google:

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

Enviar um gráfico do Helm para o repositório do Artifact Registry

Nesta seção, você faz o download de um gráfico público do Helm e o envia ao Artifact Registry.

  1. Recupere o pacote mysql-9.3.1.tgz do repositório público do Helm e faça o download localmente:

    helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1
    
  2. Fazer a autenticação com um token de acesso

    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}
    

    Nesse comando, oauth2accesstoken é o nome de usuário a ser usado na autenticação com um token de acesso e gcloud auth print-access-token é o comando para conseguir o token de acesso. Seu token de acesso é a senha para autenticação. A autenticação com um token de acesso é o método de autenticação mais seguro.

  3. Envie o gráfico do Helm para o Artifact Registry:

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

Configurar o Config Sync para sincronização no gráfico do Helm

Nesta seção, você criará um objeto RootSync e configurará o Config Sync para fazer a sincronização com o gráfico do Helm.

  1. Crie um objeto RootSync com um nome exclusivo:

    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
    

    Substitua ROOT_SYNC_NAME pelo nome do objeto RootSync. O nome precisa ser exclusivo no cluster e ter no máximo 26 caracteres. Se você instalou o Config Sync usando o console do Google Cloud ou a Google Cloud CLI, escolha um nome diferente de root-sync.

    Neste exemplo, o gráfico do Helm é implantado no namespace test porque os recursos contêm namespace: {{ .Release.Namespace }} nos modelos.

    A partir da versão 1.13.1 do Anthos Config Management, é possível usar helm.values para substituir os valores padrão. Para saber mais sobre os campos opcionais, consulte Configuração para o repositório do Helm.

  2. Crie uma vinculação de política do IAM entre a conta de serviço do Google e a conta de serviço do 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: a conta de serviço do Kubernetes do reconciliador. Para repositórios raiz, se o nome RootSync for root-sync e KSA_NAME for root-reconciler. Caso contrário, será root-reconciler-ROOT_SYNC_NAME.
  3. Aplique o objeto RootSync:

    kubectl apply -f ROOT_SYNC_NAME.yaml
    
  4. Verifique se o Config Sync está sincronizando com a imagem:

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

    A saída é semelhante a esta:

    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
    
    

    Você sincronizou o gráfico do Helm com o cluster.

A seguir