我们使用 terraform 设置 GCE 实例,然后使用 ansible-playbooks 来配置它们并将我们的服务转移到机器上。
我正在我们的组织中运行一个项目,该项目需要从另一个项目中提取 Docker 映像。这些图像托管在另一个项目的容器注册表中。
我理想的事件顺序是:
- 使用 terraform 和正确配置的服务帐户在我的项目中创建 GCE。
- 使用ansible在GCE上安装docker。
- 使用ansible模块
docker_container
从容器注册表中提取我想要的必要图像。
这个看似简单的工作流程其实并不简单。起初,我发现仅运行 docker_container 就会失败,因为 docker 需要首先进行身份验证。鉴于我不想登录计算机并使用凭据助手等进行设置,我唯一的方法就是尝试运行命令docker login -u _json_key -p<jsonkeyfile> http://gcr.io
如果我登录到有问题的机器,但尝试使用 ansible 运行它,我可以让它直接在命令行上运行docker-login
让我做噩梦单独的问题 https://stackoverflow.com/questions/57260374/docker-login-to-gce-using-ansible-docker-login-and-json-key所以我想完全避免它。
GCE 实例是使用在创建过程中预先配置的专用服务帐户(使用 terraform)创建的。所有角色都已授予该帐户,因为如果我从命令行使用服务帐户密钥,我可以登录并提取图像。
我真正期望的是,在上面的步骤 1 中,如果我使用具有所有正确凭据的 google 服务帐户,则 GCE 实例应该已经设置为与容器注册表通信。
有没有办法让它纯粹作为启动配置的一部分工作?
我调查了https://cloud.google.com/container-optimized-os/docs/ https://cloud.google.com/container-optimized-os/docs/但我还不想使用 chromeOS,此外我也不知道它是否会开箱即用,尽管阅读文档感觉如此。
有没有办法预先设置一个 docker 就绪的 GCE 实例?如果没有,是否有人尝试过使用基于 ansible 的工作流程docker login
并让它发挥作用吗?
你应该利用(使用容器优化的操作系统!)而不是手动安装 Docker 并配置它。这允许在引导过程中拉取并启动映像。对于身份验证,您应该能够授权您的Compute Engine 默认服务帐号 https://cloud.google.com/compute/docs/access/service-accounts#compute_engine_default_service_account甚至可以从另一个项目访问 GCR 中的图像。或者创建并使用专用服务帐户,请参阅this doc https://cloud.google.com/sdk/gcloud/reference/auth/activate-service-account关于如何在实例中激活它。另请参阅here https://cloud.google.com/iam/docs/granting-roles-to-service-accounts关于向服务账户授予 IAM 角色。
要使用 Docker 映像创建 Compute Engine 实例,您可以使用以下命令Gcloud命令 https://cloud.google.com/sdk/gcloud/reference/beta/compute/instances/create-with-container(不确定 Ansible 是否有等效的)
gcloud beta compute instances create-with-container
注意:考虑在 ServerFault 中发布此类问题,因为它将针对网络和系统管理员受众。 StackOverflow更适合开发者社区。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)