Go语言 在GCP托管示例组中创建示例后运行脚本

dced5bon  于 2023-05-11  发布在  Go
关注(0)|答案(2)|浏览(172)

我使用的是分布式计算框架Bacalhau[0]。设置群集的模式如下:

$ curl -sL https://get.bacalhau.org/install.sh | bash
[...output...]
$ bacalhau serve
To connect another node to this private one, run the following command in your shell:
bacalhau serve --node-type compute --private-internal-ipfs --peer /ip4/10.158.0.2/tcp/1235/p2p/QmeEoVj8wyxMxhcUSr6p7EK1Dcie7PvNeXCVQny15Htb1W --ipfs-swarm-addr /ip4/10.158.0.2/tcp/46199/p2p/QmVPFmHmruuuAcEmsGRapB6yDDaPxhf2huqa9PhPVEHK8F

(在生产友好的格式中这样做涉及到使用systemd -我在这里已经排除了它)。
我想做的是有一个Google管理的示例组,它监视一个Cloud Pub/Sub(这里没有介绍),以便在发出信号时创建一个新示例。问题是对等字符串只有在第一个示例启动后才知道。我最初的想法是,我将启动一个示例,捕获输出,并将其写入一个所有内容都可以读取的公共位置。
我考虑过以下模式:
1.创建检查中心端点(KV存储?)获取此信息
1.创建从GCS存储桶读取此信息的示例模板
1.还有别的事吗
我读过这篇文章[1]关于使用GCS选举领导人,但我可以强制GCS作为锁定机制吗?还是需要使用整个库[2]?还是有别的解决办法?我可以使用GCP上的任何托管服务来实现这一点。
我的偏好不是使用golang,而是使用非编译语言(例如Python)来实现这一点。
[0][https://docs.bacalhau.org/quick-start-pvt-cluster](https://docs.bacalhau.org/quick-start-pvt-cluster)
[1][https://cloud.google.com/blog/topics/developers-practitioners/implementing-leader-election-google-cloud-storage](https://cloud.google.com/blog/topics/developers-practitioners/implementing-leader-election-google-cloud-storage)
[2][https://pkg.go.dev/github.com/hashicorp/vault/physical/gcs](https://pkg.go.dev/github.com/hashicorp/vault/physical/gcs)

ufj5ltwl

ufj5ltwl1#

您可以采取的一种方法是使用元数据服务器来存储对等字符串。*GCP documentation.
GCP提供了一个示例元数据服务器,允许您存储和检索示例的元数据。创建新示例时,可以使用gcloud命令行工具或Google Cloud API将对等字符串设置为示例上的元数据:

gcloud compute instances add-metadata INSTANCE_NAME --metadata PEERING_STRING=VALUE

要从Bacalhau启动脚本中读取元数据,请执行以下操作:

curl -H "Metadata-Flavor: Google" "http://metadata.google.internal/computeMetadata/v1/instance/attributes/PEERING_STRING"

如果你特别想要一个python脚本,使用requests库向curl链接发出API请求。

rdrgkggo

rdrgkggo2#

第一个答案的另一个选择是使用GCP Secrets。
本质上,初始节点将所需的信息写入Secret,并且处理Pub/Sub消息的代码将从Secret中提取该信息,以便使用它来添加新节点。
我建议这样做的原因是,在我看来,您需要的这些信息似乎会给予黑客访问恶意加入您的集群。我会把这些信息作为受保护的。使用主示例的元数据允许任何具有相当低级别权限的人访问元数据,因此可能会向集群中添加新的受感染节点。

相关问题