Esta página mostra como sincronizar gráficos Helm do Artifact Registry criando e enviando um gráfico Helm para um repositório no Artifact Registry. Também contém uma configuração de exemplo para sincronizar um gráfico do seu repositório Helm.
Pode configurar o Config Sync para sincronizar a partir de repositórios do Helm.
Pode armazenar gráficos Helm no Artifact Registry, que é o repositório Helm recomendado para o Google Cloud. Para usar esta funcionalidade, tem de
ativar as
APIs RootSync e RepoSync.
O Config Sync renderiza gráficos Helm através de
helm template
e, por isso, não suporta a gestão completa do ciclo de vida do Helm.
A lista de versões do Helm e do Kustomize incluídas apresenta 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 posterior. Nas versões anteriores do Helm, o suporte para gráficos no formato OCI é uma funcionalidade experimental.
- Ative a federação de identidade da força de trabalho para o GKE no seu cluster.
Limitações
Não pode alterar nenhum campo imutável numa configuração apenas alterando o valor na fonte de dados fidedigna. Se precisar de atualizar um campo imutável, primeiro faça a alteração na fonte de dados fidedigna e, em seguida, elimine manualmente o objeto no cluster. Em seguida, a sincronização de configuração pode recriar o objeto com o novo valor do campo.
Os seguintes gráficos Helm incluem tarefas e não são recomendados para implementação pelo Config Sync:
Para saber mais sobre o motivo pelo qual não é recomendado usar Jobs com a sincronização de configuração, consulte o artigo Evite gerir Jobs com a sincronização de configuração.
Crie um repositório do Artifact Registry
Nesta secção, cria um repositório do Artifact Registry. Para saber como criar repositórios do Artifact Registry, consulte Criar repositórios.
Ative a API Artifact Registry:
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
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
Substitua o seguinte:
PROJECT_ID
: o ID do projeto da organização.AR_REPO_NAME
: o ID do repositório.AR_REGION
: a localização regional ou multirregional do repositório.
Variáveis usadas nas seguintes secções:
FLEET_HOST_PROJECT_ID
: se estiver a usar a Workload Identity Federation do GKE para o GKE, é o mesmo quePROJECT_ID
. Se estiver a usar a Workload Identity Federation para o GKE, este é o ID do projeto da frota no qual o seu cluster está registado.GSA_NAME
: o nome da conta de serviço Google personalizada que quer usar para estabelecer ligação ao Artifact Registry.KSA_NAME
: a conta de serviço do Kubernetes para o reconciliador.- Para repositórios raiz, se o nome
RootSync
forroot-sync
, adicioneroot-reconciler
. Caso contrário, adicioneroot-reconciler-ROOT_SYNC_NAME
. - Para repositórios de espaços de nomes, se o nome
RepoSync
forrepo-sync
, adicionens-reconciler-NAMESPACE
. Caso contrário, adicionens-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
, ondeREPO_SYNC_NAME_LENGTH
é o número de carateres emREPO_SYNC_NAME
.
- Para repositórios raiz, se o nome
Conceda autorização de leitor
Use uma conta de serviço do Kubernetes para fazer a autenticação no Artifact Registry concluindo os seguintes passos:
Conceda a função de IAM leitor do Artifact Registry (roles/artifactregistry.reader
) à conta de serviço do Kubernetes que tem a federação de identidades da carga de trabalho para o pool do 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
Envie um gráfico Helm para o repositório do Artifact Registry
Nesta secção, transfere um gráfico Helm público e envia-o para o Artifact Registry.
Obtenha o pacote
mysql-9.3.1.tgz
do repositório Helm público e transfira-o localmente:helm pull mysql --repo https://charts.bitnami.com/bitnami --version 9.3.1
Autentique 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
Neste comando,
oauth2accesstoken
é o nome de utilizador a usar quando se autentica com uma chave de acesso egcloud auth print-access-token
é o comando para obter a chave de acesso. A chave de acesso é a palavra-passe para autenticação. A autenticação com um token de acesso é o método de autenticação mais seguro.Envie o gráfico Helm para o Artifact Registry:
helm push mysql-9.3.1.tgz oci://AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME
Configure o Config Sync para sincronizar a partir do seu gráfico Helm
Nesta secção, cria um objeto RootSync e configura o Config Sync para sincronizar a partir do gráfico Helm.
Se quiser substituir os valores predefinidos do gráfico Helm, pode fazê-lo
especificando valores no campo spec.helm.values
ou adicionando uma referência a um
ConfigMap
através do campo spec.helm.valuesFileRefs
. Para saber mais acerca dos campos opcionais, consulte a configuração do repositório Helm.
valores
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 EOF
Substitua
ROOT_SYNC_NAME
pelo nome do objeto RootSync. O nome deve ser exclusivo no cluster e não ter mais de 26 carateres. Se instalou o Config Sync através da Google Cloud consola ou da CLI do Google Cloud, escolha um nome diferente deroot-sync
.Neste exemplo, o gráfico Helm é implementado no espaço de nomes
test
porque os respetivos recursos contêmnamespace: {{ .Release.Namespace }}
nos respetivos modelos.Pode usar
helm.values
para substituir os valores predefinidos. Para saber mais acerca dos campos opcionais, consulte o artigo Configuração para o repositório Helm.Aplique o objeto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
Verifique se o Config Sync está a sincronizar a partir da imagem:
nomos status --contexts=$(kubectl config current-context)
O resultado é semelhante ao seguinte:
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.1
Agora, sincronizou com êxito o gráfico Helm com o seu 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 EOF
Substitua o seguinte:
ROOT_SYNC_NAME
: o nome do objeto RootSync. O nome deve ser exclusivo no cluster e não ter mais de 26 carateres. Se instalou o Config Sync através da Google Cloud consola ou da CLI do Google Cloud, escolha um nome diferente deroot-sync
.CONFIGMAP_NAME
: o nome do seu ConfigMap. Pode ser qualquer nome de ConfigMap válido aceite pelo Kubernetes que seja único no seu cluster.- (opcional)
DATA_KEY
: a chave de dados no seu ConfigMap a partir da qual quer ler os valores. A predefinição évalues.yaml
.
Crie o objeto ConfigMap com os 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 EOF
Se não especificou um valor para
DATA_KEY
no RootSync, deve ser o valor predefinidovalues.yaml
.Aplique o objeto ConfigMap:
kubectl apply -f CONFIGMAP_NAME.yaml
Aplique o objeto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
Verifique se o Config Sync está a sincronizar a partir da imagem:
nomos status --contexts=$(kubectl config current-context)
O resultado é semelhante ao seguinte:
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.1
Agora, sincronizou com êxito o gráfico Helm com o seu cluster.
Também pode consultar o
imagePullPolicy
num dos recursos sincronizados no cluster para verificar se os valores do ConfigMap foram usados para renderizar o gráfico:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
Uma vez que o ConfigMap é imutável, para alterar os valores, tem de criar um novo ConfigMap e atualizar
spec.helm.valuesFileRefs
na especificação RootSync ou RepoSync para apontar para o novo ConfigMap. A criação de um novo ConfigMap garante que as alterações aos valores fazem com que o gráfico Helm seja renderizado novamente, o que é útil quando vários ConfigMaps referenciados emspec.helm.valuesFileRefs
precisam de ser atualizados ao mesmo tempo durante a nova 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 EOF
Atualize 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 EOF
Aplique o objeto ConfigMap:
kubectl apply -f CONFIGMAP_NAME-2.yaml
Aplique o objeto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
Verifique se o Config Sync está a sincronizar a partir da imagem:
nomos status --contexts=$(kubectl config current-context)
Também pode consultar o
imagePullPolicy
num dos recursos sincronizados no cluster para verificar se os novos valores do ConfigMap atualizado foram usados para renderizar o gráfico:kubectl get statefulset -n test my-mysql -o yaml | grep imagePullPolicy
O que se segue?
- Saiba mais sobre a instalação do Config Sync.