GCP Deployment Manager如何实现数据复用以缩减模板体积
GCP Deployment Manager 大体积user data复用方案
GCP Deployment Manager 完全具备和AWS CloudFormation等价的公共数据块复用能力,以下是两种生产环境常用的实现方式:
方案1:模板全局变量引用(最贴合CloudFormation使用习惯)
Deployment Manager 原生支持Jinja2、Python两种模板语法,你可以直接在模板头部定义全局公共变量存储user data,所有VM实例配置直接引用该变量即可,整个模板内user data仅需要存储1次,大幅压缩模板体积。
Jinja2模板示例代码如下:
# 模板头部定义全局公共user data,仅需要定义1次 {% set GLOBAL_USER_DATA = '''#cloud-config package_update: true packages: - nginx - python3-pip runcmd: - systemctl start nginx # 此处省略剩余的大块user data内容 ''' %} # 批量生成100台VM,直接引用上方变量 {% for instance_id in range(1, 101) %} - name: common-vm-{{ instance_id }} type: compute.v1.instance properties: zone: us-central1-a machineType: zones/us-central1-a/machineTypes/e2-standard-2 # 其他VM配置(磁盘、网络等)省略 metadata: items: - key: user-data value: {{ GLOBAL_USER_DATA }} {% endfor %}
如果你使用纯YAML格式的基础模板,也可以通过imports字段引入独立存储user data的外部文件,实现相同的复用效果。
方案2:GCS存储拉取(适合超大体量user data场景)
如果你的user data体积超过Deployment Manager单模板大小限制,可以将完整user data上传到GCS对象存储桶中,VM的启动脚本仅保留拉取执行GCS文件的逻辑即可,此时模板内不需要存储任何user data的业务内容,模板体积可以压缩到最小。
示例启动脚本配置:
metadata: items: - key: startup-script value: "gsutil cp gs://your-bucket-name/common-user-data.sh /tmp/ && chmod +x /tmp/common-user-data.sh && /tmp/common-user-data.sh"
你只需要提前给VM实例的服务账号配置GCS桶的读取权限即可正常运行。
内容的提问来源于stack exchange,提问作者Igor Chubin
相关产品推荐
相关产品推荐

