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

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

【讨论】:

这可以在部署管理器中工作吗,你只有参数“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 有啥区别?

无法在 Google Cloud Compute Engine 上使用 GPU

使用 Go 在 Google Container/Compute Engine 中登录到 Google Cloud