Google Compute Engine:使用另一个项目的快照?
Posted
技术标签:
【中文标题】Google Compute Engine:使用另一个项目的快照?【英文标题】:Google Compute Engine : Use snapshot from another project? 【发布时间】:2015-06-17 14:04:11 【问题描述】:我的开发者控制台中有两个项目。我已经对 project-1 中的一个虚拟机进行了“快照”。我想使用在 project-1 中创建的快照在 project-2 中创建一个新 VM。现在快照没有显示在选项中。 如何将快照从一个项目导入另一个项目?
【问题讨论】:
【参考方案1】:您可以从项目 1 中的快照创建一个图像,然后使用项目 2 从该图像创建一个实例。
我假设您在这两个项目中都有编辑权限。
您的问题是说您有一个快照,并希望通过项目 1 中的快照在项目 2 中创建一个实例。
如果您创建快照的磁盘仍然可用,请确保它不再附加到实例。如果它仍然附加到实例,取消选中“删除实例时删除启动磁盘”并删除实例。转到图像并单击从磁盘创建图像,然后从该磁盘创建图像。
如果您没有可用的磁盘,只有快照,请创建一个实例并将启动磁盘设置为快照并选择您的快照。然后按照上面的说明先删除实例来创建镜像。
现在您在项目 1 中有一张图片。您应该会在图片下方看到它。
我不知道为什么,但是您不会在项目 2 的控制台中看到列出的图像,但是您可以使用 gcloud 使用项目 1 中的图像在项目 2 中创建一个实例。在项目 1 中,单击在图像上并单击“查看 REST”,将出现图像的完整 URL,类似于:
https://www.googleapis.com/compute/v1/projects/cpomeroy-whitelist/global/images/ruby-image
使用 gcloud 使用项目 1 中的图像在项目 2 中创建实例:
gcloud config set project <project-id-of-project-2>
gcloud config list
(您应该验证您在项目 2 中)
gcloud compute instances create <name of instance> --image https://www.googleapis.com/compute/v1/projects/cpomeroy-whitelist/global/images/ruby-image
显然你的网址会有所不同。
我刚刚对此进行了测试,它可以工作。如果您需要更多帮助,请告诉我。
【讨论】:
感谢您的建议。我检查了将 gserviceaccount 从项目 1 授权到项目 2 的选项。你能帮我怎么做吗?提前致谢 如果你对这两个项目都有编辑权限,你就不需要搞乱 gserviceaccounts(我想你可能是这两个项目的创建者) 谢谢@chrispomeroy,我试过你的建议,效果很好。感谢您花费时间和精力解决这个问题以及整体贡献。 如果您将 URL 中的“beta”替换为“v1”,它可以工作。 比这里记录的“推荐”移动方式要容易得多:medium.com/google-cloud/…。非常感谢@nachi!【参考方案2】:@chrispomeroy 发布的答案对我有用,但我可以稍微简化一下,因为我需要越来越多地这样做。
假设您在 project-1 中有一张图片,并且需要在 project-2 中使用该图片创建一个实例。
gcloud config set project "project-2"
gcloud compute instances create <name-of-new-instance> \
--image <name-of-your-image-from-project-1> \
--image-project "project-1"
这样就无需担心使用URL
来处理任何事情。
编辑:我的答案在这一点上看起来很像他,但是这些东西的文档在这里:
gcloud compute instances create
【讨论】:
很好,我可以知道这些信息的来源吗?谷歌有记录吗? 如果您对两个项目都拥有正确的权限,这确实是最短的方法。 Defo 最简单的方法【参考方案3】:您不需要映像或暂存虚拟机,也不必中断源虚拟机。只需在源项目中创建快照:
$ gcloud compute --project p1 disks snapshot the-snapshot src-disk --snapshot-names=the-snapshot
Created [https://www.googleapis.com/compute/v1/projects/p1/global/snapshots/the-snapshot].
然后在目标项目中创建一个磁盘,--source-snapshot
指向上面返回的“已创建”URL:
$ gcloud compute --project p2 disks create the-disk \
--source-snapshot https://www.googleapis.com/compute/v1/projects/p1/global/snapshots/the-snapshot
gcloud
docs 中没有显示这种用法,我在@krishna praveen 的回答中找到了,但他的解释不正确;您不需要删除任何实例或使用图像。即使源和目标都是引导磁盘,这也有效:
$ gcloud compute --project p2 instances create the-vm --disk name=the-disk,boot=yes
如果出于某种原因您需要映像,您仍然可以将快照还原到磁盘并使用它来创建映像,而无需使用暂存 VM。如果暂存虚拟机会在启动时自动启动服务,这可能会干扰同一项目网络上其他正在运行的虚拟机,则这种做法更可取。
$ gcloud compute images create image-1 --source-disk=src-disk-image --source-disk-zone=zone1
现在可以从另一个项目中使用此图像(如上面的@jiminikiz 所示)。
$ gcloud compute --project p2 instances create <name-of-new-instance> --image image-1 \
--image-project p1 --zone=zone
【讨论】:
这可以在部署管理器中工作吗,你只有参数“sourceImage”来定义磁盘应该基于什么?似乎没有任何“sourceSnapshot”等价物 这是正确的方法。创建图像是一个不必要的步骤。【参考方案4】:“chrispomeroy”提供的解决方案工作正常,但需要先使用您的个人 google 用户帐户(而不是 project2 服务帐户)初始化 gcloud(因为它是有权访问这两个项目的人):
gcloud init(并选择 [2] 使用新凭据登录)
然后您确实可以在项目 2 上创建 VM(从项目 1 的基础映像):
gcloud 计算实例创建 testimg --image --image-project(不需要 URL) 我今天(2015 年 11 月)进行了测试,效果很好
【讨论】:
【参考方案5】:这是通过浏览器单击的解决方案。您需要什么? 你需要有形象。要从磁盘创建映像,必须将磁盘与任何实例分离。
如果您在 Project1 中只有实例,步骤是什么:
从 Project1 中的实例创建快照。
在 Project1 中从此快照创建实例。取消勾选“删除启动 删除实例时的磁盘”。此实例仅用于 现在将被删除
删除刚刚创建的实例
转到“磁盘”菜单,您必须在那里看到来自 实例。
转到“图像”菜单 -> “创建图像”。在这里您可以创建图像。如果您没有分离的磁盘,您将没有任何磁盘 在下拉菜单中可用。
转到项目 2 并使用您为项目 1 创建的自定义图像创建实例。如何?启动盘 -> 更改 -> 自定义 images-> 选择项目 1-> 在这里您可以看到您的自定义图像
【讨论】:
【参考方案6】:AFAIK,这是不可能的。要完成您所描述的,最好的做法是使用this tutorial。您有几个步骤可以创建一个空白磁盘,将其附加到相关机器,将引导分区打包并上传到云存储。完成后,在本地下载,切换项目并上传到另一个项目。点击New Instance
时,您将能够从图像列表中选择机器
【讨论】:
在教程中它要求格式化和挂载外部磁盘,但在我的情况下,外部磁盘已经连接,我无法格式化,还有其他选项吗? 现在可以了。关注@jiminikiz 的回答【参考方案7】:可以使用图像在整个项目中创建实例。现在,如果您在项目 1 中有图像,您也可以在项目 2 中选择它。
但是,截至今天,您无法看到整个项目的磁盘。如果您必须将带有关联附加磁盘的 VM 从项目 1 迁移到项目 2,请按照以下步骤操作。
使用快照并通过连接gcloud
命令接口在项目2中创建磁盘。
连接Project 2,然后执行:
gcloud compute --project "GCPProject2" disks create "myserver-disk1" --size "50" --zone "us-east1-b" --source-snapshot https://www.googleapis.com/compute/v1/projects/GCPProject1/global/snapshots/snapshot-myserver-disk1 --description "DriveName" --type "pd-standard"
以上将在 Project2 中创建磁盘。然后您需要通过保留启动盘来删除 Project1 中的实例。
然后,从磁盘myserver-bootdisk
创建映像。
创建映像后,切换到项目 2,然后从映像创建服务器,使用下拉菜单并从项目 1 中选择映像。
添加从快照创建的附加磁盘并创建 VM。
【讨论】:
以上是关于Google Compute Engine:使用另一个项目的快照?的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:没有名为 google_compute_engine 的模块
Google App Engine 通过内部网络与 Compute Engine 通信
连接 Google App Engine 和 Google Compute Engine
Google Cloud 中的 Google Compute Engine、App Engine 和 Container Engine 有啥区别?