创建自定义启动磁盘

本文档介绍了在 Google Distributed Cloud (GDC) 气隙环境中为虚拟机 (VM) 创建自定义启动磁盘的步骤。

创建虚拟机实例时, Distributed Cloud 会自动创建具有默认 配置的永久性启动磁盘。您还必须为虚拟机创建启动磁盘。您可以使用公共映像或自定义映像。

如果实例需要额外的数据存储磁盘, 请为虚拟机添加永久性磁盘

本文档面向平台管理员或应用运维人员组中的开发者,他们会为虚拟机创建自定义启动磁盘。如需了解详情,请参阅 GDC 网闸隔离配置文档的受众

准备工作

如需使用 gdcloud 命令行界面 (CLI) 命令,请确保您已下载、安装、 并配置 gdcloud CLI。 Distributed Cloud 的所有命令都使用 gdcloudkubectl CLI,并且需要操作系统 (OS) 环境。

获取 kubeconfig 文件路径

如需针对 Management API 服务器运行命令,请确保您拥有以下资源:

  1. 如果您没有 Management API 服务器的 kubeconfig 文件,请登录并生成该文件。

  2. 使用 Management API 服务器的 kubeconfig 文件路径替换这些说明中的 MANAGEMENT_API_SERVER

请求 IAM 角色

请与您的 Project IAM Admin 联系,以请求对您的项目使用以下角色:

  • Virtual Machine Project Admin (project-vm-admin):在项目命名空间中创建、修改、列出和删除标准虚拟机和高性能虚拟机。

  • Project Viewer(project-viewer):查看项目命名空间中的所有资源。

所有虚拟机角色都必须绑定到虚拟机所在项目的命名空间。 请按照以下步骤验证 您的访问权限。

创建启动磁盘

按照本页介绍的步骤创建启动磁盘,以便日后用于创建虚拟机。

使用映像创建启动磁盘

除了创建实例外,您还可以创建独立的永久性启动磁盘,然后将其挂接到实例。本部分介绍如何使用 GDC 提供的操作系统映像 或 自定义操作系统映像创建启动 磁盘。

使用 GDC 提供的映像创建启动磁盘

在使用 GDC 提供的映像创建启动磁盘之前,请查看可用映像的列表。然后使用提供的映像创建启动磁盘。

gdcloud

  1. 列出所有可用映像及其最小磁盘大小:

    gdcloud compute images list
    

    此命令包含 Distributed Cloud 提供的映像和自定义映像。在 vm-system 命名空间中选择其中一个。

  2. 选择 Distributed Cloud 提供的映像来创建虚拟机磁盘:

    gdcloud compute disks create BOOT_DISK_NAME \
      --project=PROJECT \
      --size=DISK_SIZE \
      --image=IMAGE_NAME \
      --image-project=vm-system
    

    使用以下定义替换变量:

    变量定义
    BOOT_DISK_NAME 启动磁盘的名称。
    PROJECT 要在其中创建启动磁盘的 GDC 项目。
    DISK_SIZE 启动磁盘的大小,必须至少为映像的 minimumDiskSize
    IMAGE_NAME 映像的名称。

kubectl

  1. 列出所有可用的 GDC 提供的映像:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n vm-system \
      get virtualmachineimages.virtualmachine.gdc.goog
    
  2. 获取特定 GDC 提供的映像的 minimumDiskSize。创建的自定义启动磁盘的大小必须至少为 minimumDiskSize

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n vm-system \
      get virtualmachineimages.virtualmachine.gdc.goog IMAGE_NAME \
      -ojsonpath='{.spec.minimumDiskSize}'
    
  3. 创建 VirtualMachineDisk 对象:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      apply -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineDisk
    metadata:
      name: BOOT_DISK_NAME
    spec:
      source:
        image:
          name: IMAGE_NAME
          namespace: vm-system
      size: DISK_SIZE
    EOF
    

    使用以下定义替换变量:

    变量定义
    MANAGEMENT_API_SERVER Management API 服务器 kubeconfig 文件。
    IMAGE_NAME 映像的名称。
    PROJECT 要在其中创建启动磁盘的 GDC 项目。
    BOOT_DISK_NAME 启动磁盘的名称。
    DISK_SIZE 启动磁盘的大小,必须至少为映像的 minimumDiskSize

使用自定义映像创建启动磁盘

自定义映像专属于您的项目。如需使用 自定义映像创建虚拟机,您必须先在同一项目中创建自定义映像 (如果尚未创建)。

如果您尚未设置必要的 IAM 角色 来访问项目中的自定义映像,请先进行设置。然后按照这些说明操作。

gdcloud

  1. 列出所有自定义映像及其最小磁盘大小:

    gdcloud compute images list \
      --project=PROJECT \
    
  2. 选择自定义映像来创建虚拟机磁盘:

    gdcloud compute disks create BOOT_DISK_NAME \
      --project=PROJECT \
      --size=DISK_SIZE \
      --image=IMAGE_NAME \
      --image-project=PROJECT
    

    使用以下定义替换变量:

    变量定义
    BOOT_DISK_NAME 启动磁盘的名称。
    PROJECT 要在其中创建启动磁盘的 GDC 项目。
    DISK_SIZE 启动磁盘的大小,必须至少为映像的 minimumDiskSize
    IMAGE_NAME 映像的名称。

API

  1. 列出所有自定义映像

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      get virtualmachineimages.virtualmachine.gdc.goog
    
  2. 获取特定自定义映像的 minimumDiskSize。创建的自定义启动磁盘的大小必须至少为 minimumDiskSize

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n vm-system \
      get virtualmachineimages.virtualmachine.gdc.goog IMAGE_NAME \
      -ojsonpath='{.spec.minimumDiskSize}'
    
  3. 创建 VirtualMachineDisk 对象:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT \
      apply -f - <<EOF
    apiVersion: virtualmachine.gdc.goog/v1
    kind: VirtualMachineDisk
    metadata:
      name: BOOT_DISK_NAME
    spec:
      source:
        image:
          name: IMAGE_NAME
          namespace: PROJECT
      size: DISK_SIZE
    EOF
    

    使用以下定义替换变量:

    变量定义
    MANAGEMENT_API_SERVER Management API 服务器 kubeconfig 文件。
    IMAGE_NAME 从 “列出所有自定义映像”命令中选择的映像的名称。
    PROJECT 要在其中创建启动磁盘的 GDC 项目。
    BOOT_DISK_NAME 启动磁盘的名称。
    DISK_SIZE 启动磁盘的大小,必须至少为映像的 minimumDiskSize

接下来怎么做?