构建虚拟机映像

本页面可帮助您为您的产品创建公共机器映像,以便在 Compute Engine 上运行。

映像包含引导加载程序、操作系统以及启动实例所需的根文件系统。您可以使用产品的一组应用和服务来配置映像。客户使用该映像在云端启动虚拟机 (VM) 实例。

我们建议您先在开发项目中创建映像,然后在 Google 合作伙伴工程师验证映像后将其移到公共项目中。

准备工作

  1. 下载 Google Cloud SDK

创建基础产品虚拟机

要为 Google Cloud Marketplace 创建自定义机器映像,您需要完成以下步骤(在以下各部分中介绍):

创建许可的虚拟机映像

Producer Portal

  1. 使用 gcloud 设置 Cloud SDK 的默认值:

    gcloud config set project <project_id>
    gcloud config set compute/zone <zone>
  2. 创建用于安装软件的主实例,稍后将该实例转换为要在 Google Cloud Marketplace 上使用的映像。如需了解有关创建实例的更多信息,请参阅创建和启动实例

    gcloud compute instances create ${INSTANCE} --scopes
    https://www.googleapis.com/auth/cloud-platform 
  3. 安装和自定义您的软件。包括所需的所有启动脚本,例如用于创建授权凭据的启动脚本。

    如需使用安全随机密码创建授权凭据,请按照下一部分中创建授权凭据中的步骤操作。

  4. 在虚拟机上添加开源许可文本文件和源代码(如果适用)。 请参阅开源合规性文档,了解相关要求。

    创建并自定义主实例后,请准备创建虚拟机映像所需的磁盘。

  5. 清理磁盘。直接从虚拟机创建虚拟机映像也会将用户目录和 SSH 密钥转移到客户的虚拟机,因此您必须在创建虚拟机映像时清理输入磁盘。

    要清理磁盘,请执行以下操作:

    1. 在 Compute Engine 虚拟机实例菜单中,单击要清除的实例的名称,然后单击编辑

    2. 向下滚动并清除在删除实例时也删除启动磁盘复选框,然后点击保存。您可以使用磁盘来创建映像。

    3. 在删除虚拟机的同时保留磁盘。系统会提示您确认删除:不要选择同时也删除启动磁盘

    4. 接下来,您需要创建一个新的虚拟机实例。展开管理磁盘网络SSH 密钥选项。

    5. 磁盘下,将先前实例中的磁盘作为附加数据磁盘挂载。确保针对删除实例时选择保留磁盘

      您现在可以通过 SSH 登录到实例并移除在软件安装过程中创建的任何主目录或其他临时文件。 数据磁盘必须装载后才可以访问。如需详细了解如何装载磁盘,请参阅添加永久性磁盘或调整其大小

    6. 完成后,在将实例关停并删除的同时保留更新的数据磁盘。现在,您可以通过完成以下步骤来创建虚拟机映像。

  6. 按照以下步骤,在 Producer Portal 中获取虚拟机产品的许可名称:

    1. 在 Google Cloud Console 中打开 Producer Portal:

      https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID
      

      YOUR_PROJECT_ID 替换为您的开发项目或公共项目的 ID。我们建议您先在开发项目中创建映像,然后在 Google 合作伙伴工程师验证映像后将其移到公共项目中。

    2. 点击产品名称。

    3. 转到部署包部分。在虚拟机许可下,记下名称。在创建映像时,您要在后续步骤中使用此许可名称。

  7. 通过运行以下 gcloud 命令来创建许可映像:

    gcloud compute images create CREATE_IMAGE_NAME \
    --project PUBLIC_PROJECT_NAME \
    --source-disk projects/DEV_PROJECT_NAME/zones/SOURCE_DISK_ZONE/disks/SOURCE_DISK_NAME \
    --licenses projects/PUBLIC_PROJECT_NAME/global/licenses/LICENSE_NAME \
    --description ADD_DESCRIPTION
    

    请替换以下内容:

    • CREATE_IMAGE_NAME:映像名称,格式为 who-vmOS-image-date。每次为产品更新映像时,都必须使用一个新的唯一名称。
    • PUBLIC_PROJECT_NAME:您的 Google Cloud Marketplace 公共项目的 ID。
    • LICENSE_NAME:您在上一步记下的虚拟机产品的许可名称。
    • DEV_PROJECT_NAME:您为 Google Cloud Marketplace 进行开发和测试而创建的项目的 ID。
    • SOURCE_DISK_ZONE:来源磁盘的可用区。
    • SOURCE_DISK_NAME:来源磁盘的名称。
    • ADD_DESCRIPTION:待创建映像的可选文本说明。

合作伙伴门户

  1. 使用 gcloud 设置 Cloud SDK 的默认值:

    gcloud config set project <project_id>
    gcloud config set compute/zone <zone>
  2. 创建用于安装软件的主实例,稍后将该实例转换为要在 Google Cloud Marketplace 上使用的映像。如需了解有关创建实例的更多信息,请参阅创建和启动实例

    gcloud compute instances create ${INSTANCE} --scopes
    https://www.googleapis.com/auth/cloud-platform 
  3. 安装和自定义您的软件。包括所需的所有启动脚本,例如用于创建授权凭据的启动脚本。

    如需使用安全随机密码创建授权凭据,请按照下一部分中创建授权凭据中的步骤操作。

  4. 在虚拟机上添加开源许可文本文件和源代码(如果适用)。 请参阅开源合规性文档,了解相关要求。

    创建并自定义主实例后,请准备创建虚拟机映像所需的磁盘。

  5. 清理磁盘。直接从虚拟机创建虚拟机映像也会将用户目录和 SSH 密钥转移到客户的虚拟机,因此您必须在创建虚拟机映像时清理输入磁盘。

    要清理磁盘,请执行以下操作:

    1. 在 Compute Engine 虚拟机实例菜单中,单击要清除的实例的名称,然后单击编辑

    2. 向下滚动并清除在删除实例时也删除启动磁盘复选框,然后点击保存。您可以使用磁盘来创建映像。

    3. 在删除虚拟机的同时保留磁盘。系统会提示您确认删除:不要选择同时也删除启动磁盘

    4. 接下来,您需要创建一个新的虚拟机实例。展开管理磁盘网络SSH 密钥选项。

    5. 磁盘下,将先前实例中的磁盘作为附加数据磁盘挂载。确保针对删除实例时选择保留磁盘

      您现在可以通过 SSH 登录到实例并移除在软件安装过程中创建的任何主目录或其他临时文件。 数据磁盘必须装载后才可以访问。如需详细了解如何装载磁盘,请参阅添加永久性磁盘或调整其大小

    6. 完成后,在将实例关停并删除的同时保留更新的数据磁盘。现在,您可以通过完成以下步骤来创建虚拟机映像。

  6. 使用以下步骤,在合作伙伴门户中获取产品的许可名称:

    1. 点击产品的解决方案 ID。

    2. 点击以修改解决方案元数据 (Solution Metadata)。

    3. 在解决方案元数据中,在许可和价格 (Licensing & Pricing) 部分的许可名称 (License name) 下,记下您的许可名称。以后,当您使用 gcloud 创建映像时,将使用此许可名称。

  7. 通过运行以下 gcloud 命令来创建许可映像:

    gcloud compute images create CREATE_IMAGE_NAME \
    --project PUBLIC_PROJECT_NAME \
    --source-disk projects/DEV_PROJECT_NAME/zones/SOURCE_DISK_ZONE/disks/SOURCE_DISK_NAME \
    --licenses projects/PUBLIC_PROJECT_NAME/global/licenses/LICENSE_NAME \
    --description ADD_DESCRIPTION
    

创建授权凭据

如果您的产品是使用基本防火墙规则对单个虚拟机实例进行简单部署,则当您直接配置部署包时,可以自动添加安全的随机密码。

如果计划使用开源 mpdev 工具(适用于大多数情况的工具)来创建部署软件包,您可使用 mpdev 自动添加多个安全随机密码。

如需了解创建授权凭据的步骤,请参阅创建部署包

在部署产品后,要获取您创建的任何密码的值,请在虚拟机实例中使用以下命令:

curl -H "Metadata-Flavor: Google" \
http://metadata/computeMetadata/v1/instance/attributes/PASSWORD_NAME

测试虚拟机映像

使用您新建的映像创建虚拟机实例,并验证功能。

此外,要验证许可 ID,请通过 SSH 登录实例并验证是否附加了有效许可证:

curl -s -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/licenses/?recursive=true

验证是否已安装 Python 2.6 或更高版本:

python -V

验证是否已安装以下软件包:

gcloud --version
gsutil --version
ssh -V
ps aux | grep sshd
curl -V
ps aux | grep dhcp

检查以确保除了您自己的用户目录之外,实例上没有安装其他用户目录,并且除了您自己的用户目录和凭据之外,没有其他任何的用户目录和凭据。