您基本上可以按照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
),就像在任何其他操作系统上一样。