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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google的Container OS可以与Compute Engine上的gRPC一起使用吗?相关的知识,希望对你有一定的参考价值。

我的高级体系结构在gRPC的Cloud Endpoints中进行了描述

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

在此处输入图片说明

按照Compute Engine上的gRPC入门指南 ,我通过SSH进入VM并在实例上安装Docker(请参阅在VM实例上安装Docker )。 最后,我拉下两个Docker容器(ESP和我的服务器)并run它们。

我一直在阅读Google提供的关于Container-Optimized OS的内容

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

但是,唯一的gRPC教程适用于Kubernetes引擎上的gRPCKubernetes上的gRPCCompute Engine 上的gRPC 。 没有提及Container OS。

有没有人使用带有gRPC的Container OS,或者有人可以看到为什么这不起作用?

为高级方案创建实例看起来很相关,因为它指出:

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

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

答案

您基本上可以按照《 Compute Engine上的gRPC入门》指南中几乎相同的说明进行操作,以在Container-Optimized OS上使用ESP部署gRPC服务器。 就您而言,只需将Container-Optimized OS视为具有预安装Docker的OS(有更多功能,但就您而言,只有这一点很有趣)。

如果要在VM实例启动时自动启动Docker容器(gRPC服务器+ ESP),则可以使用cloud-init 。 以下cloud-init.cfg文件可自动启动文档示例(带有bookstore示例app )中介绍的相同容器。 您可以用两个步骤替换“ 创建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容器。 在此容器启动命令中,将<YOUR_PROJECT_ID>替换为您的项目ID(或根据您的服务名称替换整个--service选项)

使用容器优化的操作系统创建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将使用cloud-init.cfg的内容填充user-data元数据。 实例启动时将考虑此cloud-init配置。

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

  • SSH进入instance-1 ,然后运行docker 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上直接运行cloud-init.cfg docker run命令(与cloud-init.cfg文件中的命令相同),就像在其他任何OS上一样。

以上是关于Google的Container OS可以与Compute Engine上的gRPC一起使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

查找 Google Container Registry 公共镜像列表

在 Cocoa App Swift [Mac OS] 中显示在 containerView 内的 NSViewController 不会与 Container 的边界对齐

docker container里面为什么不用装OS

java.lang.ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer

具有外部 IP 的 Google Container Engine,没有负载平衡器

com.google.android.youtube.api.jar.client.RemoteEmbeddedPlayer.x 上的 android.os.DeadObjectException