在 Anthos clusters on Bare Metal 中创建和管理虚拟磁盘

本文档适用于运行 Anthos clusters on Bare Metal 的应用所有者。本文档介绍如何为使用 Anthos VM Runtime 的虚拟机 (VM) 创建和管理磁盘资源。

准备工作

要完成本文档,您需要拥有以下资源的访问权限:

使用挂接磁盘创建虚拟机

创建虚拟机时,您可以挂接现有的启动磁盘或数据磁盘,通过映像(包括启动磁盘)创建磁盘,或者创建空白磁盘。

空白磁盘

在此情况下,您将创建一个空白磁盘并将其挂接到虚拟机。在此场景中,您可以创建数据磁盘来存储应用数据。

  1. 在您选择的编辑器中创建定义 VirtualMachineDiskVirtualMachine(例如 my-vm.yaml)的清单:

    nano my-vm.yaml
    
  2. 复制并粘贴以下 YAML 定义:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 10Gi
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
        - virtualMachineDiskName: DISK_NAME
    

    本示例会创建一个名为 DISK_NAME 的空白 10Gi(10 吉比字节)磁盘。在虚拟机的 spec.disks 部分中,您还必须挂接启动磁盘,例如下一部分所示的映像。

  3. 在编辑器中保存并关闭清单文件。

  4. 使用 kubectl 创建虚拟机和磁盘:

    kubectl apply -f my-vm.yaml
    

来源映像

在此场景中,您通过映像创建磁盘并将其挂接到虚拟机。在此场景中,您可以通过映像创建启动磁盘。您还可以通过映像创建和挂接数据磁盘。

  1. 在您选择的编辑器中创建定义 VirtualMachineDiskVirtualMachine(例如 my-vm.yaml)的清单:

    nano my-vm.yaml
    
  2. 复制并粘贴以下 YAML 定义:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: VM_NAME-boot-dv
    spec:
      size: 20Gi
      source:
        http:
          url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
    

    本示例会使用公共 Ubuntu 映像创建一个名为 VM_NAME-boot-dv20Gi(20 吉比字节)磁盘。在虚拟机的 spec.disks 部分中,磁盘设置为 boot: true

  3. 在编辑器中保存并关闭清单。

  4. 使用 kubectl 创建虚拟机和磁盘:

    kubectl apply -f my-vm.yaml
    

现有磁盘

在此情况下,您将创建一个空白磁盘并将其挂接到虚拟机。在此场景中,您可以创建数据磁盘来存储应用数据。

  1. 在您选择的编辑器中创建 VirtualMachine 清单,例如 my-vm.yaml

    nano my-vm.yaml
    
  2. 复制并粘贴以下 YAML 定义:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
        - virtualMachineDiskName: EXISTING_DISK_NAME
    

    此示例挂接了名为 EXISTING_DISK_NAME 的现有磁盘。

    在虚拟机的 spec.disks 部分中,您还必须挂接启动磁盘,例如上一部分所示的映像。

  3. 在编辑器中保存并关闭虚拟机清单。

  4. 使用 kubectl 创建虚拟机:

    kubectl apply -f my-vm.yaml
    

创建磁盘并将其挂接到现有虚拟机

如果您已有虚拟机,则可以创建并挂接磁盘以支持您的应用生命周期。虚拟机必须处于停止状态,才能挂接磁盘。

空白磁盘

在此情况下,您将创建一个空白磁盘并将其挂接到虚拟机。在此场景中,您可以创建数据磁盘来存储应用数据。

  1. 如果需要,请使用 kubectl 停止虚拟机:

    kubectl virt stop vm VM_NAME
    

    VM_NAME 替换为要停止的虚拟机的名称。

  2. 修改现有虚拟机资源,例如 my-vm

    kubectl edit gvm VM_NAME
    
  3. 更新 VirtualMachine YAML 清单以在顶部添加 VirtualMachineDisk 部分,然后在虚拟机的 spec.disks 部分的末尾挂接磁盘:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 10Gi
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
        - virtualMachineDiskName: DISK_NAME
    

    本示例会创建一个名为 DISK_NAME 的空白 10Gi(10 吉比字节)磁盘。

  4. 在编辑器中保存并关闭更新后的虚拟机清单。

  5. 使用 kubectl 启动虚拟机:

    kubectl virt start vm VM_NAME
    

    VM_NAME 替换为您要启动的虚拟机的名称。

来源映像

在此场景中,您通过来源映像创建磁盘并将其挂接到虚拟机。

  1. 如果需要,请使用 kubectl 停止虚拟机:

    kubectl virt stop vm VM_NAME
    

    VM_NAME 替换为要停止的虚拟机的名称。

  2. 修改现有虚拟机资源,例如 my-vm

    kubectl edit gvm VM_NAME
    
  3. 更新 VirtualMachine 清单以在顶部添加 VirtualMachineDisk 部分,然后将磁盘挂接到虚拟机的 spec.disks 部分的末尾:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 10Gi
      source:
        http:
          url: http://example.com/my-disk-img.qcow2
    ---
    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      interfaces:
        - name: eth0
          networkName: pod-network
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: VM_NAME-boot-dv
        - virtualMachineDiskName: DISK_NAME
    

    本示例会从 http://example.com/my-disk-img.qcow2 HTTP 来源创建一个名为 DISK_NAME10Gi(10 吉比字节)磁盘。

  4. 在编辑器中保存并关闭更新后的虚拟机清单。

  5. 使用 kubectl 启动虚拟机:

    kubectl virt start vm VM_NAME
    

    VM_NAME 替换为您要启动的虚拟机的名称。

创建磁盘

在此场景中,您可以独立于虚拟机资源创建磁盘资源。通过这种场景,您可以提前创建磁盘,然后根据需要挂接到虚拟机。

空白磁盘

如需创建空白磁盘,请完成以下步骤。

  1. 在您选择的编辑器中创建 VirtualMachineDisk 清单,例如 my-disk.yaml

    nano my-disk.yaml
    
  2. 复制并粘贴以下 YAML 定义:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 10Gi
    

    本示例会创建一个名为 DISK_NAME 的空白 10Gi(10 吉比字节)磁盘。

  3. 在编辑器中保存并关闭磁盘清单。

  4. 使用 kubectl 创建磁盘:

    kubectl apply -f my-disk.yaml
    

来源映像

如需通过映像创建磁盘,请完成以下步骤。

  1. 在您选择的编辑器中创建 VirtualMachineDisk 清单,例如 my-disk.yaml

    nano my-disk.yaml
    
  2. 复制并粘贴以下 YAML 定义:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 20Gi
      source:
        http:
          url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
    

    本示例会使用公共 Ubuntu 映像创建一个名为 DISK_NAME20Gi(20 吉比字节)磁盘。

  3. 在编辑器中保存并关闭磁盘清单。

  4. 使用 kubectl 创建磁盘:

    kubectl apply -f my-disk.yaml
    

后续步骤