【发布时间】:2015-06-17 14:04:11
【问题描述】:
我的开发者控制台中有两个项目。我已经对 project-1 中的一个虚拟机进行了“快照”。我想使用在 project-1 中创建的快照在 project-2 中创建一个新 VM。现在快照没有显示在选项中。 如何将快照从一个项目导入另一个项目?
【问题讨论】:
标签: cloud google-compute-engine google-cloud-platform
我的开发者控制台中有两个项目。我已经对 project-1 中的一个虚拟机进行了“快照”。我想使用在 project-1 中创建的快照在 project-2 中创建一个新 VM。现在快照没有显示在选项中。 如何将快照从一个项目导入另一个项目?
【问题讨论】:
标签: cloud google-compute-engine google-cloud-platform
您可以从项目 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
显然你的网址会有所不同。
我刚刚对此进行了测试,它可以工作。如果您需要更多帮助,请告诉我。
【讨论】:
@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 --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
gclouddocs 中没有显示这种用法,我在@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
【讨论】:
“chrispomeroy”提供的解决方案工作正常,但需要先使用您的个人 google 用户帐户(而不是 project2 服务帐户)初始化 gcloud(因为它是有权访问这两个项目的人):
gcloud init(并选择 [2] 使用新凭据登录)
然后您确实可以在项目 2 上创建 VM(从项目 1 的基础映像):
gcloud 计算实例创建 testimg --image --image-project(不需要 URL) 我今天(2015 年 11 月)进行了测试,效果很好
【讨论】:
这是通过浏览器单击的解决方案。您需要什么? 你需要有形象。要从磁盘创建映像,必须将磁盘与任何实例分离。
如果您在 Project1 中只有实例,步骤是什么:
从 Project1 中的实例创建快照。
在 Project1 中从此快照创建实例。取消勾选“删除启动
删除实例时的磁盘”。此实例仅用于
现在将被删除
删除刚刚创建的实例
转到“磁盘”菜单,您必须在那里看到来自 实例。
转到“图像”菜单 -> “创建图像”。在这里您可以创建图像。如果您没有分离的磁盘,您将没有任何磁盘 在下拉菜单中可用。
转到项目 2 并使用您为项目 1 创建的自定义图像创建实例。如何?启动盘 -> 更改 -> 自定义 images-> 选择项目 1-> 在这里您可以看到您的自定义图像
【讨论】:
AFAIK,这是不可能的。要完成您所描述的,最好的做法是使用this tutorial。您有几个步骤可以创建一个空白磁盘,将其附加到相关机器,将引导分区打包并上传到云存储。完成后,在本地下载,切换项目并上传到另一个项目。点击New Instance时,您将能够从图像列表中选择机器
【讨论】:
可以使用图像在整个项目中创建实例。现在,如果您在项目 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。
【讨论】: