When you create a VM instance, Distributed Cloud automatically creates a boot-persistent disk with default configurations. You must also create a boot disk for the VM. You can use either a public image or a custom image.
If you require additional data storage disks for your instances, add a persistent disk to your VM.
This document is for developers in platform administrator or application operator groups that create customized boot disks for VMs. For more information, see Audiences for GDC air-gapped documentation.
Before you begin
To use gdcloud command-line interface (CLI) commands, ensure that you have downloaded, installed,
and configured the gdcloud CLI.
All commands for Distributed Cloud use the gdcloud or
kubectl CLI, and require an operating system (OS) environment.
Get the kubeconfig file path
To run commands against the Management API server, ensure you have the following resources:
Sign in and generate the kubeconfig file for the Management API server if you don't have one.
Use the path to the kubeconfig file of the Management API server to replace
MANAGEMENT_API_SERVERin these instructions.
Request IAM roles
Contact your Project IAM Admin to request the following roles on your project:
Project VirtualMachine Admin (
project-vm-admin): create, modify, list, and delete standard and high-performance VMs in the project namespace.Project Viewer(
project-viewer): view all resources within the project namespace.
All VM roles must bind to the namespace of the project where the VM resides. Follow the steps to verify your access.
Create a boot disk
Use the procedures described on this page to create boot disks that you can use later to create VMs.
Create a boot disk from an image
You can create a standalone boot persistent disk outside of instance creation and attach it to an instance afterwards. This section shows how to create a boot disk from either a GDC-provided OS image or a custom OS image.
Create a boot disk from a GDC-provided image
Before you create a boot disk by using a GDC-provided image, review the list of available images. Then create a boot disk with the provided image.
gdcloud
List all available images and their minimum disk size:
gdcloud compute images listThis command includes both Distributed Cloud-provided and custom images. Choose either one in the
vm-systemnamespace.Select a Distributed Cloud-provided image to create the VM disk:
gdcloud compute disks create BOOT_DISK_NAME \ --project=PROJECT \ --size=DISK_SIZE \ --image=IMAGE_NAME \ --image-project=vm-systemReplace the variables using the following definitions:
Variable Definition BOOT_DISK_NAMEThe name of the boot disk. PROJECTThe GDC project in which to create the boot disk. DISK_SIZEThe size of the boot disk, needs to be at least the minimumDiskSizeof the image.IMAGE_NAMEThe name of the image.
kubectl
List all available GDC-provided images:
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n vm-system \ get virtualmachineimages.virtualmachine.gdc.googGet the
minimumDiskSizeof a specific GDC-provided image. The size of the created customized boot disk must be at least theminimumDiskSize:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n vm-system \ get virtualmachineimages.virtualmachine.gdc.goog IMAGE_NAME \ -ojsonpath='{.spec.minimumDiskSize}'Create a
VirtualMachineDiskobject:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ apply -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: BOOT_DISK_NAME spec: source: image: name: IMAGE_NAME namespace: vm-system size: DISK_SIZE EOFReplace the variables using the following definitions,
Variable Definition MANAGEMENT_API_SERVERThe Management API server kubeconfig file. IMAGE_NAMEThe name of the image. PROJECTThe GDC project in which to create the boot disk. BOOT_DISK_NAMEThe name of the boot disk. DISK_SIZEThe size of the boot disk, needs to be at least the minimumDiskSizeof the image.
Create a boot disk from a custom image
A custom image belongs exclusively to your project. To create a VM with a custom image, you must first create a custom image in the same project if you don't already have one.
Set up the necessary IAM roles to access custom images in your project if you haven't done so yet. Then proceed with these instructions.
gdcloud
List all custom images and their minimum disk size:
gdcloud compute images list \ --project=PROJECT \Select a custom image to create the VM disk:
gdcloud compute disks create BOOT_DISK_NAME \ --project=PROJECT \ --size=DISK_SIZE \ --image=IMAGE_NAME \ --image-project=PROJECTReplace the variables using the following definitions:
Variable Definition BOOT_DISK_NAMEThe name of the boot disk. PROJECTThe GDC project in which to create the boot disk. DISK_SIZEThe size of the boot disk, needs to be at least the minimumDiskSizeof the image.IMAGE_NAMEThe name of the image.
API
-
kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ get virtualmachineimages.virtualmachine.gdc.goog Get the
minimumDiskSizeof a specific customized image. The size of the created customized boot disk must be at least theminimumDiskSize:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n vm-system \ get virtualmachineimages.virtualmachine.gdc.goog IMAGE_NAME \ -ojsonpath='{.spec.minimumDiskSize}'Create a
VirtualMachineDiskobject:kubectl --kubeconfig MANAGEMENT_API_SERVER \ -n PROJECT \ apply -f - <<EOF apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineDisk metadata: name: BOOT_DISK_NAME spec: source: image: name: IMAGE_NAME namespace: PROJECT size: DISK_SIZE EOFReplace the variables, using the following definitions:
Variable Definition MANAGEMENT_API_SERVERThe Management API server kubeconfig file. IMAGE_NAMEThe name of the image chosen from the list all custom images command. PROJECTThe GDC project in which to create the boot disk. BOOT_DISK_NAMEThe name of the boot disk. DISK_SIZEThe size of the boot disk, needs to be at least the minimumDiskSizeof the image.