Auf dieser Seite erfahren Sie, wie Sie ein OCI-Artefakt aus Artifact Registry synchronisieren.
Sie können Config Sync für die Synchronisierung aus OCI-Images mithilfe von Artifact Registry konfigurieren. Um diese Funktion verwenden zu können, müssen Sie die RootSync- und RepoSync APIs aktivieren.
Da Artifact Registry ein vollständig verwalteter Dienst ist, der sowohl Container-Images als auch Nicht-Container-Artefakte unterstützt, empfehlen wir die Verwendung für die Speicherung und Verwaltung von Container-Images in Google Cloud. Es gibt mehrere Tools, um Artefakte per Push in Artifact Registry zu übertragen. Sie können beispielsweise ein Docker-Image oder ein Helm-Diagramm per Push hochladen oder die Go-ContainerRegistry-Bibliothek für die Arbeit mit Container-Registries verwenden. Entscheiden Sie sich für das Tool, das für Sie am besten funktioniert.
Auf dieser Seite wird gezeigt, wie Sie Ihr Image mit crane
und oras
erstellen und in einem Repository in Artifact Registry veröffentlichen.
Artifact Registry-Repository erstellen
In diesem Abschnitt erstellen Sie ein Artifact Registry-Repository. Weitere Informationen zum Erstellen von Artifact Registry-Repositories finden Sie unter Repositories erstellen.
Aktivieren Sie die Artifact Registry API:
gcloud services enable artifactregistry.googleapis.com --project=PROJECT_ID
Erstellen Sie ein Artifact Registry-Repository:
gcloud artifacts repositories create AR_REPO_NAME \ --repository-format=docker \ --location=AR_REGION \ --description="Config Sync Helm repo" \ --project=PROJECT_ID
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID der Organisation.AR_REPO_NAME
: ID des Repositorys.AR_REGION
: der regionale oder multiregionale Speicherort für das Repository.
In den folgenden Abschnitten verwendete Variablen:
FLEET_HOST_PROJECT_ID
: Wenn Sie GKE Workload Identity verwenden, entspricht diesPROJECT_ID
. Wenn Sie Flotten-Workload Identity verwenden, ist dies die Projekt-ID der Flotte, für die Ihr Cluster registriert ist.GSA_NAME
: Name des benutzerdefinierten Google-Dienstkontos, mit dem Sie eine Verbindung zu Artifact Registry herstellen möchten.KSA_NAME
: das Kubernetes-Dienstkonto für den Abgleich.- Fügen Sie für Stamm-Repositories
root-reconciler
hinzu, wenn der NameRootSync
root-sync
ist. Fügen Sie andernfallsroot-reconciler-ROOT_SYNC_NAME
hinzu. - Für Namespace-Repositories gilt: Wenn der
RepoSync
-Namerepo-sync
lautet, fügen Siens-reconciler-NAMESPACE
hinzu. Fügen Sie andernfallsns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH
hinzu, wobeiREPO_SYNC_NAME_LENGTH
die Anzahl der Zeichen inREPO_SYNC_NAME
ist.
- Fügen Sie für Stamm-Repositories
Leseberechtigung erteilen
Wenn die Config Sync-Version 1.17.2 oder höher in Ihrem Cluster ist, können Sie sich mit dem Kubernetes-Dienstkonto bei Artifact Registry authentifizieren. Andernfalls verwenden Sie das Google-Dienstkonto zur Authentifizierung.
Kubernetes-Dienstkonto verwenden
Weisen Sie dem Kubernetes-Dienstkonto mit dem Workload Identity-Pool die IAM-Rolle Artifact Registry-Leser (roles/artifactregistry.reader
) zu:
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
Google-Dienstkonto verwenden
Weisen Sie dem Google-Dienstkonto die IAM-Rolle Artifact Registry-Leser (
roles/artifactregistry.reader
) zu: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
Erstellen Sie eine IAM-Richtlinienbindung zwischen dem Kubernetes-Dienstkonto und dem Google-Dienstkonto:
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
Image in das Artifact Registry-Repository hochladen
In diesem Abschnitt erstellen Sie ein OCI-Image und übertragen es per Push in Artifact Registry.
Erstellen Sie eine
Namespace
-Manifestdatei:cat <<EOF> test-namespace.yaml apiVersion: v1 kind: Namespace metadata: name: test EOF
Melden Sie sich bei Artifact Registry an:
gcloud auth configure-docker AR_REGION-docker.pkg.dev
Verpacken Sie das Image und übertragen Sie es per Push in die Artifact Registry:
crane
Die Befehle in diesem Abschnitt verwenden
crane
, um mit Remote-Images und Registries zu interagieren.Verpacken Sie die Datei:
tar -cf test-namespace.tar test-namespace.yaml
Sie haben das
crane
-Tool installiert.Übertragen Sie das Image per Push an Artifact Registry.
crane append -f test-namespace.tar -t AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1
oras
Die Befehle in diesem Abschnitt verwenden
oras
, um mit Remote-Images und Registries zu interagieren.Verpacken Sie die Datei:
tar -czf test-namespace.tar.gz test-namespace.yaml
Sie haben das
oras
-Tool installiert.Übertragen Sie das Image per Push an Artifact Registry.
oras push AR_REGION-docker.pkg.dev/PROJECT_ID/AR_REPO_NAME/test-namespace:v1 test-namespace.tar.gz
Config Sync für die Synchronisierung aus Ihrem Image konfigurieren
In diesem Abschnitt erstellen Sie ein RootSync
-Objekt und konfigurieren Config Sync für die Synchronisierung aus dem OCI-Image.
Erstellen Sie ein
RootSync
-Objekt mit einem eindeutigen Namen: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
Ersetzen Sie
ROOT_SYNC_NAME
durch den Namen IhresRootSync
-Objekts. Der Name darf im Cluster nur einmal vorkommen und darf nicht mehr als 26 Zeichen haben. Eine vollständige Liste der Optionen beim Konfigurieren vonRootSync
-Objekten finden Sie unter FelderRootSync
undRepoSync
.Wenden Sie das
RootSync
-Objekt an:kubectl apply -f ROOT_SYNC_NAME.yaml
Prüfen Sie, ob Config Sync mit dem Image synchronisiert wird:
nomos status --contexts=$(kubectl config current-context)
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
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
Sie haben jetzt ein Image erfolgreich mit Ihrem Cluster synchronisiert.