首页 文章

Google Compute Engine - 克隆实例

提问于
浏览
20

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

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

此外,一切都会存储在图像上吗?那么,例如,以下所有内容都会在图像上形成吗?

  • MySQL - 配置和数据库模式和数据?

  • Apache - /var/www/html 下所有已安装的应用程序

  • PHP - php.ini 等...

  • 所有其他服务器配置/修改?

5 回答

  • 0

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

  • 3

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

    等效REST或 command line

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

    从这里,你可以创建一个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
    
  • 0

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

  • 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列表 .

  • 25

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

相关问题