VM Runtime on GDC lets you configure custom VM types or manually specify CPU and memory resources to match your workload requirements. This document shows you how to create a VM with specific CPU and memory allocations, and how to define and use reusable VM types.
Before you begin
To complete this document, you need access to the following resources:
- Access to Google Distributed Cloud version 1.12.0 (
anthosBareMetalVersion: 1.12.0) or higher cluster. You can use any cluster type capable of running workloads. If needed, try Google Distributed Cloud on Compute Engine or see the cluster creation overview. - The
virtctlclient tool installed as a plugin forkubectl. If needed, install the virtctl client tool.
Create a VM
When you create a VM, you can manually specify the CPU and memory requirements. This ability lets you create VMs with the appropriate compute resources to match your application needs.
To create a VM and manually specify the CPU and memory requirements, use the following steps.
CLI
Use
kubectlto create a VM:kubectl virt create vm VM_NAME \ --image ubuntu20.04 \ --cpu CPU_NUMBER \ --memory MEMORY_SIZEReplace the following values:
VM_NAME: the name for your VM. For more information on name constraints, see Object names and IDs.CPU_NUMBER: The number of virtual CPUs (vCPUs)to assign to the VM.- You can assign between 1 and 96 vCPUs to a VM.
MEMORY_SIZE: The amount of memory to assign to the VM.- You can assign between 1M and 1T of memory to a VM. For more information, see Memory resource units.
Manifest
Create a
VirtualMachinemanifest, such as my-custom-vm.yaml, in the editor of your choice:nano my-custom-vm.yamlCopy and paste the following YAML manifest:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: compute: cpu: vcpus: VCPU_NUMBER memory: capacity: MEMORY_SIZE interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: trueIn this YAML file, define the following settings:
VM_NAME: the name for your VM. For more information on name constraints, see Object names and IDs.VCPU_NUMBER: The number of vCPUs to assign to the VM.- You can assign between 1 and 96 vCPUs to a VM.
MEMORY_SIZE: The amount of memory to assign to the VM.- You can assign between 1M and 1T of memory to a VM. For more information, see Memory resource units.
The VM connects
eth0to the defaultpod-networknetwork.The boot disk named
VM_NAME-boot-dvmust already exist. For more information, see Create and manage virtual disks.Save and close the VM manifest in your editor.
Create the VM using
kubectl:kubectl apply -f my-custom-vm.yaml
Create and use VM types
When you enable VM Runtime on GDC, a new VirtualMachineType custom resource definition is available. This definition is used to specify CPU and memory resources of a VM. You can create VM types for the different workloads you need, and apply a consistent set of compute resources to VMs based on these types.
If VM Runtime on GDC is enabled in Google Distributed Cloud, the
vm-controller-manager installs a predefined VM type. The following definition
shows the default example-machinetype VM type:
apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachineType
metadata:
name: "example-machinetype"
labels:
vm.cluster.gke.io/predefined-machinetype: "true"
spec:
cpu:
vcpus: 2
memory:
capacity: 4G
You can't update this predefined VM type. This predefined VM type is
re-installed if it doesn't exist in the cluster every time the
vm-controller-manager is started or restarted, such as if you deleted the VM
type.
Create a VM type
You can create your own VM types to fit the compute needs of your workloads.
Create a
VirtualMachineTypemanifest such as my-vm-type.yaml, in the editor of your choice:nano my-vm-type.yamlCopy and paste the following YAML manifest:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineType metadata: name: my-vm-type spec: cpu: vcpus: VCPU_NUMBER memory: capacity: MEMORY_SIZEIn this VM type, you define the following settings:
VM_NAME: the name for your VM. For more information on name constraints, see Object names and IDs.VCPU_NUMBER: The number of vCPUs to assign to the VM.- You can assign between 1 and 96 vCPUs to a VM.
MEMORY_SIZE: The amount of memory to assign to the VM.- You can assign between 1M and 1T of memory to a VM. For more information, see Memory resource units.
Save and close the VM type manifest in your editor.
Create the VM type using
kubectl:kubectl apply -f my-vm-type.yaml
Create a VM using a VM type
Specify a VM type in your VirtualMachine manifest to apply predefined
compute settings to your VM.
Create a
VirtualMachinemanifest, such as my-custom-vm.yaml, in the editor of your choice.nano my-custom-vm.yamlCopy and paste the following YAML manifest:
apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: VM_NAME spec: compute: virtualMachineTypeName: my-vm-type interfaces: - name: eth0 networkName: pod-network default: true disks: - virtualMachineDiskName: VM_NAME-boot-dv boot: trueIn this YAML file, specify the name of your custom VM type that you created in the previous section, such as
my-vm-type, as the value for thevirtualMachineTypeName.The VM connects
eth0to the defaultpod-networknetwork.The boot disk named
VM_NAME-boot-dvmust already exist. For more information, see Create and manage virtual disks.Save and close the VM manifest in your editor.
Create the VM using
kubectl:kubectl apply -f my-custom-vm.yaml
What's next
- Edit a VM in Google Distributed Cloud.
- When you no longer need VMs, Delete a VM in Google Distributed Cloud.