使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。
快速入门:使用 Pub/Sub 消息接收事件 (Google Cloud CLI)

使用 Pub/Sub 消息接收事件 (gcloud CLI)

本快速入门介绍如何将 Google Kubernetes Engine (GKE) 服务设置为目标,以使用 Eventarc 接收来自 Pub/Sub 主题的事件。

在本快速入门中,您将执行以下操作:

  1. 创建 GKE 集群。
  2. 设置一个服务帐号,以使用将事件转发到目标的事件转发器组件从 Pub/Sub 中拉取事件。
  3. 在 Eventarc 中初始化 GKE 目标。
  4. 部署接收事件的 GKE 服务。
  5. 创建将 Pub/Sub 主题连接到 GKE 服务的 Eventarc 触发器。
  6. 生成并查看 Pub/Sub 事件。

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  6. 安装并初始化 Google Cloud CLI。如果系统提示您配置默认计算区域,请输入 n
  7. 更新 gcloud 组件:
    gcloud components update
  8. 启用 Google Cloud、Cloud Build、Resource Manager、Google Kubernetes Engine API、Container Registry 和 Eventarc API:
    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
    
  9. 设置本快速入门中使用的配置变量:
    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
    PROJECT_ID 替换为您的 Google Cloud 项目 ID。
  10. 可选:您可以使用 gcloud_name 输入以下命令来检查配置设置:
    gcloud config list
    输出应类似如下所示:
    [eventarc]
    location = us-central1
    [run]
    cluster = events-cluster
    cluster_location = us-central1
    platform = gke

创建 GKE 集群

使用 HttpLoadBalancing 插件创建 GKE 集群。启用 Workload Identity 以从 GKE 中运行的应用访问 Google Cloud 服务。

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

等待集群创建过程完成。您可以在创建过程中忽略警告。创建集群后,输出应类似于以下内容:

Creating cluster events-cluster...done.
Created [https://container.googleapis.com/v1beta1/projects/my-project/zones/us-central1/clusters/events-cluster].

其中 my-project 是您的 Google Cloud 项目 ID。

这将在 my-project 中创建一个名为 events-cluster 的 GKE 集群。

设置 Google 服务帐号

设置用户提供的服务帐号并向其授予特定角色,以便事件转发器组件可以从 Pub/Sub 中拉取事件。

  1. 创建一个名为 TRIGGER_GSA 的服务帐号,用于创建触发器:

    TRIGGER_GSA=eventarc-gke-triggers
    gcloud iam service-accounts create $TRIGGER_GSA
  2. 向该服务帐号授予 pubsub.subscribermonitoring.metricWriter 角色:

    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 目标

对于以 GKE 服务为目标的每个触发器,Eventarc 会创建一个事件转发器组件,用于从 Pub/Sub 拉取事件并将其转发到目标。如需在 GKE 集群中创建组件和管理资源,请向 Eventarc 服务帐号授予权限:

  1. 为 Eventarc 启用 GKE 目标:

    gcloud eventarc gke-destinations init
    
  2. 在系统提示绑定所需角色时,输入 y

    以下角色绑定到服务帐号:

    • compute.viewer
    • container.developer
    • iam.serviceAccountAdmin

创建 GKE 服务目标

使用预构建的映像 gcr.io/cloudrun/hello 部署将接收和记录事件的 GKE 服务:

  1. 创建 Kubernetes Deployment:

    SERVICE_NAME=hello-gke
    kubectl create deployment $SERVICE_NAME \
    --image=gcr.io/cloudrun/hello
    
  2. 公开为 Kubernetes Service:

    kubectl expose deployment $SERVICE_NAME \
    --type LoadBalancer --port 80 --target-port 8080
    

创建 Pub/Sub 触发器

当消息发布到 Pub/Sub 主题时,Eventarc 触发器会将消息发送到 hello-gke GKE 服务。

  1. 创建一个 GKE 触发器来监听 Pub/Sub 消息:

    新的 Pub/Sub 主题

    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
    

    这会创建一个新的 Pub/Sub 主题和一个名为 gke-trigger-pubsub 的触发器。

    现有 Pub/Sub 主题

    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
    

    请替换以下内容:

    • PROJECT_ID 是您的 Google Cloud 项目 ID。
    • TOPIC_ID 是现有 Pub/Sub 主题的 ID。这将为现有 Pub/Sub 主题创建一个名为 gke-trigger-pubsub 的触发器。
  2. 确认触发器已成功创建:

    gcloud eventarc triggers list

    输出应类似如下所示:

    NAME: gke-trigger-pubsub
    TYPE: google.cloud.pubsub.topic.v1.messagePublished
    DESTINATION: GKE: hello-gke
    ACTIVE: Yes
    

生成和查看事件

您可以通过向 Pub/Sub 主题发布消息来生成事件,以触发 GKE 服务。然后,您可以在 Pod 日志中查看该消息。

  1. 查找 Pub/Sub 主题并将其设置为环境变量:

    TOPIC=$(gcloud eventarc triggers describe gke-trigger-pubsub --format='value(transport.pubsub.topic)')
    
  2. 向 Pub/Sub 主题发送消息以生成事件:

    gcloud pubsub topics publish $TOPIC --message="Hello World"
    

    GKE 服务会记录事件的消息。

  3. 要查看事件消息,请执行以下操作:

    1. 找到 Pod ID:
      kubectl get pods
      
      输出应类似如下所示:
      NAME                                         READY   STATUS             RESTARTS   AGE
      hello-gke-645964f578-2mjjt                   1/1     Running            0          35s
      其中,NAME 是 Pod 的名称。复制要在下一步中使用的 NAME
    2. 查看 Pod 的日志:
      kubectl logs NAME
      NAME 替换为您复制的 Pod 名称。
    3. 查找类似如下的日志条目:
      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"[...]}
      

清理

虽然当服务未在使用时 Cloud Run 不会产生费用,但您可能仍然需要为在 Container Registry 中存储容器映像Eventarc 资源Pub/Sub 消息GKE 集群付费。

您可以删除映像删除 Pub/Sub 主题删除 Pub/Sub 订阅以及删除 GKE 集群

要删除 Eventarc 触发器,请运行以下命令:

gcloud eventarc triggers delete gke-trigger-pubsub

或者,您也可以删除 Google Cloud 项目,以避免产生费用。删除 Cloud 项目后,系统即会停止对该项目中使用的所有资源计费。

gcloud projects delete PROJECT_ID_OR_NUMBER

PROJECT_ID_OR_NUMBER 替换为项目 ID 或编号。

后续步骤

使用 Cloud Audit Logs 接收事件 (Google Cloud CLI)