Google的Container OS可以与Compute Engine上的gRPC一起使用吗?

时间:2019-07-16 13:09:55

标签: docker google-cloud-platform google-compute-engine grpc google-container-os

我的高级体系结构在Cloud Endpoints for gRPC中有所描述。

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

enter image description here

根据Getting started with gRPC on Compute Engine,我通过SSH进入虚拟机并在实例上安装Docker(请参阅Install Docker on the VM instance)。最后,我拉下两个Docker容器(ESP和我的服务器),并run

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

我无需为操作系统配备实例再安装Docker,而只需为操作系统配备Container-Optimized OS,然后下拉容器并运行它们即可。

但是,唯一的gRPC tutorials代表gRPC on Kubernetes EnginegRPC on KubernetesgRPC on Compute Engine。没有提及Container OS。

是否有人将Container OS与gRPC一起使用,或者有人可以看到为什么这不起作用?

Creating an instance for advanced scenarios看起来很有意义,因为它指出:

  

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

就上下文而言,我正尝试移至Google Cloud中的CI / CD,而不再需要安装Docker就是朝这个方向迈出的一步。

1 个答案:

答案 0 :(得分:0)

您基本上可以遵循Getting started with gRPC on Compute Engine指南中几乎相同的说明,以在Container-Optimized OS上将gRPC服务器与ESP一起部署。就您而言,只需将Container-Optimized OS视作具有预安装Docker的OS(有更多功能,但就您而言,只有这一点很有趣)。

如果要在VM实例启动时自动自动化启动Docker容器(gRPC服务器+ ESP),可以使用const isAuthenticated = () => { const cognitoUser = userPool.getCurrentUser(); let isSessionValid = false; if (cognitoUser) { cognitoUser.getSession((err: Error, result: CognitoUserSession) => { if (!err) { isSessionValid = result.isValid(); } }); } return isSessionValid; }; 。以下cloud-init文件可自动启动文档示例(带有bookstore sample app)中介绍的相同容器。您可以用两个步骤替换创建Compute Engine实例部分。

创建一个cloud-init.cfg配置文件

使用以下内容创建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 就会读取此配置,并且:

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

使用容器优化的操作系统创建Compute Engine实例

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

--service

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配置。

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

  • SSH进入cloud-init,然后运行instance-1以查看正在运行的容器(gRPC服务器+ ESP)。您可能会在实例启动与两个容器启动之间遇到一些延迟
  • 通过客户端调用您的gRPC服务。例如(始终与文档中提供的书店应用程序一起使用):
docker ps

请注意,您也可以选择不使用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 。您可以在具有Container-Optimized OS的VM上直接运行cloud-init命令(与docker run文件中的命令相同),就像在其他任何OS上一样。