【问题标题】:Can Google's Container OS be used with gRPC on Compute Engine?Google 的 Container OS 可以与 Compute Engine 上的 gRPC 一起使用吗?
【发布时间】:2019-11-25 05:40:48
【问题描述】:

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

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

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

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

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

但是,只有 gRPC tutorials 用于 gRPC on Kubernetes EnginegRPC on KubernetesgRPC on Compute Engine。没有提到容器操作系统。

有没有人使用过带有 gRPC 的 Container OS,或者任何人都知道为什么这不起作用?

Creating an instance for advanced scenarios 看起来很相关,因为它声明:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    创建一个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)
    • 运行 bookstore 容器
    • 运行 ESP 容器。在此容器启动命令中,将 &lt;YOUR_PROJECT_ID&gt; 替换为您的项目 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 将使用cloud-init.cfg 的内容填充user-data 元数据。实例启动时将考虑此 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。您可以在具有容器优化操作系统的 VM 上直接运行 docker run 命令(与 cloud-init.cfg 文件中的命令相同),就像在任何其他操作系统上一样。

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 2017-04-07
      • 2016-06-05
      • 1970-01-01
      • 2018-03-14
      相关资源
      最近更新 更多