1

Cloud Endpoints for gRPC中描述了我的高级架构。

下面的服务器是一个安装了 Docker 的 Compute Engine 实例,运行两个容器(ESP 和我的服务器):

在此处输入图像描述

根据Getting started with gRPC on Compute Engine,我通过 SSH 连接到 VM 并在实例上安装 Docker(请参阅在 VM 实例上安装 Docker)。最后我拉下两个 Docker 容器(ESP 和我的服务器)和run它们。

我一直在阅读Google 的 Container-Optimized OS

我可以使用Container-Optimized OS来配置操作系统,然后拉下我的容器并运行它们,而不是使用操作系统配置实例然后安装 Docker 。

但是,唯一的gRPC 教程适用于 Kubernetes Engine上的 gRPC 、Kubernetes 上的 gRPCCompute Engine上的 gRPC 。没有提到容器操作系统。

有没有人将容器操作系统与 gRPC 一起使用,或者任何人都知道为什么这不起作用?

为高级场景创建一个实例看起来很相关,因为它指出:

使用此方法 [...] 部署多个容器,并使用 cloud-init 进行高级配置。

就上下文而言,我正在尝试迁移到 Google Cloud 中的 CI/CD,而无需安装 Docker 将是朝着这个方向迈出的一步。

4

1 回答 1

0

您基本上可以按照Compute Engine 上的 gRPC 入门指南中几乎相同的说明在 Container-Optimized OS 上使用 ESP 部署 gRPC 服务器。在您的情况下,只需将 Container-Optimized OS 视为具有预安装 Docker 的操作系统(还有更多功能,但在您的情况下,只有这个是有趣的)。

cloud-init如果您想在 VM 实例启动时自动启动 Docker 容器(gRPC 服务器 + ESP),则可以使用它。以下cloud-init.cfg文件自动启动文档示例中提供的相同容器(使用bookstore 示例应用程序)。您可以将创建 Compute Engine 实例部分替换为两个步骤。

创建cloud-init配置文件

cloud-init.cfg使用以下内容创建:

#cloud-config

runcmd:
- docker network create --driver bridge esp_net
- docker run 
    --detach
    --name=bookstore
    --net=esp_net
    gcr.io/endpointsv2/python-grpc-bookstore-server:1
- docker run
    --detach
    --name=esp
    --net=esp_net
    --publish=80:9000
    gcr.io/endpoints-release/endpoints-runtime:1
    --service=bookstore.endpoints.<YOUR_PROJECT_ID>.cloud.goog
    --rollout_strategy=managed
    --http2_port=9000
    --backend=grpc://bookstore:8000

启动实例后,cloud-init将读取此配置并:

  • 创建 Docker 网络 ( esp_net)
  • 运行书店容器
  • 运行 ESP 容器。在此容器启动命令中,替换为您的项目 ID(或根据您的服务名称<YOUR_PROJECT_ID>替换整个选项)--service

使用 Container-Optimized OS 创建 Compute Engine 实例

您可以从控制台或通过命令行创建实例:

gcloud compute instances create instance-1 \
    --zone=us-east1-b \
    --machine-type=n1-standard-1 \
    --tags=http-server,https-server \
    --image=cos-73-11647-267-0 \
    --image-project=cos-cloud \
    --metadata-from-file user-data=cloud-init.cfg

--metadata-from-file使用. user-data_ 实例启动时将考虑cloud-init.cfg此配置。cloud-init

您可以通过以下方式验证此作品:

  • SSH 进入instance-1并运行docker ps以查看正在运行的容器(gRPC 服务器 + ESP)。您可能会在实例启动和两个容器启动之间遇到一些延迟
  • 使用客户端调用您的 gRPC 服务。例如(始终使用文档中提供的书店应用程序):
INSTANCE_IP=$(gcloud compute instances describe instance-1 --zone us-east1-b --format="value(network_interfaces[0].accessConfigs.natIP)")
python bookstore_client.py --host $INSTANCE_IP --port 80 # returns a valid response

请注意,您也可以选择不使用cloud-init. 您可以使用 Container-Optimized OS 在 VM 上直接运行docker run命令(与文件中的命令相同cloud-init.cfg),就像在任何其他操作系统上一样。

于 2019-08-10T19:39:25.867 回答