Sincronizza gli artefatti OCI da Artifact Registry
Questa pagina mostra come sincronizzare un artefatto OCI da Artifact Registry.
Puoi configurare Config Sync per la sincronizzazione dalle immagini OCI utilizzando Artifact Registry. Per utilizzare questa funzionalità, devi abilitare le API RootSync e RepoSync.
Poiché Artifact Registry è un servizio completamente gestito che supporta sia immagini container che artefatti non container, ti consigliamo di utilizzarlo per l'archiviazione e la gestione delle immagini container su Google Cloud. Sono disponibili diversi strumenti per eseguire il push degli artefatti in Artifact Registry. Ad esempio, puoi eseguire il push di un'immagine Docker, eseguire il push di un grafico Helm o utilizzare la libreria go-containerregistry per lavorare con i registri di container. Scegli lo strumento più adatto a te.
Questa pagina mostra come creare e pubblicare l'immagine in un repository
in Artifact Registry con crane
e oras
.
Crea un repository Artifact Registry
In questa sezione creerai un repository Artifact Registry. Per scoprire di più sulla creazione di repository Artifact Registry, consulta Creare repository.
Abilita l'API Artifact Registry:
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
Crea un repository Artifact Registry:
gcloud artifacts repositories create AR_REPO_NAME \ --repository-format=docker \ --location=AR_REGION \ --description="Config Sync Helm repo" \ --project=PROJECT_ID
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto dell'organizzazione.AR_REPO_NAME
: l'ID del repository.AR_REGION
: la località a una o più regioni del repository.
Variabili utilizzate nelle seguenti sezioni:
FLEET_HOST_PROJECT_ID
: se utilizzi GKE Workload Identity, equivale aPROJECT_ID
. Se utilizzi Workload Identity del parco risorse, questo è l'ID progetto del parco risorse in cui è registrato il cluster.GSA_NAME
: il nome dell'account di servizio Google personalizzato che vuoi utilizzare per la connessione ad Artifact Registry.KSA_NAME
: l'account di servizio Kubernetes per il riconciliatore.- Per i repository root, se il nome di
RootSync
èroot-sync
, aggiungiroot-reconciler
. Altrimenti, aggiungiroot-reconciler-ROOT_SYNC_NAME
. - Per i repository dello spazio dei nomi, se il nome
RepoSync
èrepo-sync
, aggiungins-reconciler-NAMESPACE
. Altrimenti, aggiungins-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
doveREPO_SYNC_NAME_LENGTH
è il numero di caratteri inREPO_SYNC_NAME
.
- Per i repository root, se il nome di
Concedi l'autorizzazione di lettura
Se sul cluster la versione Config Sync è 1.17.2 o successiva, puoi utilizzare l'account di servizio Kubernetes per eseguire l'autenticazione in Artifact Registry. In caso contrario, utilizza l'account di servizio Google per l'autenticazione.
Utilizzo dell'account di servizio Kubernetes
Concedi il ruolo IAM Lettore Artifact Registry (roles/artifactregistry.reader
) all'account di servizio Kubernetes con il pool Workload Identity:
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
Account di servizio Google in uso
Concedi il ruolo IAM Lettore Artifact Registry (
roles/artifactregistry.reader
) all'account di servizio Google:gcloud artifacts repositories add-iam-policy-binding AR_REPO_NAME \ --location=AR_REGION \ --member=serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/artifactregistry.reader \ --project=PROJECT_ID
Crea un'associazione di criteri IAM tra l'account di servizio Kubernetes e l'account di servizio Google:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:FLEET_HOST_PROJECT_ID.svc.id.goog[config-management-system/KSA_NAME]" \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --project=PROJECT_ID
Esegui il push di un'immagine nel repository Artifact Registry
In questa sezione creerai un'immagine OCI ed eseguirai il push ad Artifact Registry.
Crea un file manifest
Namespace
:cat <<EOF> test-namespace.yaml apiVersion: v1 kind: Namespace metadata: name: test EOF
Accedi ad Artifact Registry:
gcloud auth configure-docker AR_REGION-docker.pkg.dev
Pacchettizza ed esegui il push dell'immagine in Artifact Registry:
crane
I comandi in questa sezione utilizzano
crane
per interagire con i registri e le immagini remote.Crea un pacchetto del file:
tar -cf test-namespace.tar test-namespace.yaml
Installa lo strumento
crane
.Esegui il push dell'immagine in Artifact Registry:
crane append -f test-namespace.tar -t AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1
oras
I comandi in questa sezione utilizzano
oras
per interagire con i registri e le immagini remote.Crea un pacchetto del file:
tar -czf test-namespace.tar.gz test-namespace.yaml
Installa lo strumento
oras
.Esegui il push dell'immagine in Artifact Registry:
oras push AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 test-namespace.tar.gz
Configura Config Sync per la sincronizzazione dall'immagine
In questa sezione creerai un oggetto RootSync
e configurerai Config Sync per la sincronizzazione dall'immagine OCI.
Crea un oggetto
RootSync
con un nome univoco: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: oci oci: image: AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 dir: . # The k8sserviceaccount auth type is available in version 1.17.2 and # later. Use `gcpserviceaccount` if using an older version. # auth: gcpserviceaccount # gcpServiceAccountEmail: GSA_NAME@PROJECT_ID.iam.gserviceaccount.com auth: k8sserviceaccount EOF
Sostituisci
ROOT_SYNC_NAME
con il nome del tuo oggettoRootSync
. Il nome deve essere univoco nel cluster e contenere non più di 26 caratteri. Per l'elenco completo delle opzioni durante la configurazione degli oggettiRootSync
, consulta i campiRootSync
eRepoSync
.Applica l'oggetto
RootSync
:kubectl apply -f ROOT_SYNC_NAME.yaml
Verifica che Config Sync sia sincronizzato dall'immagine:
nomos status --contexts=$(kubectl config current-context)
Dovresti vedere un output simile al seguente esempio:
Connecting to clusters... *publish-config-registry -------------------- <root>:root-sync-test AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 SYNCED 05e6a6b77de7a62286387cfea833d45290105fe84383224938d7b3ab151a55a1 Managed resources: NAMESPACE NAME STATUS SOURCEHASH namespace/test Current 05e6a6b
Hai sincronizzato un'immagine con il cluster.
Passaggi successivi
- Scopri di più sull'installazione di Config Sync.