本文档适用于运行 Anthos clusters on Bare Metal 的应用所有者。本文档介绍如何为使用 Anthos VM Runtime 的虚拟机 (VM) 创建和管理磁盘资源。
准备工作
要完成本文档,您需要拥有以下资源的访问权限:
- 访问 Anthos clusters on Bare Metal 1.12.0 版 (
anthosBareMetalVersion: 1.12.0
) 或更高版本集群。您可以使用任何能够运行工作负载的集群类型。如果需要,请在 Compute Engine 上试用 Anthos clusters on Bare Metal,或查看集群创建概览。 - 作为
kubectl
的插件安装的virtctl
客户端工具。如果需要,请安装 virtctl 客户端工具。
使用挂接磁盘创建虚拟机
创建虚拟机时,您可以挂接现有的启动磁盘或数据磁盘,通过映像(包括启动磁盘)创建磁盘,或者创建空白磁盘。
空白磁盘
在此情况下,您将创建一个空白磁盘并将其挂接到虚拟机。在此场景中,您可以创建数据磁盘来存储应用数据。
在您选择的编辑器中创建定义
VirtualMachineDisk
和VirtualMachine
(例如 my-vm.yaml)的清单:nano my-vm.yaml
复制并粘贴以下 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
部分中,您还必须挂接启动磁盘,例如下一部分所示的映像。在编辑器中保存并关闭清单文件。
使用
kubectl
创建虚拟机和磁盘:kubectl apply -f my-vm.yaml
来源映像
在此场景中,您通过映像创建磁盘并将其挂接到虚拟机。在此场景中,您可以通过映像创建启动磁盘。您还可以通过映像创建和挂接数据磁盘。
在您选择的编辑器中创建定义
VirtualMachineDisk
和VirtualMachine
(例如 my-vm.yaml)的清单:nano my-vm.yaml
复制并粘贴以下 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-dv
的20Gi
(20 吉比字节)磁盘。在虚拟机的spec.disks
部分中,磁盘设置为boot: true
。在编辑器中保存并关闭清单。
使用
kubectl
创建虚拟机和磁盘:kubectl apply -f my-vm.yaml
现有磁盘
在此情况下,您将创建一个空白磁盘并将其挂接到虚拟机。在此场景中,您可以创建数据磁盘来存储应用数据。
在您选择的编辑器中创建
VirtualMachine
清单,例如 my-vm.yaml:nano my-vm.yaml
复制并粘贴以下 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
部分中,您还必须挂接启动磁盘,例如上一部分所示的映像。在编辑器中保存并关闭虚拟机清单。
使用
kubectl
创建虚拟机:kubectl apply -f my-vm.yaml
创建磁盘并将其挂接到现有虚拟机
如果您已有虚拟机,则可以创建并挂接磁盘以支持您的应用生命周期。虚拟机必须处于停止状态,才能挂接磁盘。
空白磁盘
在此情况下,您将创建一个空白磁盘并将其挂接到虚拟机。在此场景中,您可以创建数据磁盘来存储应用数据。
如果需要,请使用
kubectl
停止虚拟机:kubectl virt stop vm VM_NAME
将
VM_NAME
替换为要停止的虚拟机的名称。修改现有虚拟机资源,例如
my-vm
:kubectl edit gvm VM_NAME
更新
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 吉比字节)磁盘。在编辑器中保存并关闭更新后的虚拟机清单。
使用
kubectl
启动虚拟机:kubectl virt start vm VM_NAME
将
VM_NAME
替换为您要启动的虚拟机的名称。
来源映像
在此场景中,您通过来源映像创建磁盘并将其挂接到虚拟机。
如果需要,请使用
kubectl
停止虚拟机:kubectl virt stop vm VM_NAME
将
VM_NAME
替换为要停止的虚拟机的名称。修改现有虚拟机资源,例如
my-vm
:kubectl edit gvm VM_NAME
更新
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_NAME
的10Gi
(10 吉比字节)磁盘。在编辑器中保存并关闭更新后的虚拟机清单。
使用
kubectl
启动虚拟机:kubectl virt start vm VM_NAME
将
VM_NAME
替换为您要启动的虚拟机的名称。
创建磁盘
在此场景中,您可以独立于虚拟机资源创建磁盘资源。通过这种场景,您可以提前创建磁盘,然后根据需要挂接到虚拟机。
空白磁盘
如需创建空白磁盘,请完成以下步骤。
在您选择的编辑器中创建
VirtualMachineDisk
清单,例如 my-disk.yaml:nano my-disk.yaml
复制并粘贴以下 YAML 定义:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME spec: size: 10Gi
本示例会创建一个名为
DISK_NAME
的空白10Gi
(10 吉比字节)磁盘。在编辑器中保存并关闭磁盘清单。
使用
kubectl
创建磁盘:kubectl apply -f my-disk.yaml
来源映像
如需通过映像创建磁盘,请完成以下步骤。
在您选择的编辑器中创建
VirtualMachineDisk
清单,例如 my-disk.yaml:nano my-disk.yaml
复制并粘贴以下 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_NAME
的20Gi
(20 吉比字节)磁盘。在编辑器中保存并关闭磁盘清单。
使用
kubectl
创建磁盘:kubectl apply -f my-disk.yaml
后续步骤
- 创建并使用凭据以从 Cloud Storage 导入映像。
- 在 Anthos clusters on Bare Metal 中创建和使用存储类别。
- 如果不再需要虚拟机或其虚拟磁盘资源,请删除 Anthos clusters on Bare Metal 上的虚拟机。