本页面可帮助您为您的产品创建公共机器映像,以便在 Compute Engine 上运行。
映像包含引导加载程序、操作系统以及启动实例所需的根文件系统。您可以使用产品的一组应用和服务来配置映像。客户使用该映像在云端启动虚拟机 (VM) 实例。
我们建议您先在开发项目中创建映像,然后在 Google 合作伙伴工程师验证映像后将其移到公共项目中。
准备工作
- 下载 Google Cloud SDK。
创建基础产品虚拟机
如需为 Cloud Marketplace 创建自定义机器映像,您需要完成以下步骤(在以下各个部分中介绍):
使用其中一个 Google 支持的基础公共映像创建虚拟机,并安装特定于应用的软件包和配置。
您可以选择使用 Arm 处理器或 x86 处理器的映像。您还可以在一个虚拟机产品中添加定位到不同机器类型的多张图片。如需详细了解 CPU 平台及其支持的机器类型,请参阅 CPU 平台。
如果您打算为客户提供支持,请安装脚本以检索应用用户凭据。
创建许可的虚拟机映像
使用 gcloud 设置 Google Cloud CLI 的默认值:
gcloud config set project <project_id> gcloud config set compute/zone <zone>
创建一个用于安装软件的主实例,稍后将其转换为可在 Cloud Marketplace 上使用的映像。如需了解有关创建实例的更多信息,请参阅创建和启动实例。
gcloud compute instances create ${INSTANCE} --scopes https://www.googleapis.com/auth/cloud-platform
安装和自定义您的软件。包括所需的所有启动脚本,例如用于创建授权凭据的启动脚本。
如需使用安全的随机密码创建授权凭据,请按照下一部分中创建授权凭据中的步骤操作。
创建并自定义主实例后,请准备创建虚拟机映像所需的磁盘。
清理磁盘。直接从您的虚拟机创建虚拟机映像也会将用户目录和 SSH 密钥转移到客户的虚拟机中,因此,在创建虚拟机映像时,您必须清理输入磁盘。
要清理磁盘,请执行以下操作:
在 Compute Engine 虚拟机实例菜单中,单击要清除的实例的名称,然后单击编辑。
向下滚动并清除在删除实例时也删除启动磁盘复选框,然后点击保存。您需要使用该磁盘创建映像。
在删除虚拟机的同时保留磁盘。系统会提示您确认删除。不要选择同时也删除启动磁盘。
接下来,您需要创建一个新的虚拟机实例。展开管理、磁盘、网络、SSH 密钥选项。
在磁盘下,将先前实例中的磁盘作为附加数据磁盘挂载。确保针对删除实例时选择保留磁盘。
您现在可以通过 SSH 登录到实例并移除在软件安装过程中创建的任何主目录或其他临时文件。 您必须先装载数据磁盘,然后才能访问数据磁盘。如需详细了解如何装载磁盘,请参阅添加永久性磁盘或调整其大小。
完成后,在将实例关停并删除的同时保留更新的数据磁盘。现在,您可以通过完成以下步骤来创建虚拟机映像。
使用以下步骤,在 Producer Portal 中获取虚拟机产品的许可名称:
在 Google Cloud 控制台中打开 Producer Portal:
https://console.cloud.google.com/producer-portal?project=YOUR_PROJECT_ID
将 YOUR_PROJECT_ID 替换为您的开发项目或公开项目的 ID。我们建议您先在开发项目中创建映像,然后在 Google 合作伙伴工程师验证映像后将其移到公共项目中。
点击产品名称。
前往部署软件包部分。在虚拟机许可下,记下名称。在下一步创建映像时,您将使用此许可名称。
通过运行以下
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 LICENSE_NAME \ --description ADD_DESCRIPTION
替换以下内容:
CREATE_IMAGE_NAME:映像的名称及其支持的 CPU 架构,格式为
who-vmOS-image-architecture-date
,将architecture
替换为Arm
或x86_64
,具体取决于映像支持的 CPU 架构。每次为产品更新映像时,都必须使用一个新的唯一名称。PUBLIC_PROJECT_NAME:您的 Cloud Marketplace 公开项目的项目 ID。您必须已获得此项目的 Compute Storage Admin 角色 (
roles/compute.storageAdmin
)。LICENSE_NAME:您在上一步记下的虚拟机产品的许可名称。
DEV_PROJECT_NAME:您为开发和测试 Cloud Marketplace 而创建的项目的项目 ID。您必须拥有此项目的 Compute Image User 角色 (
roles/compute.imageUser
)。SOURCE_DISK_ZONE:来源磁盘的可用区。
SOURCE_DISK_NAME:来源磁盘的名称。
ADD_DESCRIPTION:待创建映像的可选文本说明。
公开映像
对于不使用 Marketplace 自有映像的非 Terraform 产品,您必须公开您的映像,以便客户可以将其部署到 Compute Engine 实例。如需公开映像,请使用 Google Cloud 控制台或 Google Cloud CLI:
控制台
在公共项目的 Compute Engine 下,转到“映像”页面。
选择您的映像,如下所示:
如果右上角没有显示信息面板,请点击显示信息面板。
在信息面板的添加成员字段中,输入
allAuthenticatedUsers
,然后从选择角色菜单中选择 Compute Image User。点击添加以公开映像。
命令行
在 Cloud Shell 中或本地机器上使用以下 gcloud
命令:
gcloud compute images add-iam-policy-binding IMAGE_NAME --member=allAuthenticatedUsers --role=roles/compute.imageUser
创建授权凭据
如果您的产品是使用基本防火墙规则对单个虚拟机实例进行简单部署,则当您直接配置部署包时,可以自动添加安全的随机密码。
如果您打算使用开源 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 ssh -V ps aux | grep sshd curl -V ps aux | grep dhcp
检查以确保除了您自己的用户目录之外,实例上没有安装其他用户目录,并且除了您自己的用户目录和凭据之外,没有其他任何的用户目录和凭据。