Google Compute Engine - 克隆实例

时间:2014-09-28 10:38:52

标签: google-compute-engine

我有一个GCE实例,我已经定制并上传了各种应用程序(例如在Apache下运行的PHP应用程序)。我现在想复制这个实例 - 即它上面的一切。 我原本以为克隆可能会这样做,但我玩它并且它似乎只是克隆实例配置而不是任何自定义的。

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

此外,一切都会存储在图像上吗? 那么,例如,以下所有内容是否会将其转移到图像上?

  • MySQL - config&数据库模式&数据?
  • Apache - /var/www/html下所有已安装的应用
  • PHP - php.ini等等......
  • 所有其他服务器配置/修改?

6 个答案:

答案 0 :(得分:25)

您可以创建snapshot源实例,然后创建一个新实例,将源快照选为磁盘。它将非常快速地复制服务器。对于其他连接的磁盘,您必须通过net(scp,rsync等)

创建新磁盘和复制文件

答案 1 :(得分:3)

在Web控制台中,创建快照,然后单击快照并通过创建实例按钮,您可以自定义设置,然后单击它所在的位置:

等效REST或命令行

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

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

ValueError: could not convert string to int

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

#!/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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果你连接了其他磁盘,没有实际卸载它们的最佳方法是改变它们在/ 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列表。

答案 4 :(得分:0)

您可以使用GCP导入VM选项将此计算机导回到项目中。

答案 5 :(得分:0)

现在是 2021 年,这很简单:

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

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