快速入门:在 GKE on Bare Metal 集群中创建虚拟机

本快速入门介绍了如何使用 GDC 上的虚拟机运行时在 GKE on Bare Metal 上创建虚拟机 (VM)。GDC 上的虚拟机运行时使用 KubeVirt 来编排集群上的虚拟机,并可让您在统一的开发环境中使用基于虚拟机的应用和工作负载。

准备工作

如需完成本快速入门中的任务,您需要拥有 GKE on Bare Metal 1.12 版 (anthosBareMetalVersion: 1.12) 或更高版本的访问权限。您可以使用任何能够运行工作负载的集群类型。如果需要,请在 Compute Engine 上试用 GKE on Bare Metal,或查看集群创建概览

在 GDC 上启用虚拟机运行时

GDC 上的虚拟机运行时会自动安装在 GKE on Bare Metal 1.10 版或更高版本中,但默认处于停用状态。您必须先在 GDC 上启用虚拟机运行时,然后才能在 GKE on Bare Metal 中运行虚拟机资源。

bmctl

GKE on Bare Metal 1.11 版或更高版本可以使用 bmctl 命令行工具:

  • 如需启用运行时,请使用 bmctl 工具:

    bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
    

    提供集群的 kubeconfig 文件的路径。创建集群时,GKE on Bare Metal 会在管理员工作站上生成 kubeconfig 文件。默认情况下,路径为 bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig

    如果 GDC 上的虚拟机运行时已启用,该命令会返回错误。

自定义资源

GKE on Bare Metal 版本 1.10 或更高版本可以使用自定义资源定义来启用 GDC 上的虚拟机运行时。此自定义资源是默认安装的。

  1. 修改 VMRuntime 自定义资源:

    kubectl edit vmruntime
    
  2. 在规范中设置 enabled:true

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntime
    metadata:
      name: vmruntime
    spec:
      enabled: true
      # useEmulation defaults to "false" if not set.
      useEmulation: true
      # vmImageFormat defaults to "qcow2" if not set.
      vmImageFormat: qcow2
    

    在前面的 spec 部分中,可以设置以下值:

    • enabled:设置为 true 以在 GDC 上启用虚拟机运行时
    • useEmulation:如果您的节点不支持硬件虚拟化,或您不确定,请将值设置为 true。如果适用,硬件虚拟化可提供比软件模拟更好的性能。如果未指定 useEmulation 字段,则默认为 false
    • vmImageFormat:支持两个磁盘映像格式值:rawqcow2。如果您未设置 vmImageFormat,GDC 上的虚拟机运行时将使用 raw 磁盘映像格式来创建虚拟机。raw 格式可以提供比 qcow2(一种写入时复制格式)更高的性能,但可以使用更多磁盘。如需详细了解虚拟机的映像格式,请参阅 QEMU 文档中的磁盘映像文件格式
  3. 在编辑器中保存自定义资源。

  4. 验证 VMRuntime 自定义资源是否已启用:

    kubectl describe vmruntime vmruntime
    

    VMRuntime 自定义资源的详细信息包含 Status 部分。GDC 上的虚拟机运行时已启用,当 VMRuntime.Status.Ready 显示为 true 时,该虚拟机运行时可正常运行。

安装 virtctl 客户端工具

如需创建和管理虚拟机,请安装 virtctl 客户端工具

  1. kubectl 插件的形式安装 virtctl 客户端工具:

    export GOOGLE_APPLICATION_CREDENTIALS="PATH_TO_SERVICE_ACCOUNT_KEY/bm-gcr.json"
    sudo -E bmctl install virtctl
    

    这些凭据允许您对 virtctl 客户端工具进行身份验证并下载,然后在本地机器上安装 /usr/bin/kubectl-virt

  2. 验证 virtctl 插件是否已安装:

    kubectl plugin list
    

    如果响应中列出了 kubectl-virt,则表示插件已成功安装。

    如果未列出 kubectl-virt,请检查上一个 bmctl install 命令的输出中所注明的 install-virtctl.log 文件,例如 bmctl-workspace/log/install-virtctl-[date]/install-virtctl.log

创建虚拟机

在本快速入门中,您将使用 kubectl CLI 来创建使用公共虚拟机映像和默认凭据的虚拟机。

  1. 在集群中创建虚拟机。virtctl 插件与 kubectl 命令结合使用:

    kubectl virt create vm VM_NAME \
        --image ubuntu20.04 \
        --configure-initial-password USERNAME:PASSWORD
    

    此命令会创建一个 Ubuntu 20.04 虚拟机,默认 2 个 CPU、4Gi 内存和 ReadWriteOnce 模式的 20Gi 启动磁盘,使用 local-shared 存储类别。替换以下值:

    • VM_NAME:虚拟机的名称。 虚拟机名称只能包含小写字母数字字符或“-”,以字母数字字符开头和结尾,并且最多包含 63 个字符。如需了解详情,请参阅 Kubernetes 文档中的 RFC 1123 标签名称
    • USERNAME:要在虚拟机中创建的账号的用户名。
    • PASSWORD:用户账号的密码。

    如果您收到有关 CLI 参数的错误消息,请确认您的集群是 1.11.1 或更高版本,以及您使用的是最新版本的 virtctl 客户端工具。如需详细了解 CLI 错误,请查阅控制台日志。如需了解用户名和密码规则,请参阅客机操作系统 (OS) 的相关文档。如果出现问题,请查看 GDC 上的虚拟机运行时已知问题

  2. 该虚拟机可能需要几分钟才能创建完成。使用 kubectl 命令检查虚拟机的状态:

    kubectl get gvm
    

    以下示例输出显示了处于 Running 状态的虚拟机:

    NAME         STATUS    AGE   IP
    vm-sample1   Running   64s   192.168.2.124
    

连接到虚拟机

虚拟机运行时,连接到虚拟机的控制台。

  1. 如需通过控制台访问虚拟机,请使用 kubectl

    kubectl virt console VM_NAME
    
  2. 出现提示时,输入您为创建虚拟机而指定的用户凭据。

  3. 成功连接到虚拟机的控制台后,退出虚拟机会话和控制台:

    Ctrl + ]
    

清理

要清理本快速入门中创建的资源,请按照以下步骤操作。

  1. 如需删除虚拟机和关联的 DataVolume,请使用 kubectl

    kubectl virt delete vm VM_NAME --all
    

后续步骤