Ereignisse mit Pub/Sub-Nachrichten empfangen (gcloud-CLI)
In dieser Kurzanleitung wird gezeigt, wie Sie einen GKE-Dienst (Google Kubernetes Engine) als Ziel für den Empfang von Ereignissen aus einem Pub/Sub-Thema mithilfe von Eventarc einrichten.
In dieser Kurzanleitung tun Sie Folgendes:
- einen GKE-Cluster installieren
- Richten Sie ein Dienstkonto ein, um Ereignisse aus Pub/Sub mithilfe einer Ereignisweiterlungskomponente abzurufen, die Ereignisse an das Ziel weiterleitet.
- GKE-Ziele in Eventarc initialisieren
- einen GKE-Dienst bereitstellen, der Ereignisse empfängt
- einen Eventarc-Trigger erstellen, der ein Pub/Sub-Thema mit dem GKE-Dienst verbindet
- Generieren Sie ein Pub/Sub-Ereignis und rufen Sie es auf.
Hinweis
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.
- Installieren und initialisieren Sie das Google Cloud CLI.
Geben Sie
n
ein, wenn Sie aufgefordert werden, eine Standard-Computing-Region zu konfigurieren. - Aktualisieren Sie die gcloud-Komponenten:
gcloud components update
- Aktivieren Sie die Google Cloud, Cloud Build, Resource Manager, Google Kubernetes Engine API, Container Registry und Eventarc APIs:
gcloud services enable cloudapis.googleapis.com gcloud services enable cloudbuild.googleapis.com gcloud services enable cloudresourcemanager.googleapis.com gcloud services enable container.googleapis.com gcloud services enable containerregistry.googleapis.com gcloud services enable eventarc.googleapis.com
- Legen Sie die in dieser Kurzanleitung verwendeten Konfigurationsvariablen fest:
gcloud config set project PROJECT_ID gcloud config set run/cluster events-cluster gcloud config set run/cluster_location us-central1 gcloud config set run/platform gke gcloud config set eventarc/location us-central1
Ersetzen SiePROJECT_ID
durch Ihre Google Cloud-Projekt-ID. - Optional: Sie können die Konfigurationseinstellungen mit gcloud_name prüfen. Geben Sie dazu Folgendes ein:
gcloud config list
Die Ausgabe sollte in etwa so aussehen:[eventarc] location = us-central1 [run] cluster = events-cluster cluster_location = us-central1 platform = gke
GKE-Cluster erstellen
Erstellen Sie einen GKE-Cluster mit dem Add-on HttpLoadBalancing
.
Aktivieren Sie Workload Identity für den Zugriff auf Google Cloud-Dienste aus Anwendungen, die in GKE ausgeführt werden.
PROJECT_ID=$(gcloud config get-value project) gcloud beta container clusters create events-cluster \ --addons=HttpLoadBalancing \ --machine-type=n1-standard-4 \ --enable-autoscaling --min-nodes=2 --max-nodes=10 \ --no-issue-client-certificate --num-nodes=2 \ --logging=SYSTEM,WORKLOAD \ --monitoring=SYSTEM \ --scopes=cloud-platform,logging-write,monitoring-write,pubsub \ --zone us-central1 \ --release-channel=rapid \ --workload-pool=$PROJECT_ID.svc.id.goog
Warten Sie, bis die Erstellung des Clusters abgeschlossen ist. Sie können die Warnungen während der Erstellung ignorieren. Nachdem der Cluster erstellt wurde, sollte die Ausgabe in etwa so aussehen:
Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1beta1/projects/my-project
/zones/us-central1/clusters/events-cluster].
Dabei ist my-project
Ihre Google Cloud-Projekt-ID.
Dadurch wird ein GKE-Cluster mit dem Namen events-cluster
in my-project
erstellt.
Google-Dienstkonto einrichten
Richten Sie ein vom Nutzer bereitgestelltes Dienstkonto ein und weisen Sie ihm bestimmte Rollen zu, damit die Komponente zur Weiterleitung von Ereignissen Ereignisse aus Pub/Sub abrufen kann.
Erstellen Sie ein Dienstkonto mit dem Namen
TRIGGER_GSA
, das zum Erstellen von Triggern verwendet wird:TRIGGER_GSA=eventarc-gke-triggers gcloud iam service-accounts create $TRIGGER_GSA
Weisen Sie dem Dienstkonto die Rollen
pubsub.subscriber
undmonitoring.metricWriter
zu:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/monitoring.metricWriter"
GKE-Ziele aktivieren
Für jeden Trigger, der auf einen GKE-Dienst abzielt, erstellt Eventarc eine Komponente für den Ereignis-Forwarder, die Ereignisse aus Pub/Sub abruft und an das Ziel weiterleitet. Weisen Sie zur Erstellung der Komponente und zur Verwaltung von Ressourcen im GKE-Cluster einem Eventarc-Dienstkonto Berechtigungen zu.
Aktivieren Sie GKE-Ziele für Eventarc:
gcloud eventarc gke-destinations init
Geben Sie bei der Aufforderung, die erforderlichen Rollen zu binden,
y
ein.Die folgenden Rollen sind an das Dienstkonto gebunden:
compute.viewer
container.developer
iam.serviceAccountAdmin
GKE-Dienstziel erstellen
Stellen Sie mit dem vordefinierten Image gcr.io/cloudrun/hello
einen GKE-Dienst bereit, der Ereignisse empfängt und protokolliert:
Erstellen Sie ein Kubernetes-Deployment:
SERVICE_NAME=hello-gke kubectl create deployment $SERVICE_NAME \ --image=gcr.io/cloudrun/hello
Geben Sie es als Kubernetes-Dienst frei:
kubectl expose deployment $SERVICE_NAME \ --type LoadBalancer --port 80 --target-port 8080
Pub/Sub-Trigger erstellen
Wenn eine Nachricht im Pub/Sub-Thema veröffentlicht wird, sendet der Eventarc-Trigger Nachrichten an den GKE-Dienst hello-gke
.
Erstellen Sie einen GKE-Trigger, um Pub/Sub-Nachrichten zu überwachen:
Neues Pub/Sub-Thema
gcloud eventarc triggers create gke-trigger-pubsub \ --destination-gke-cluster=events-cluster \ --destination-gke-location=us-central1 \ --destination-gke-namespace=default \ --destination-gke-service=hello-gke \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
Dadurch werden ein neues Pub/Sub-Thema und ein Trigger mit dem Namen
gke-trigger-pubsub
für das Thema erstellt.Vorhandenes Pub/Sub-Thema
gcloud eventarc triggers create gke-trigger-pubsub \ --destination-gke-cluster=events-cluster \ --destination-gke-location=us-central1 \ --destination-gke-namespace=default \ --destination-gke-service=hello-gke \ --destination-gke-path=/ \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
Dabei gilt:
PROJECT_ID
ist Ihre Google Cloud-Projekt-ID.TOPIC_ID
ist die ID des vorhandenen Pub/Sub-Themas. Damit wird ein Trigger mit dem Namengke-trigger-pubsub
für das vorhandene Pub/Sub-Thema erstellt.
So prüfen Sie, ob der Trigger erfolgreich erstellt wurde:
gcloud eventarc triggers list
Die Ausgabe sollte in etwa so aussehen:
NAME: gke-trigger-pubsub TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: GKE: hello-gke ACTIVE: Yes
Ereignis generieren und aufrufen
Sie können ein Ereignis generieren, um den GKE-Dienst auszulösen, indem Sie eine Nachricht im Pub/Sub-Thema veröffentlichen. Sie können sich die Nachricht in den Pod-Logs ansehen.
Suchen Sie das Pub/Sub-Thema und legen Sie es als Umgebungsvariable fest:
TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub --format='value(transport.pubsub.topic)')
Senden Sie eine Nachricht an das Pub/Sub-Thema, um ein Ereignis zu generieren:
gcloud pubsub topics publish $TOPIC --message="Hello World"
Der GKE-Dienst protokolliert die Nachricht des Ereignisses.
So rufen Sie die Ereignisnachricht auf:
- Suchen Sie die Pod-ID:
kubectl get pods
Die Ausgabe sollte in etwa so aussehen:NAME READY STATUS RESTARTS AGE hello-gke-645964f578-2mjjt 1/1 Running 0 35s
Dabei istNAME
der Name des Pods. Notieren Sie sich denNAME
, den Sie im nächsten Schritt benötigen. - Prüfen Sie die Logs des Pods:
kubectl logs NAME
Ersetzen SieNAME
durch den Namen des Pods, den Sie kopiert haben. - Suchen Sie nach einem Logeintrag wie dem folgenden:
2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT {"severity":"INFO","eventType":"google.cloud.pubsub.topic.v1.messagePublished","message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World"[...]}
- Suchen Sie die Pod-ID:
Bereinigen
Während für Cloud Run keine Kosten anfallen, wenn der Dienst nicht verwendet wird, können dennoch Kosten für die Speicherung des Container-Images in Container Registry, für Eventarc-Ressourcen, Pub/Sub-Nachrichten und für den GKE-Cluster anfallen.
Sie können das Image löschen, das Pub/Sub-Thema löschen und das Pub/Sub-Abo löschen und den GKE-Cluster löschen.
So löschen Sie den Eventarc-Trigger:
gcloud eventarc triggers delete gke-trigger-pubsub
Alternativ können Sie Ihr Google Cloud-Projekt löschen, um wiederkehrende Gebühren zu vermeiden. Durch das Löschen des Cloudprojekts wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
gcloud projects delete PROJECT_ID_OR_NUMBER
Ersetzen Sie PROJECT_ID_OR_NUMBER
durch die Projekt-ID oder Projektnummer.
Nächste Schritte
Ereignisse mit Cloud-Audit-Logs empfangen (Google Cloud CLI)