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
- Instala Helm 3.8.0 o una versión posterior. En las versiones anteriores de Helm, la compatibilidad con gráficos en formato OCI es una función experimental.
- Habilita Workload Identity en el clúster.
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.
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 proyectoAR_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.
Habilita la API de Artifact Registry:
gcloud services enable artifactregistry.googleapis.com \ --project=${PROJECT_ID}
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}
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.
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
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, ygcloud 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.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.
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 searoot-sync
.En este ejemplo, el gráfico de Helm se implementa en el espacio de nombres
test
porque sus recursos contienennamespace: {{ .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.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 esroot-sync
yKSA_NAME
esroot-reconciler
. De lo contrario, esroot-reconciler-ROOT_SYNC_NAME
.
Aplica el objeto RootSync:
kubectl apply -f ROOT_SYNC_NAME.yaml
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?
- Obtén más información sobre cómo instalar el Sincronizador de configuración.