Google Compute Engine - 克隆实例

Posted

技术标签:

【中文标题】Google Compute Engine - 克隆实例【英文标题】:Google Compute Engine - Clone Instance 【发布时间】:2014-11-22 21:50:58 【问题描述】:

我有一个 GCE 实例,我已经自定义并上传了各种应用程序(例如在 Apache 下运行的 php 应用程序)。我现在想复制这个实例 - 即上面的所有内容。 我最初认为 clone 可能会这样做,但我玩了一下它,它似乎只克隆实例配置,而不是任何定制的东西。

我一直在用谷歌搜索它,看起来我需要做的是创建一个图像并在新实例或克隆上使用这个图像? 那是对的吗? 如果是这样,是否有任何可能的步骤来做到这一点? 我查看了图片上的 Google 页面,它谈到了必须终止实例才能执行此操作。我对此有点警惕。也许这只是文档中使用的语言,但我不想丢失我现有的实例。

此外,所有内容都会存储在图像上吗? 那么,例如,以下所有内容都会出现在图像上吗?

mysql - 配置和数据库架构和数据? Apache - /var/www/html 下的所有已安装应用程序 PHP - php.ini 等... 所有其他服务器配置/修改?

【问题讨论】:

相关:***.com/q/31312085/322020 【参考方案1】:

现在是 2021 年,现在很简单:

    单击要克隆的 VM 实例 点击顶部的“创建机器映像” 从左侧的机器映像中,打开您的新映像并单击“创建 VM 实例”

这将克隆机器规格和数据。

【讨论】:

当我尝试这个时,没有任何数据被复制过来。这只是一个全新的例子。不知道我做错了什么。【参考方案2】:

在 Web 控制台中,创建快照,然后单击快照并通过 CREATE INSTANCE 按钮,您可以自定义设置,然后单击显示的位置:

等效的 REST 或 命令行

并复制命令行,这将是您的模板。

由此,您可以创建一个 BASH 脚本(clone_instance.sh),我做了这样的事情:

#!/bin/bash -e

snapshot="my-snapshot-name"
gcloud_account="ACCOUNTNUMBER-compute@developer.gserviceaccount.com"

#clone 10 machines
for machine in 01 02 03 04 05 06 07 08 09 10
do 

    gcloud compute --project "myProject" disks create "instance-$machine" \
        --size "220" --zone "us-east1-d" --source-snapshot "$snapshot" \
        --type "pd-standard"

    gcloud compute --project "bizqualify" instances create "webscrape-$machine" \
        --zone "us-east1-d" --machine-type "n1-highmem-4" --network "default" \
        --maintenance-policy "MIGRATE" \
        --service-account "ACCOUNTNUMBER-compute@developer.gserviceaccount.com" \
        --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring.write","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \
        --tags "http-server","https-server" \
        --disk "name=webscrape-$machine,device-name=webscrape-$machine,mode=rw,boot=yes,auto-delete=yes"

done

现在,您可以在终端中执行脚本

sh clone_instance.sh

【讨论】:

【参考方案3】:

您可以创建源实例的snapshot,然后创建一个新实例,选择源快照作为磁盘。它将非常快速地复制服务器。对于其他附加的磁盘,您必须创建一个新磁盘并通过网络(scp,rsync等)复制文件

【讨论】:

如果您的源实例附加了辅助磁盘并以读/写方式挂载,您需要在卸载它们后拍摄快照(否则您将无法通过 ssh 连接到新实例),然后创建一个新磁盘克隆源磁盘并将它们安装在目标系统上。 能否不关闭实例,将辅助永久磁盘更改为只读然后拍摄快照。 对服务器设置没有帮助 截至今天,在 GCE 控制台中,我找不到任何方法来创建新实例并选择快照作为磁盘。我所能找到的只是对其他磁盘执行此操作,而不是主磁盘。 使用gcloud 命令创建实例对我有用。 serverfault.com/a/831709/249684【参考方案4】:

您可以使用 GCP 导入 VM 选项,将此机器导入回项目。

【讨论】:

【参考方案5】:

如果您连接了其他磁盘,最好不实际卸载它们的方法是更改​​它们在 /etc/fstab 中的安装路径。

如果您在 fstab 中使用 UUID 并使用来自快照的相同磁盘(它们将具有相同的 UUID),那么您可以在不卸载任何内容的情况下进行克隆。

只需将 fstab 中的每个磁盘更改为像这样使用 UUID

UUID=[UUID_VALUE] [MNT_DIR] ext4 discard,defaults,[NOFAIL] 0 2

您可以从中获取 UUID

sudo blkid /dev/[DEVICE_ID]

如果您不确定自己的 DEVICE_ID 可以使用

sudo lsblk

获取系统使用的设备 ID 列表。

【讨论】:

请注意,如果您希望系统在没有找到磁盘的情况下启动,则应将 [NOFAIL] 替换为“nofail”(不带引号)【参考方案6】:

如前所述,如果源实例连接了辅助磁盘,则无法通过 ssh 连接到新实例。 我必须拍摄生产实例的快照,因此我无法卸载辅助磁盘而不会造成中断。 我能够通过从快照创建磁盘、将磁盘安装到另一个实例上、删除对辅助磁盘的任何引用来解决问题,即从 /etc/fstab 中删除条目。 完成此操作后,我就可以将磁盘用作新实例中的启动磁盘,并通过 ssh 访问它。

【讨论】:

以上是关于Google Compute Engine - 克隆实例的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:没有名为 google_compute_engine 的模块

Google App Engine 通过内部网络与 Compute Engine 通信

Google App EngineGoogle Kubernetes EngineGoogle Compute Engine的区别

ruby Google Compute Engine快照在Ruby中创建和旋转

验证 Google Compute Engine 虚拟机以访问 Maps Engine API

Google Compute Engine 上的 FreeBSD