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.
É possível configurar
o Config Sync para sincronização por meio de repositórios do Helm.
É possível armazenar gráficos do Helm no Artifact Registry, que é o
repositório Helm recomendado para 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.
As versões do Helm e do Kustomize incluídas listam as versões do Kustomize e do Helm incluídas na versão correspondente do Config Sync.
Antes de começar
- Instale o Helm 3.8.0 ou mais recente. Nas versões anteriores do Helm, o suporte a gráficos no formato OCI é um recurso experimental.
 - Ativar a federação de identidade da carga de trabalho do GKE nos clusters.
 
Limitações
Não é possível alterar nenhum campo imutável em uma configuração mudando o valor na fonte da verdade. Se você precisar atualizar um campo imutável, faça a mudança na fonte de verdade e exclua manualmente o objeto no cluster. O Config Sync pode recriar o objeto com o novo valor do campo.
Os gráficos do Helm a seguir incluem jobs e não são recomendados para implantação pelo Config Sync:
Para saber por que não é recomendável usar jobs com o Config Sync, consulte Evitar o gerenciamento de jobs com o Config Sync.
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.
Ative a API Artifact Registry.
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_IDCrie 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
Substitua:
PROJECT_ID: ID do projeto da organização.AR_REPO_NAME: o ID do repositório.AR_REGIONé o local regional ou multirregional do repositório.
Variáveis usadas nas seguintes seções:
FLEET_HOST_PROJECT_ID: se você estiver usando a federação de identidade da carga de trabalho do GKE, será igual aPROJECT_ID. Se você estiver usando a federação de identidade da carga de trabalho da frota para o GKE, esse será o ID do projeto da frota em que o cluster está registrado.GSA_NAME: o nome da conta de serviço personalizada do Google que você quer usar para se conectar ao Artifact Registry.KSA_NAME: a conta de serviço do Kubernetes do reconciliador.- Para repositórios raiz, se o nome 
RootSyncforroot-sync, adicioneroot-reconciler. Caso contrário, adicioneroot-reconciler-ROOT_SYNC_NAME. - Para repositórios de namespace, se o nome 
RepoSyncforrepo-sync, adicionens-reconciler-NAMESPACE. Caso contrário, adicionens-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH, em queREPO_SYNC_NAME_LENGTHé o número de caracteres emREPO_SYNC_NAME. 
- Para repositórios raiz, se o nome 
 
Conceder permissão de leitor
Use uma conta de serviço do Kubernetes para autenticar no Artifact Registry seguindo estas etapas:
Conceda o papel do IAM de leitor do Artifact Registry (roles/artifactregistry.reader)
à conta de serviço do Kubernetes que tem o
pool da Federação de Identidade da Carga de Trabalho para GKE:
gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \
    --location=AR_REGION \
    --member="serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \
    --role=roles/artifactregistry.reader \
    --project=PROJECT_ID
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.
Recupere o pacote
mysql-9.3.1.tgzdo repositório público do Helm e faça o download localmente:helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1Fazer 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.devWindows
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_NAMENesse comando,
oauth2accesstokené o nome de usuário a ser usado na autenticação com um token de acesso egcloud 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.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.
Se você quiser substituir os valores padrão do gráfico Helm, faça isso
especificando os valores no campo spec.helm.values ou adicionando uma referência a um
ConfigMap
usando o campo spec.helm.valuesFileRefs. Para saber mais sobre os campos
opcionais, consulte
Configuração para o repositório do Helm.
values
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: k8sserviceaccount # 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 EOFSubstitua
ROOT_SYNC_NAMEpelo 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 deroot-sync.Neste exemplo, o gráfico do Helm é implantado no namespace
testporque os recursos contêmnamespace: {{ .Release.Namespace }}nos modelos.Use
helm.valuespara substituir os valores padrão. Para saber mais sobre os campos opcionais, consulte Configuração para o repositório do Helm.Aplique o objeto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yamlVerifique se o Config Sync está sincronizando com a imagem:
nomos status --contexts=$(kubectl config current-context)O resultado será assim:
Connecting to clusters... *cluster-name -------------------- <root>:root-sync oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/mysql:9.3.1 SYNCED 9.3.1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH default configmap/my-mysql Current 9.3.1 default secret/my-mysql Current 9.3.1 default service/my-mysql Current 9.3.1 default service/my-mysql-headless Current 9.3.1 default serviceaccount/my-mysql Current 9.3.1 default statefulset.apps/my-mysql Current 9.3.1Você sincronizou o gráfico do Helm com o cluster.
valuesFileRefs
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 auth: k8sserviceaccount # use the optional field spec.helm.valuesFilesRefs to override default values # by referencing a ConfigMap valuesFileRefs: - name: CONFIGMAP_NAME dataKey: DATA_KEY EOFSubstitua:
ROOT_SYNC_NAME: o 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 Google Cloud ou a Google Cloud CLI, escolha um nome diferente deroot-sync.CONFIGMAP_NAME: o nome do ConfigMap. Pode ser qualquer nome de ConfigMap válido aceito pelo Kubernetes que seja exclusivo no cluster.- (Opcional) 
DATA_KEY: a chave de dados no ConfigMap em que estão os valores que você quer ler. O padrão évalues.yaml. 
Crie o objeto ConfigMap com seus valores:
cat <<EOF>> CONFIGMAP_NAME.yaml apiVersion: v1 kind: ConfigMap metadata: name: CONFIGMAP_NAME namespace: config-management-system immutable: true # You can use the same format as the default values file to override # default values. data: DATA_KEY: |- image: pullPolicy: Always primary: resources: limits: cpu: 250m memory: 256Mi requests: cpu: 250m memory: 256Mi EOFSe você não especificou um valor para
DATA_KEYno RootSync, ele precisa ser ovalues.yamlpadrão.Aplique o objeto ConfigMap:
kubectl apply -f CONFIGMAP_NAME.yamlAplique o objeto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yamlVerifique se o Config Sync está sincronizando com a imagem:
nomos status --contexts=$(kubectl config current-context)O resultado será assim:
Connecting to clusters... *cluster-name -------------------- <root>:root-sync oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/mysql:9.3.1 SYNCED 9.3.1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH default configmap/my-mysql Current 9.3.1 default secret/my-mysql Current 9.3.1 default service/my-mysql Current 9.3.1 default service/my-mysql-headless Current 9.3.1 default serviceaccount/my-mysql Current 9.3.1 default statefulset.apps/my-mysql Current 9.3.1Você sincronizou o gráfico do Helm com o cluster.
Você também pode analisar o
imagePullPolicyem um dos recursos sincronizados no cluster para verificar se os valores do ConfigMap foram usados a fim de renderizar o gráfico:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicyComo o ConfigMap é imutável, para alterar os valores, você precisa criar um novo ConfigMap e atualizar
spec.helm.valuesFileRefsna especificação do RootSync ou do RepoSync a fim de apontar para o novo ConfigMap. A criação de um novo ConfigMap garante que as alterações nos valores façam com que o gráfico Helm seja renderizado novamente, o que é útil quando vários ConfigMaps referenciados emspec.helm.valuesFileRefsprecisam ser atualizados ao mesmo tempo ao realizar novamente a renderização. Para alterar os valores usados para renderizar o gráfico, crie um novo ConfigMap com um nome diferente:cat <<EOF>> CONFIGMAP_NAME-2.yaml apiVersion: v1 kind: ConfigMap metadata: name: CONFIGMAP_NAME-2 namespace: config-management-system immutable: true # You can use the same format as the default values file to override # default values. data: DATA_KEY: |- image: pullPolicy: Never primary: resources: limits: cpu: 100m memory: 256Mi requests: cpu: 250m memory: 200Mi EOFAtualize o objeto RootSync para fazer referência ao novo ConfigMap:
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: k8sserviceaccount # use the optional field spec.helm.valuesFilesRefs to override default values # by referencing a ConfigMap valuesFileRefs: - name: CONFIGMAP_NAME-2 dataKey: DATA_KEY EOFAplique o objeto ConfigMap:
kubectl apply -f CONFIGMAP_NAME-2.yamlAplique o objeto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yamlVerifique se o Config Sync está sincronizando com a imagem:
nomos status --contexts=$(kubectl config current-context)Também é possível analisar o
imagePullPolicyem um dos recursos sincronizados no cluster para verificar se os novos valores do ConfigMap atualizado foram usados na renderização do gráfico:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
A seguir
- Saiba mais sobre como instalar o Config Sync.