You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动备份运行Container-Optimized OS的Google Cloud VM实例及磁盘?

适合Container-Optimized OS的GCE实例自动备份方案

我来分享几个完全适配Container-Optimized OS(COOS)限制的自动备份方案——毕竟COOS是只读系统,没法装额外系统包,所以所有方案都不用在实例上修改系统,完美解决你的需求:

方案1:用GCP原生快照调度策略(最省心)

这是我最推荐的方案,完全不用碰实例,靠GCP原生服务就能搞定磁盘的定期快照:

  • 直接通过GCP控制台或者gcloud命令给目标磁盘绑定快照调度规则,配置好备份频率(比如每日、每周)、快照保留时长、时区等参数。
  • 示例命令:
    gcloud compute disks add-snapshot-schedule YOUR_DISK_NAME \
      --snapshot-schedule=YOUR_SCHEDULE_NAME \
      --zone=YOUR_ZONE
    
  • 优点:零维护,GCP自动处理快照创建、旧快照清理,完全不用写代码或管理容器。

方案2:容器化快照工具(灵活可控)

既然COOS本身就是为跑容器设计的,咱可以把快照工具打包成容器来运行,避开系统只读的限制:

  1. 给你的GCE实例绑定一个拥有Compute Snapshot Creator权限的服务账号(至少能创建/删除快照、读取磁盘信息)。
  2. 用官方的google/cloud-sdk镜像启动一个容器,COOS会自动把实例的服务账号权限传给容器,不用手动挂载密钥。
  3. 在容器里配置定时任务(比如用supercronic轻量cron替代),执行快照脚本:
    示例脚本(可放到容器的/usr/local/bin/backup.sh):
    #!/bin/bash
    DISK_NAME="YOUR_DISK_NAME"
    ZONE="YOUR_ZONE"
    RETAIN_DAYS=7
    
    # 创建带时间戳的快照
    SNAPSHOT_NAME="backup-${DISK_NAME}-$(date +%Y%m%d%H%M)"
    gcloud compute disks snapshot $DISK_NAME --name=$SNAPSHOT_NAME --zone=$ZONE
    
    # 删除7天前的旧快照
    gcloud compute snapshots list --filter="name:backup-${DISK_NAME}- AND creationTimestamp<$(date -d "-$RETAIN_DAYS days" +%Y-%m-%d)" --format="value(name)" | xargs -r gcloud compute snapshots delete -q
    
  4. 启动容器时挂载定时任务配置:
    docker run -d --restart=always \
      --name snapshot-service \
      -v $(pwd)/snapshot-cron:/etc/cron.d/snapshot-cron \
      -v $(pwd)/backup.sh:/usr/local/bin/backup.sh \
      google/cloud-sdk \
      supercronic /etc/cron.d/snapshot-cron
    
    其中snapshot-cron内容可以是0 2 * * * root /usr/local/bin/backup.sh(每天凌晨2点执行)。

方案3:Cloud Scheduler + Cloud Functions(完全无侵入)

把备份逻辑完全放到云端服务,彻底和实例解耦:

  1. 创建一个Cloud Functions,用Python/Node.js等语言编写代码,调用Compute Engine API来创建磁盘快照、清理旧快照。
    示例Python代码片段:
    from googleapiclient import discovery
    from datetime import datetime, timedelta
    import os
    
    def create_snapshot(event, context):
        compute = discovery.build('compute', 'v1')
        project = os.environ['GCP_PROJECT']
        zone = os.environ['ZONE']
        disk_name = os.environ['DISK_NAME']
        retain_days = int(os.environ['RETAIN_DAYS'])
    
        # 创建新快照
        snapshot_name = f"backup-{disk_name}-{datetime.now().strftime('%Y%m%d%H%M')}"
        compute.disks().snapshot(
            project=project,
            zone=zone,
            disk=disk_name,
            body={'name': snapshot_name}
        ).execute()
    
        # 删除旧快照
        cutoff_date = (datetime.now() - timedelta(days=retain_days)).isoformat() + 'Z'
        snapshots = compute.snapshots().list(
            project=project,
            filter=f"name:backup-{disk_name}- AND creationTimestamp < '{cutoff_date}'"
        ).execute()
    
        for snapshot in snapshots.get('items', []):
            compute.snapshots().delete(
                project=project,
                snapshot=snapshot['name']
            ).execute()
    
  2. 给Cloud Functions的服务账号添加Compute Snapshot Creator和Compute Viewer权限。
  3. 创建Cloud Scheduler任务,定时触发这个Cloud Functions(比如每日凌晨2点调用HTTP触发器)。

内容的提问来源于stack exchange,提问作者runixo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:18:29