本页面介绍了如何管理在运行 VM Runtime on Google Distributed Cloud 的 Google Distributed Cloud Connected 服务器上的虚拟机。在完成本页面上的步骤之前,您必须熟悉 VM Runtime on GDC。如需查看受支持的客机操作系统列表,请参阅适用于 VM Runtime on GDC 的经过验证的客机操作系统。
如需了解虚拟机如何作为分布式云互联平台的重要组成部分,请参阅扩展 GKE Enterprise 以管理本地边缘虚拟机。
Distributed Cloud 连接集群支持虚拟机 webhook。 这样一来,连接的 Distributed Cloud 就可以验证向本地 Kubernetes API 服务器发出的用户请求。遭拒的要求会生成有关拒绝原因的详细信息。
配置 Symcloud Storage
Google Distributed Cloud Connected 服务器使用 Rakuten Symcloud Storage 作为其存储解决方案。Symcloud Storage 是一种第三方解决方案,可在每个 Distributed Cloud Connected 节点上充当本地存储抽象层,并使其本地存储可供在其他 Distributed Cloud Connected 节点上运行的工作负载使用。
Symcloud Storage 是从 Google Cloud Marketplace 部署的,并受其中所述条款的约束。Google 对将 Symcloud Storage 与 Distributed Cloud Connected 搭配使用提供有限支持,并且可能会寻求第三方提供商的帮助。Symcloud Storage 的软件更新包含在 Distributed Cloud Connected 软件更新中。
按如下方式配置 Google Distributed Cloud Connected 集群,以针对虚拟机启用 Symcloud Storage:
使用以下命令创建
robinio命名空间:kubectl create ns robinio
获取 Symcloud Storage 许可文件,并使用以下命令将其应用于集群:
kubectl apply LICENSE_FILE
使用以下命令验证 Symcloud Storage 是否正常运行:
kubectl apply LICENSE_FILE
该命令会返回类似于以下内容的输出:
Name: robin Namespace: Labels: app.kubernetes.io/instance=robin app.kubernetes.io/managed-by=robin.io app.kubernetes.io/name=robin Annotations: <none> API Version: manage.robin.io/v1 Kind: RobinCluster Metadata: … Spec: … Status: … Phase: Ready …通过将以下配置应用于集群来创建
robin-block-immediate存储类:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: robin-block-immediate parameters: faultdomain: host replication: "3" blocksize: "512" provisioner: robin reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true
通过将以下配置应用于集群来创建
robin-snapshotclass卷快照类:apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: robin-snapshotclass labels: app.kubernetes.io/instance: robin app.kubernetes.io/managed-by: robin.io app.kubernetes.io/name: robin annotations: snapshot.storage.kubernetes.io/is-default-class: "true" driver: robin deletionPolicy: Delete
将现有虚拟机升级到 Distributed Cloud Connected 版本 1.7.0
您必须将以下内容添加到集群上 VMRuntime 资源的 spec 部分,然后将修改后的资源应用到集群,之后才能将集群升级到 Distributed Cloud Connected Software 1.7.0 版:
spec: haPolicy: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 55s
在 Distributed Cloud Connected 上启用 VM Runtime on GDC 支持
默认情况下,Distributed Cloud Connected 上的 VM Runtime on GDC 虚拟机支持处于停用状态。如需启用该功能,请完成本部分中的步骤。本部分中的说明假定您已拥有一个功能完善的 Distributed Cloud connected 集群。
如需在 GDC 虚拟机子系统上启用 VM Runtime,请完成以下步骤:
使用以下内容修改
VMRuntime自定义资源,并将其应用于您的集群:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: annotations: baremetal.cluster.gke.io/vmrumtime-force-disable: "false" vm.cluster.gke.io/enable-vm-backup: "true" spec: enabled: true storage: defaultStorageClass: robin-block-immediate haPolicy: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 55s
此过程通常需要几分钟才能完成。
使用以下命令验证
VMRuntime自定义资源是否已应用于集群:kubectl get vmruntime
该命令会返回类似于以下示例的输出:
NAME AGE ENABLED READY PREFLIGHTCHECK vmruntime 5m true true true使用以下内容修改
robin-block-immediate存储类的storageprofile,并将其应用到您的集群:apiVersion: cdi.kubevirt.io/v1beta1 kind: StorageProfile metadata: name: robin-block-immediate spec: claimPropertySets: accessModes: ReadWriteMany volumeMode: Block
安装 virtctl 管理工具
您需要使用 virtctl 客户端工具来管理 Distributed Cloud connected 集群上的虚拟机。如需安装该工具,请完成以下步骤:
以
kubectl插件的形式安装virtctl客户端工具:export VERSION=v0.59.0-anthos1.28-gke.8 gcloud storage cp gs://anthos-baremetal-release/virtctl/${VERSION}/linux-amd64/virtctl/usr/local/bin/virtctl cd /usr/local/bin sudo ln -s virtctl kubectl-virt sudo chmod a+x virtctl cd -
验证
virt插件是否已安装:kubectl plugin list
如果插件已成功安装,则该命令的输出会将
kubectl-virt列为其中一个插件。
为虚拟机映像创建 Cloud Storage 存储桶
完成本部分中的步骤,为虚拟机映像创建 Cloud Storage 存储桶。如果您已有已建立的映像库,请跳过此部分。
完成创建存储桶中的步骤,以创建存储桶。
使用以下命令配置服务账号和密钥,以便访问相应存储桶:
export PROJECT_ID=$(gcloud config get-value project) gcloud iam service-accounts create image-access gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:image-access@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer" \ gcloud iam service-accounts keys create ./image-access-gcr.json \ --iam-account="image-access@${PROJECT_ID}.iam.gserviceaccount.com"
在集群中创建一个用于访问相应存储桶的 Secret。如果您的存储桶是公开的,请跳过此步骤。 此密钥必须与您的虚拟机磁盘位于同一命名空间中。您必须在每个受影响的命名空间中创建一个 Secret。
kubectl create secret generic gcs-image-sa --from-file=creds-gcp.json=./image-access-gcr.json -n NAMESPACE
将
CLUSTER_ID替换为目标命名空间的名称。将图片存储在存储桶中。
通过虚拟机映像创建虚拟机磁盘
完成本部分中的步骤,以通过虚拟机映像创建虚拟机磁盘。
从存储在 Cloud Storage 中的映像创建磁盘
通过将以下配置应用于集群,从存储在 Cloud Storage 存储桶中的虚拟机创建虚拟机磁盘:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: gcs: url: gs://{PROJECT_ID}-vm-images/IMAGE_FILE secretRef: gcs-image-sa size: DISK_SIZE storageClassName: robin-block-immediate
替换以下内容:
DISK_NAME:相应虚拟机磁盘的名称。NAMESPACE:目标命名空间。IMAGE_FILE:虚拟机映像文件的名称。DISK_SIZE:所需的磁盘大小。此值必须大于虚拟机映像文件的virtual-size值。您可以使用命令qemu-img info DISK_SIZE查找此值。
如果您未指定 storageClassName 值,系统会使用 VMRuntime 资源中指定的默认值。
通过现有磁盘映像创建磁盘
按如下方式从集群中的现有虚拟机磁盘或映像文件创建虚拟机磁盘。
通过将以下配置应用于集群来创建目标磁盘:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: IMAGE_DISK_NAME namespace: NAMESPACE spec: source: virtualMachineDisk: name: EXISTING_DISK_NAME size: DISK_SIZE storageClassName: robin-block-immediate
替换以下内容:
IMAGE_DISK_NAME:相应虚拟机磁盘的名称。NAMESPACE:目标命名空间。EXISTING_DISK_NAME:现有虚拟机磁盘的名称。DISK_SIZE:所需的磁盘大小。此值必须等于或大于现有磁盘或映像文件的大小。
您可以使用
qemu-img工具获取现有磁盘或映像文件的大小,如下所示:qemu-img info EXISTING_DISK_NAME
如果您未指定
storageClassName值,系统会使用VMRuntime资源中指定的默认值。通过将以下配置应用到集群,根据现有映像文件创建新磁盘:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: source: virtualMachineDisk: name: IMAGE_DISK_NAME size: DISK_SIZE storageClassName: robin-block-immediate
替换以下内容:
IMAGE_DISK_NAME:您在上一步中创建的虚拟机磁盘的名称。NAMESPACE:目标命名空间。DISK_SIZE:所需的磁盘大小。必须等于您在上一步中创建的虚拟机磁盘的大小。
使用以下命令将目标磁盘调整为所需大小:
kubectl edit gdisk DISK_NAME -n NAMESPACE
替换以下内容:
DISK_NAME:您在上一步中创建的虚拟机磁盘的名称。NAMESPACE:目标命名空间。
修改磁盘配置中的
spec.size值,并将其应用于集群。
创建空磁盘
通过将以下配置应用于集群,创建一个空的虚拟机磁盘:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineDisk metadata: name: DISK_NAME namespace: NAMESPACE spec: size: DISK_SIZE storageClassName: robin-block-immediate
替换以下内容:
DISK_NAME:相应虚拟机磁盘的名称。NAMESPACE:目标命名空间。DISK_SIZE:所需的磁盘大小(以吉比字节为单位)。此值必须大于虚拟机映像文件的virtual-size值。您可以使用命令qemu-img info DISK_SIZE查找此值。
如果您未指定 storageClassName 值,系统会使用 VMRuntime 资源中指定的默认值。
配置虚拟网络
按照网络中的步骤为虚拟机配置虚拟网络。
创建虚拟机
完成本部分中的步骤,在 Distributed Cloud Connected Server 部署中创建虚拟机。本部分中的说明是示例,旨在说明不同场景的配置。如需详细了解如何配置虚拟机,请参阅使用 VM Runtime on GDC 创建具有特定 CPU 和内存资源的虚拟机。
通过可启动的磁盘映像创建虚拟机
如需从可启动的磁盘映像创建虚拟机,请将以下配置应用于集群:
kind: VirtualMachine metadata: name: my-virtual-machine namespace: my-vm-namespace spec: osType: Linux/Windows guestEnvironment: {} // comment out this line to enable guest environment for access management autoRestartOnConfigurationChange: true compute: cpu: vcpus: 6 memory: capacity: 8Gi interfaces: - name: eth0 networkName: network-410 ipAddresses: - 10.223.237.10/25 disks: - virtualMachineDiskName: my-boot-disk boot: true - virtualMachineDiskName: my-data-disk
替换以下内容:
DISK_NAME:相应虚拟机磁盘的名称。NAMESPACE:目标命名空间。
通过 ISO 光盘映像创建虚拟机
如需通过 ISO 光盘映像创建虚拟机,请完成通过 Google Distributed Cloud 中的 ISO 映像创建 Windows 虚拟机中的步骤。
创建支持 GPU 的虚拟机
完成相应步骤
访问虚拟机
完成本部分中的步骤,以访问在 Distributed Cloud 连接的服务器部署上运行的虚拟机。
获取访问凭据
完成本部分中的步骤,以获取使用 Linux 访客环境功能访问虚拟机所需的凭据。
通过将以下配置应用于集群,为目标虚拟机启用 Linux 访客环境:
kind: VirtualMachine metadata: name: my-virtual-machine namespace: my-vm-namespace spec: osType: Linux guestEnvironment: {} autoRestartOnConfigurationChange: true
使用以下命令生成一个包含 SSH 密钥对的
id_rsa.pub文件:ssh-keygen -t rsa通过将以下配置应用于集群,创建
VirtualMachineAccessRequest资源:apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachineAccessRequest metadata: name: RESOURCE_NAME namespace: NAMESPACE spec: vm: VM_NAME user: USER_NAME ssh: key: RSA_KEY ttl: 2h
替换以下内容:
RESOURCE_NAME:此虚拟机访问请求资源的描述性名称。NAMESPACE:目标命名空间。VM_NAME:目标虚拟机的名称。USER_NAME:要向其授予访问权限的用户的名称。RSA_KEY:您在上一步中生成的id_rsa.pub文件的内容。
使用以下命令检查访问权限请求的状态:
kubectl get vmar
当命令返回
Configured状态时,请继续执行下一步。通过 SSH 或远程桌面访问虚拟机:
- 如果虚拟机已连接到本地网络,您可以直接访问该虚拟机。
- 如果虚拟机连接到 Pod 网络,您必须创建负载均衡器服务才能访问所需的端口。
启动、重启或停止虚拟机
使用以下命令启动、重启或停止虚拟机:
- 启动虚拟机:
kubectl virt start vmVM_NAME-nNAMESPACE - 重启虚拟机:
kubectl virt restart vmVM_NAME-nNAMESPACE - 停止虚拟机:
kubectl virt stop vmVM_NAME-nNAMESPACE
替换以下内容:
VM_NAME:目标虚拟机的名称。NAMESPACE:目标命名空间。
后续步骤
- 管理 Distributed Cloud Connected 机架上的虚拟机
- 在 Distributed Cloud connected 上部署工作负载
- 管理 GPU 工作负载
- 管理地区
- 管理机器
- 管理集群
- 管理节点池