我的高级体系结构在Cloud Endpoints for gRPC中有所描述。
下面的服务器是一个安装了Docker的Compute Engine实例,该实例运行两个容器(ESP和我的服务器):
根据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 Engine,gRPC on Kubernetes和gRPC on Compute Engine。没有提及Container OS。
是否有人将Container OS与gRPC一起使用,或者有人可以看到为什么这不起作用?
Creating an instance for advanced scenarios看起来很有意义,因为它指出:
使用此方法来部署多个容器并使用 cloud-init进行高级配置。
就上下文而言,我正尝试移至Google Cloud中的CI / CD,而不再需要安装Docker就是朝这个方向迈出的一步。
答案 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
就会读取此配置,并且:
cloud-init
)esp_net
替换为您的项目ID(或根据您的服务名称替换整个<YOUR_PROJECT_ID>
选项)您可以从控制台或通过命令行创建实例:
--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
配置。
您可以通过以下方式验证此作品:
cloud-init
,然后运行instance-1
以查看正在运行的容器(gRPC服务器+ ESP)。您可能会在实例启动与两个容器启动之间遇到一些延迟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上一样。