Skip to main content
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

VM Providers

VM provider configs

note

AutoScaling is available in the Community and Enterprise editions only. For more information on licensing, visit Licensing.

Create New Provider
Create New Provider
NameDescription
VM Provider ConfigsSelect an existing config or create a new config. When you change the details of an existing config, those details change for everything that uses the same VM provider config.
ProviderSelect a provider from AWS, Azure, Digital Ocean, Google Cloud, or Oracle Cloud. When you select an existing provider, Kasm selects this automatically.

AWS settings

A number of settings are required to use this functionality. The AWS settings appear in the Pool configuration when the feature is licensed.

AWS Settings

AWS Settings
NameDescription
NameA name to use to identify the config.
AWS Access Key IDThe AWS Access Key used for the AWS API.
AWS Secret Access KeyThe AWS Secret Access Key used for the AWS API.
AWS: RegionThe AWS Region the EC2 Nodes should be provisioned in. e.g (us-east-1)
AWS: EC2 AMI IDThe AMI ID to use for the provisioned EC2 nodes. This should be an OS that is supported by the Kasm installer.
AWS: EC2 Instance TypeThe EC2 Instance Type (e.g t3.micro). Note the Cores and Memory override settings don't necessarily have to match the instance configurations. This is to allow for over provisioning.
AWS: Max EC2 NodesThe maximum number of EC2 nodes to provision regardless of the need for available free slots
AWS: EC2 Security Group IDsA Json list containg security group IDs to assign the EC2 nodes. e.g ["sg-065ae66f2d", "sg-02522kdkas"]
AWS: EC2 Subnet IDThe subnet ID to place the EC2 nodes in.
AWS: EC2 EBS Volume SizeSelect the root EBS volume size for the EC2 nodes. The admin console accepts Bytes/GiB and stores the value as bytes (aws_ec2_ebs_volume_size_bytes). API integrations must submit the number of bytes using whole GiB (2^30) increments.
AWS: EC2 EBS Volume TypeThe EBS Volume Type (e.g gp2)
AWS: EC2 IAMThe IAM to assign the EC2 Nodes. Administrators may want to assign CloudWatch IAM access.
AWS: EC2 Custom TagsA Json dictionary for custom tags to assigned on auto-scaled Agent EC2 Nodes. e.g {"foo":"bar", "bin":"baz"}
AWS: EC2 Startup ScriptWhen the EC2 Nodes are provision this script is executed. The script is responsible for installing and configuring the Kasm Agent.
Retrieve Windows VM Password from AWSWhen provisioning an AWS Windows VM Kasm can retrieve the password generated by AWS and store it in the Server configuration record created during the AutoScale provision. This will only happen if the Connection Password field from the attached AutoScale config is blank. When populated Kasm will use the defined value instead of what is returned from AWS. The Administrator may want to leave this field blank and disable retrieving the password from AWS if they wish the Kasm user to be presented with a login screen to manually enter credentials upon connecting to the Windows Workspace. NOTE: This setting only affects Windows (RDP connection type) AWS instances.
SSH KeysThe SSH Key pair to assign the EC2 node
AWS Config Override (JSON)Custom configuration may be added to the provision request for advanced use cases. Instance configuration is overridden in the 'instance_config' configuration block e.g. {"instance_config":{"EbsOptimized": true}} See EC2 Documentation for available options.

Azure settings

A number of settings are required to use this functionality. The Azure settings appear in the Pool configuration when the feature is licensed.

Azure Settings
Azure Settings

Register Azure app

Kasm requires an API key to interface with Azure. Azure calls these keys apps. The example walks through registering one along with the required permissions.

  1. Register an app by going to the Microsoft Entra ID service in the Azure portal.
Microsoft Entra ID
Microsoft Entra ID
  1. From the Add dropdown select App Registration
App Registration
App Registration
  1. Give this app a human-readable name such as Kasm Workspaces
App Registration
App Registration
  1. Go to Resource Groups and select the Resource Group that Kasm uses for AutoScaling.
Azure Resource Groups
Azure Resource Groups
  1. Select Access Control (IAM)
Access Control
Access Control
  1. From the Add drop down select Add role assignment
Add Role Assignment
Add Role Assignment
  1. The app created in Azure needs four roles. First, select the Virtual Machine Contributor role. On the next page, select the app by typing in the name, for example Kasm Workspaces.
Virtual Machine Contributor
Virtual Machine Contributor
Assign Virtual Machine Contributor
Assign Contributor
  1. Repeat this process to add the Network Contributor, DNS Zone Contributor, and Compute Gallery Image Reader roles.
Network Contributor
Network Contributor
DNS Zone Contributor
DNS Zone Contributor
Compute Gallery Image Reader
Compute Gallery Image Reader

Azure VM settings

A number of settings are required to use this functionality. The Azure settings appear in the Pool configuration when the feature is licensed.

Azure VM

Azure VM
NameDescription
NameA name to use to identify the config.
Subscription IDThe Subscription ID for the Azure Account. This can be found in the Azure portal by searching for Subscriptions in the search bar in Azure home then selecting the subscription to use. (e.g 00000000-0000-0000-0000-000000000000)
Resource GroupThe Resource Group the DNS Zone and/or Virtual Machines belong to (e.g dev)
Tenant IDThe Tenant ID for the Azure Account. This can be found in the Azure portal by going to Microsoft Entra ID using the search bar in Azure home. (e.g 00000000-0000-0000-0000-000000000000)
Client IDThe Client ID credential used to auth to the Azure Account. Client ID can be obtained by registering an application within Microsoft Entra ID. (e.g 00000000-0000-0000-0000-000000000000)
Client SecretThe Client Secret credential created with the registered application in Microsoft Entra ID. (e.g abc123)
Azure AuthorityWhich Azure authority to use, there are four, Azure Public Cloud, Azure Government, Azure China and Azure Germany.
RegionThe Azure region where the Agents will be provisioned. (e.g eastus)
Max InstancesThe maximum number of Azure VMs to provision regardless of the need for additional resources.
VM SizeThe size configuration of the Azure VM to provision (e.g Standard_D2s_v3)
OS Disk TypeThe disk type to use for the Azure VM. (e.g Premium_LRS)
OS Disk SizeSelect the boot volume size to assign the compute instance. The admin console accepts Bytes/GiB and stores the value as bytes (azure_os_disk_size_bytes). API integrations must submit the number of bytes in whole GiB (2^30) increments.
OS Image Reference (JSON)The OS Image Reference configuration for the Azure VMs (e.g {"publisher":"canonical","offer":"0001-com-ubuntu-server-jammy","sku":"22_04-lts-gen2","version":"latest"} or {"id":"/subscriptions/000.../resourceGroups/dev/providers/Microsoft.Compute/galleries/development-gallery/img/ubuntu-22.04-custom"})
Image is WindowsIs this a windows VM being created
Plan NamePlan Name for the VM image. This is optional, and is only required for images from the marketplace or custom images derived from a marketplace image.
Plan ProductPlan Product for the VM image. This is optional, and is only required for images from the marketplace or custom images derived from a marketplace image.
Plan PublisherPlan Publisher for the VM image. This is optional, and is only required for images from the marketplace or custom images derived from a marketplace image.
Security TypeWhich features used (if any) to security the VM. This is optional, but may be required for certain Windows VMs such as Windows 10 and Windows 11.
Secure Boot EnabledWhether or not Secure Boot is enabled for the VM. This is not enabled by default, but may be required for certain Windows VMs such as Windows 11.
TPM EnabledWhether or not TPM is enabled for the VM. This is not enabled by default, but may be required for certain Windows VMs such as Windows 11.
Network Security GroupThe network security group to attach to the VM (e.g /subscriptions/000.../resourcegroups/dev/providers/Microsoft.Network/networkSecurityGroups/example-nsg)
SubnetThe subnet to attach the VM to (e.g /subscriptions/000.../resourceGroups/dev/providers/Microsoft.Network/virtualNetworks/development-vnet/subnets/default)
Assign Public IPIf checked, the VM will be assigned a public IP. If no public ip IP is assigned the VM must ne attached to a standard load balancer of the subnet must have a NAT Gateway or user-defined route (UDR). If a public IP is used, the subnet must not also include a NAT Gateway. Reference
Tags (JSON)A JSON dictionary of custom tags to assign to the VMs (e.g {"foo":"bar", "bin": "baz"} )
OS UsernameThe login username to assign to the new VM (e.g testuser)
OS PasswordThe login password to assign to the new VM. Note: Password authentication is disabled for SSH by default
SSH Public KeyThe SSH public key to install on the VM for the defined user: (e.g ssh-rsa AAAAAAA....)
Agent Startup ScriptWhen instances are provisioned, this script is executed and is responsible for installing and configuring the Kasm Agent.
Config Override (JSON)Custom configuration may be added to the provision request for advanced use cases. The emitted json structure is visible by clicking JSON View when inspecting the VM in the Azure console. The keys in this configuration can be used to update top level keys within the emitted json config (e.g {"location":"eastus"}). Nested items can be updated by using dot notation in the key (e.g {"hardware_profile.vm_size":"Standard_D4s_v3"}) Exiting array elements can be updated by specifying the index in the dot notation (e.g {"os_profile.linux_configuration.ssh.public_keys.0.path":"/home/ubuntu/.ssh/authorized_keys"})

Digital Ocean settings

note

A detailed guide on Digital Ocean AutoScale configuration is available here.

warning

Review Tag Does Not Exist Error for known issues and workarounds.

Digital Ocean VM Provider

Digital Ocean VM Provider
NameDescription
NameA name to use to identify the config.
TokenThe token to use to connect to this VM
Max DropletsThe maximum number of Digital Ocean droplets to provision , regardless of whether more are needed to fulfill user demand.
RegionThe Digital Ocean Region where droplets should be provisioned. (e.g nyc3)
ImageThe Image to use when creating droplets. (e.g docker-24-04). See Digital Ocean documentation for more details.
Droplet SizeThe droplet size configuration (e.g c-2). See https://slugs.do-api.dev for more details
TagsA tag(s) to assign the droplet when it is created. This should be a comma separated list of tags.
SSH Key NameThe SSH Key to assign to the newly created droplets. The SSH Key must already exist in the Digital Ocean Account.
Firewall NameThe name of the Firewall to apply to the newly created droplets. This Firewall must already exist in the Digital Ocean Account. Go to your Digital Ocean dashboard -> "Networking" -> "Firewalls" to view existing firewalls or create a new firewall
Startup ScriptWhen droplets are provisioned this script is executed. The script is responsible for installing and configuring the Kasm Agent. Example scripts can be found on our GitHub repository

Tag does not exist error

When you first test AutoScaling with Digital Ocean, an error similar to the following may appear:

Future generated an exception: tag zone:abc123 does not exist
traceback:
..
File "digitalocean/Firewall.py", line 225, in add_tags
File "digitalocean/baseapi.py", line 196, in get_data
digitalocean.DataReadError: tag zone:abc123 does not exist
process: manager_api_server

This error occurs when Kasm Workspaces tries to assign a unique tag based on the Zone ID to the Digital Ocean Firewall. When that tag does not already exist in Digital Ocean, the operation fails and presents the error. To work around the issue, manually create a tag matching the one specified in the error, for example zone:abc123, through the Digital Ocean console. Create the tag through the API or by adding it to a temporary Droplet.

Google Cloud (GCP) settings

note

A detailed guide on GCP AutoScale configuration is available here.

GCP VM Provider

GCP VM Provider
NameDescription
NameAn identifying name for this provider configuration e.g. Google Cloud (GCP) Docker Agent AutoScale Provider
GCP CredentialsThe JSON formatted credentials for the service account used to authenticate with GCP: Ref
Max InstancesThe maximum number of GCP compute instances to provision regardless of the need for additional resources.
Project IDThe Google Cloud Project ID (e.g pensive-voice-547511)
RegionThe region to provision the new compute instances. (e.g us-east4)
ZoneThe zone the new compute instance will be provisioned in (e.g us-east4-b)
Machine TypeThe Machine type for the GCP compute instances. (e.g e2-standard-2)
Machine ImageThe Machine Image to use for the new compute instance. (e.g projects/ubuntu-os-cloud/global/img/ubuntu-2204-lts)
Boot Volume SizeSelect the boot volume size to assign the compute instance. The admin console accepts Bytes/GB and stores the value as bytes (gcp_boot_volume_bytes). API integrations must submit the number of bytes in whole GB (10^9) increments.
Disk TypeThe disk type for the new instance. (e.g pd-ssd, pd-standard, etc.)
Customer Managed Encryption Key (CMEK)The optional path to the Customer Managaged Encryption Key (CMEK) (e.g projects/pensive-voice-547511/locations/global/keyRings/my-keyring/cryptoKeys/my-key
NetworkThe path of the Network to attach the new instance. (e.g projects/pensive-voice-547511/global/networks/default)
Sub NetworkThe path of the Sub Network to attach the new instance.(e.g projects/pensive-voice-547511/regions/us-east4/subnetworks/default)
Public IPIf checked, a public IP will be assigned to the new instances
Network Tags (JSON)A JSON list of the Network Tags to assign the new instance. (e.g ["https-server", "foo", "bar"])
Custom Labels (JSON)A JSON dictionary of Custom Labels to assign the new instance (e.g {"foo": "bar", "bin":"baz"})
Metadata (JSON)A JSON list of metadata objects to add to the instance. (e.g [{"key": "ssh-keys", "value":"user1:ssh-rsa <key contents> user1"}]) Reference
Service Account (JSON)A JSON dictionary representing for a service account to attach to the instance. (e.g {"email": "service-account@example.com", "scopes":["https://www.googleapis.com/auth/cloud-platform"]}) Reference
Guest Accelerators (JSON)A JSON list representing the guest accelerators (e. GPUs) to attach to the instance. (e.g [{"acceleratorType":"projects/<project-id>/zones/<zone>/acceleratorTypes/nvidia-tesla-t4","acceleratorCount":1}]) Reference
GCP Config Override (JSON)A JSON dictionary that can be used to customize attributes of the VM request. The only attributes that cannot be overridden are name and labels (e.g {"shieldedInstanceConfig":{"enableIntegrityMonitoring":true,"enableSecureBoot":true,"enableVtpm":true}} Reference
VM Installed OS TypeThe family of the OS installed on the VM (e.g. linux or windows).
Startup Script TypeThe type of startup script to execute, this determines the key used when creating the GCP startup script metadata. Windows Startup Scripts Linux Startup Scripts
Startup ScriptWhen instances are provisioned, this script is executed and is responsible for installing and configuring the Kasm Agent. Bash is supported on Linux instances and Powershell for Windows instance. Example scripts can be found on our Github repo

Note on updating existing Google Cloud Providers (GCP)

Review the settings for all existing Google Cloud Providers (GCP). Two new fields were added: VM Installed OS Type, which defaults to Linux, and Startup Script Type, which defaults to Bash Script. A provider configured with a Windows VM does not launch the startup script successfully without changing these values.

Harvester settings

note

A detailed guide on Harvester AutoScale configuration is available here.

SettingDescription
NameAn identifying name for this provider configuration e.g. Harvester Docker Agent AutoScale Provider
Max Instances*The maximum number of autoscale instances to be provisioned, regardless of other settings
HostThe address of the Harvester instance, from the KubeConfig file (e.g. https://harvester.example.com/k8s/clusters/local)
SSL CertificateThe Harvester certificate as a base64 encoded string, from the KubeConfig file
API TokenThe API token for authentication to Harvester, from the KubeConfig file
VM NamespaceThe name of the Harvester namespace where the VMs will be provisioned (e.g. kasm-autoscale)
VM SSH Public KeyA public key to add to the autoscale agents, this is then provided as {ssh_key} for use in the startup script
CoresThe number of CPU cores to configure for the autoscale agents
MemoryThe amount of memory to assign to the autoscale agents. The admin console accepts Bytes/MiB/GiB and stores the value as bytes (memory_bytes). API integrations must submit the number of bytes.
Disk ImageThe name of the Harvester image to use for autoscale agents. See Harvester Disk Image for more details.
Disk SizeThe size of the disk to use for autoscale agents. The admin console accepts Bytes/MB/MiB/GB/GiB and stores the value as bytes (disk_size_bytes). API integrations must submit the number of bytes.
Network TypeThe network type for the autoscale agents (pod or multus)
Interface TypeThe interface type for the autoscale agents (masquerade or bridge)
Network NameThe name of the network to connect to the autoscale agents to, if the network is not in the default namespace this must be specified as namespace/name (e.g. kasm-autoscale/kasm-network) (multus network type only)
Startup Scriptcloud-init, Bash, or Powershell script to run after agent creation, typically to install the Kasm Agent and/or any other runtime dependencies you may have. Example scripts can be found on our GitHub repository. Make sure to use the correct script based on the target OS (bash/cloud-init for Linux and Powershell for Windows).
Configuration OverrideA optional config override that contains a complete YAML manifest file used when provisioning the autoscale agents
Enable TPMEnable TPM for the autoscale agents
Enable EFI BootEnable the EFI bootloader for the autoscale agents
Enable Secure BootEnable Secure Boot for the autoscale agents (required EFI Boot to be enabled)

Oracle Cloud (OCI) settings

note

A detailed guide on OCI AutoScale configuration is available here.

OCI VM Provider

OCI VM Provider
NameDescription
NameA name to use to identify the config.
User OCIDThe OCID of the user to authenticate with the OCI API. (e.g ocid1.user.oc1..xyz). You can find this by going to your OCI dashboard -> Click on your Profile -> You can find your user OCID here.
Public Key FingerprintThe public key fingerprint of the authenticated API user created in OCI. (e.g xx:yy:zz:11:22:33)
Private KeyThe private key (PEM format) of the authenticated API user created in OCI.
RegionThe OCI Region name. (e.g us-ashburn-1). See Regions for the list
Tenancy OCIDThe Tenancy OCID for the OCI account. (e.g ocid1.tenancy.oc1..xyz)
Compartment OCIDThe Compartment OCID where the auto-scaled agents will be placed. (e.g ocid1.compartment.oc1..xyx)
Network Security Group OCIDs (JSON)A JSON list of Security Group OCIDs that will be assigned to the auto-scaled agents. (e.g ["ocid1.networksecuritygroup.oc1.iad.xxx","ocid1.networksecuritygroup.oc1.iad.yyy"]). To create or find existing Network Security Groups, go to your OCI dashboard -> "Network Security Groups". See Network Security Groups for more details
Max InstancesThe maximum number of OCI compute instances to provision regardless of the need for available free slots.
Availability Domains (JSON)A JSON list of availability domains where the OCI compute instances may be placed. (e.g ["BEol:US-ASHBURN-AD-1", "BEol:US-ASHBURN-AD-2"]). See Availability Domains for more details
Image OCIDThe OCID of the Image to use when creating the compute instances. (e.g ocid1.image.oc1.iad.xyz) See OCI Image Families for the list
ShapeThe name of the shape used for the created compute instances. (e.g VM.Standard.E4.Flex) See OCI Compute Shapes for the list
Flex CPUsThe number of OCPUs to assign the compute instance. This is only applicable when a Flex shape is used.
Burstable Base CPU UtilizationThe baseline percentage of a CPU Core that can be use continuously on a burstable instance (Select 100% to use a non-burstable instance). Reference.
Flex MemoryThe amount of memory to assign the compute instance. This is only applicable when a Flex shape is used. The admin console accepts Bytes/MiB/GiB and stores the value as bytes (oci_flex_memory_bytes). API integrations must submit the number of bytes in whole GiB (2^30) increments.
Boot Volume SizeThe size of the boot volume to assign the compute instance. The admin console accepts Bytes/GB and stores the value as bytes (oci_boot_volume_bytes). API integrations must submit the number of bytes in whole GB (10^9) increments.
Boot Volume VPUs Per GBThe Volume Performance Units (VPUs) to assign to the boot volume. Values between 10 and 120 in mulitples of 10 are acceptable. 10 is the default and represents the Balanced profile. The higher the VPUs, the higher the volume performance and cost. Reference.
Custom Tags (JSON)A Json dictionary of custom freeform tags to assigned the auto-scaled instances. e.g {"foo":"bar", "bin":"baz"}
Subnet OCIDThe OCID of the Subnet where the auto-scaled instances will be placed. (e.g ocid1.subnet.oc1.iad.xyz) To create or find existing subnets, go to your OCI dashboard -> "Networking" -> "Virtual Cloud Networks" -> "Subnets"
SSH Public KeyThe SSH public key to insert into the compute instances if you want to SSH into your instances. (e.g ssh-rsa XYABC)
Startup ScriptWhen instances are provisioned, this script is executed and is responsible for installing and configuring the Kasm Agent. Example scripts can be found on our GitHub repository
OCI Config OverrideA JSON dictionary that can be used to customize attributes of the VM request. An OCI Model can be specified with the "OCI_MODEL_NAME" key. Reference: OCI Python Docs and Kasm Examples.

Find the OCI Image ID for the desired operating system version and region by navigating the OCI Image page.

OCI config override examples

The following OCI AutoScale configurations use the OCI Config Override.

Disable Legacy Instance Metadata Service

Disables instance metadata service v2 for additional security.

{
"launch_instance_details": {
"instance_options": {
"OCI_MODEL_NAME": "InstanceOptions",
"are_legacy_imds_endpoints_disabled": true
}
}
}
Enable Instance Agent Plugins

A list of available plugins can be retrieved by navigating to an existing instance's "Oracle Cloud Agent" config page. This example enables the "Vulnerability Scanning" plugin.

{
"launch_instance_details": {
"agent_config": {
"OCI_MODEL_NAME": "LaunchInstanceAgentConfigDetails",
"is_monitoring_disabled": false,
"is_management_disabled": false,
"are_all_plugins_disabled": false,
"plugins_config": [{
"OCI_MODEL_NAME": "InstanceAgentPluginConfigDetails",
"name": "Vulnerability Scanning",
"desired_state": "ENABLED"
}]
}
}
}

Nutanix settings

note

A detailed guide on Nutanix AutoScale configuration is available here.

SettingDescription
NameAn identifying name for this provider configuration e.g. Nutanix Docker Agent AutoScale Provider
Max InstancesThe maximum number of autoscale instances to be provisioned, regardless of other settings
HostThe IP or FQDN of the Nutanix Prism Central server (e.g. 192.168.100.40 or nutanix.example.com)
PortThe listening port to the Nutanix Prism Central server. This is usually 9440
UsernameThe name of the user that Kasm will use to access the Nutanix Prism Central server
PasswordThe Password of the user that Kasm will use to authenticate against the Nutanix Prism Central server
Verify SSLWhether to validate SSL certificates. Set to False to enable self-signed certificates. Defaults to True
API VersionThe API version used to communicate with Prism Central. v3 is recommended, v4 compatibility is currently in Preview
VM Candidate NameThe name of the VM used to clone new autoscaled VMs
VM CoresThe number of CPU cores to provision on the new autoscaled VMs
VM MemoryThe amount of memory to provision on the new autoscaled VMs. The admin console accepts Bytes/MiB/GiB and stores the value as bytes (memory_bytes). API integrations must submit the number of bytes.
Startup ScriptWhen VMs are provisioned, this script is executed and is responsible for installing and configuring the Kasm Agent for Docker Agent roles, or the Kasm Desktop Service for Windows VMs if desired. Bash scripts and cloud-config yaml formats are supported on a Linux host and Powershell scripts on Windows hosts Example scripts are available on our GitHub repository

Proxmox settings

note

A detailed guide on Proxmox AutoScale configuration is available here.

SettingDescription
NameAn identifying name for this provider configuration e.g. Proxmox Docker Agent AutoScale Provider
Max InstancesThe maximum number of autoscale instances to be provisioned, regardless of other settings
HostThe hostname or IP and port of your Proxmox instance (e.g. 192.168.100.40:8006)
UsernameThe name of the autoscale user in Proxmox, including the auth realm (e.g. KasmUser@pve)
Token NameThe name of the API token associated with the user (e.g. kasm_token and not KasmUser@pve!kasm_token)
Token ValueThe secret value of the API token associated with the user
Verify SSLWhether or not to verify the SSL certs in the Proxmox environment. Disable if you are using self-signed certs
VMID Range LowerThe start of the VMID range for Kasm to use for autoscale agents. Must not overlap with any other Proxmox autoscale providers configured in Kasm
VMID Range UpperThe end of the VMID range for Kasm to use for autoscale agents. Must not overlap with any other Proxmox autoscale providers configured in Kasm
Full CloneIf enabled performs a full clone rather than a linked clone. A linked clone is faster to provision but will have reduced performance compared to a full clone
Template NameThe name of the VM template to use when cloning new autoscale agents
Cluster Node NameThe name of the Proxmox node containing the VM template
Resource Pool NameSpecify the resource pool to use for cloning the new autoscale agents
Storage Pool NameOptionally specify a storage pool to use for cloning the new autoscale agents. This requires Full Clone to be enabled
Target Node NameOptionally specify a cluster node to provision new autoscale agents on (defaults to the Cluster Node Name)
VM CoresThe number of CPU cores to configure for the autoscale agents
VM MemoryThe amount of memory for the autoscale agents. The admin console accepts Bytes/MiB/GiB and stores the value as bytes (memory_bytes). API integrations must submit the number of bytes.
Installed OS TypeLinux or Windows
Startup Script PathThe absolute path to where the startup script will be uploaded and run from, typically /tmp for Linux or C:\windows\temp for Windows. The path must exist on the template.
Startup ScriptBash (Linux) or Powershell (Windows) startup script to run after agent creation, typically to install the Kasm Agent and/or any other runtime dependencies. Example scripts are available on our GitHub repository

VMware vSphere settings

note

A detailed guide on vSphere AutoScale configuration is available here.

vSphere VM Provider

vSphere VM Provider
SettingDescription
NameAn identifying name for this provider configuration.
vSphere vCenter AddressThe IP or FQDN of the VMware vSphere vCenter server to use.
vSphere vCenter PortThe management port of your Vcenter instance (typically 443)
vSphere vCenter UsernameThe username to use when authenticating with the vSphere vCenter server (e.g kasm-autoscale)
vSphere vCenter PasswordThe password to use when authenticating with the vSphere vCenter server.
Clone TypeSelect the cloning method: Full Clone (Template) creates independent VMs from a template with dedicated storage, Linked Clone (VM Snapshot) creates VMs using delta disks from a snapshot for faster provisioning and reduced storage, and Instant Clone (Frozen VM) creates VMs by forking a frozen parent VM's memory/CPU state for sub-second cloning.
VM Template Name(Full Clone only) The name of the template VM to use when cloning new autoscaled VMs.
Linked Clone VM Name(Linked Clone only) The name of the source VM (not template) to use for linked clones. This VM must have a snapshot available.
Linked Clone Snapshot Name(Linked Clone only) The name of the snapshot on the source VM to clone from.
Frozen VM Name(Instant Clone only) The name of the frozen parent VM to use for instant clones. This VM must be powered on and frozen.
Max InstancesThe maximum number of vSphere VM instances to provision regardless of the need for available free slots.
Datacenter NameThe datacenter to use for cloning the new vSphere VM instances.
VM FolderThe VM folder to use for cloning the new vSphere VM instances. This field is optional, if left blank the VM folder of the template is used.
Use Datastore Cluster(Full Clone only) When enabled, the Datastore Name field is treated as a Datastore Cluster name and vSphere will recommend the optimal datastore for each clone. If the recommendation fails, the clone falls back to the source VM's datastore. Not available for linked clones.
Datastore NameThe datastore (or datastore cluster, when Use Datastore Cluster is enabled) to use for cloning new vSphere VM instances. This field is optional; if left blank, the datastore of the source VM is used.
Cluster NameThe cluster to use for cloning the new vSphere VM instances. This field is optional, if left blank the cluster of the template is used.
Resource PoolThe resource pool to use for cloning the new vSphere VM instances. This field is optional, if left blank the resource pool of the template is used.
Number of Guest CPUs(Full Clone and Linked Clone only) The number of CPUs to configure on new vSphere VM instances. This option is not dependent on the number of CPUs configured on the template. Instant clones inherit the CPU configuration of the frozen parent VM.
Amount of Guest Memory(Full Clone and Linked Clone only) The amount of memory to configure on new vSphere VM instances. This option is not dependent on the amount of memory configured on the template. Instant clones inherit the memory configuration of the frozen parent VM. The admin console accepts Bytes/MiB and stores the value as bytes (vsphere_memory_bytes). API integrations must submit the number of bytes in whole MiB (2^20) increments.
What family of OS is installed in the VMWhether the template OS is Linux or Windows. This is needed to ensure proper execution of the startup script.
Startup Script Execution Method(Full Clone and Linked Clone only) Choose how the startup script is executed: Cloud-Init (Recommended) - Injects the script via cloud-init/cloudbase-init for first-boot execution. Requires cloud-init (Linux) or cloudbase-init (Windows) to be installed in the template (Additional permissions required). VMware Guest Operations (Legacy) - Executes the script directly via VMware Tools Guest Operations API after the VM boots. Requires VMware Tools and valid OS credentials. Instant clones always use VMware Guest Operations (no boot sequence).
Guest VM Username(Required for VMware Guest Operations method and Instant Clone) The username to use for running the startup script on the new vSphere VM instance. This account should have sufficient privileges to execute all commands in the startup script.
Guest VM Password(Required for VMware Guest Operations method and Instant Clone) The password for the Guest VM Username account.
Startup ScriptWhen instances are provisioned, this script is executed and is responsible for installing and configuring the Kasm Agent. Scripts are run as bash scripts on a Linux host and Powershell scripts on a Windows host. Example scripts are available on our GitHub repository Additional troubleshooting steps can be found in the VMware vSphere section of the AutoScale documentation.
VM SSH Public KeyA public key to add to the autoscale agents, this is then provided as {ssh_key} for use in the startup script.

Permissions for vCenter service account

These are the minimum permissions that your service account requires in vCenter for a default configuration. The account might require additional privileges depending on the features and configurations you have in place. Kasm advises creating a dedicated service account for Kasm Workspaces AutoScaling with these permissions to enhance security and minimize potential risks.

  • Datastore
    • Allocate space
    • Browse datastore
  • Global
    • Cancel task
  • Network
    • Assign network
  • Resource
    • Assign virtual machine to resource pool
  • Virtual machine
    • Change Configuration
      • Change CPU count
      • Change Memory
      • Set annotation
    • Edit Inventory
      • Create from existing
      • Create new
      • Remove
      • Unregister
    • Guest operations
      • Guest operation modifications
      • Guest operation program execution
      • Guest operation queries
    • Interaction
      • Power off
      • Power on
    • Provisioning
      • Deploy template

Network connectivity

The agent startup scripts use VMware guest script execution through VMware Tools. This functionality requires direct HTTPS connectivity between the Kasm Workspaces Manager and the ESXi hosts running the agent VMs.

Notes on vSphere datastore storage

When you configure VMware vSphere with Kasm Workspaces, keep datastore storage in mind. When clones are created, VMware attempts to satisfy the clone operation. When the datastore runs out of space, any VMs running on that datastore are paused until space is available. Kasm Workspaces recommends placing critical management VMs, such as the vCenter server VM and cluster management VMs, on separate datastores that are not used for Kasm AutoScaling.

OpenStack settings

A number of settings are required to use this functionality. The OpenStack settings appear in the Pool configuration when the feature is licensed.

Find the appropriate OpenStack configuration options on the "API Access" page of the OpenStack UI by downloading the "OpenStack RC File".

OpenStack VM

OpenStack VM
NameDescription
NameA name to use to identify the config.
Max InstancesThe maximum number of OpenStack compute instances to provision regardless of the need for additional resources.
OpenStack Identity EndpointThe endpoint address of the OpenStack Keystone endpoint (e.g. https://openstack.domain:5000)
OpenStack Nova EndpointThe endpoint address of the OpenStack Nova (Compute) endpoint (e.g. https://openstack.domain:8774/v2/)
OpenStack Nova VersionThe version to use with the OpenStack Nova (Compute) endpoint (e.g. 2.90)
OpenStack Glance EndpointThe endpoint address of the OpenStack Glance (Image) endpoint (e.g. https://openstack.domain:9292)
OpenStack Glance VersionThe version to use with the OpenStack Glance (Image) endpoint (e.g. 2)
OpenStack Cinder EndpointThe endpoint address of the OpenStack Cinder (Volume) endpoint. Note: The address contains the OpenStack Project ID (e.g. https://openstack.domain:8776/v3/383a0dad105e460ab5a863ea0a45932b)
OpenStack Cinder VersionThe version to use with the OpenStack Cinder (Volume) endpoint. (e.g. 3)
Project NameThe name of the OpenStack Project where VMs will be provisioned.
Authentication MethodThe authentication method used to authenticate against the OpenStack Identity (Keystone) service. Supported options are Application Credential or User. See the Known Issue below regarding Application Credential authentication.
Application Credential IDThe Credential ID of the OpenStack Application Credential.
Application Credential SecretThe OpenStack Application Credential secret.
Project Domain NameThe domain that the OpenStack Project belongs to. This value is typically obtained from the OpenStack RC file (OS_PROJECT_DOMAIN_NAME). If OS_PROJECT_DOMAIN_NAME is not present, use OS_PROJECT_DOMAIN_ID if supported by your OpenStack deployment. For many deployments, such as OpenMetal, the value is Default.
User Domain NameThe domain that the OpenStack User belongs to. This value is typically obtained from the OpenStack RC file (OS_USER_DOMAIN_NAME) (e.g. Default).
UsernameThe OpenStack username used to authenticate. This value is available in the OpenStack RC file as OS_USERNAME and is typically the same username used to sign in to the OpenStack Horizon dashboard.
PasswordThe password for the OpenStack user account used to authenticate. This is the same password used to sign in to the OpenStack Horizon dashboard. The password is not stored in the OpenStack RC file and must be entered separately.
MetadataA Json Dictionary containing the metadata tags applied to the OpenStack VMs (e.g. {"my_tag": "my_value"})
Image IDThe ID of the Image used to provision OpenStack VMs.
FlavorThe name of the desired Flavor for the OpenStack VM (e.g. gen.medium)
Create VolumeEnable to create a new Block storage (Cinder) volume for the OpenStack VM. (When disabled, ephemeral Compute (Nova) storage is used.)
Volume SizeSelect the size of the VM volume when "Create Volume" is enabled. The admin console accepts Bytes/GiB and stores the value as bytes (openstack_volume_size_bytes). API integrations must submit the number of bytes using whole GiB (2^30) increments.
Volume TypeThe type of volume to use for the new OpenStack VM Volume (e.g. __DEFAULT__)
Startup ScriptWhen OpenStack VMs are provision this script is executed. The script is responsible for installing and configuring the Kasm Agent.
Security GroupsA list containing the security groups applied to the OpenStack VM (e.g. ["sg1", "sg2"])
Network IDThe ID of the network that the OpenStack VMs will be connected to.
Key NameThe name of the SSH Key used to connect to the instance.
Availability ZoneThe Name of the Availability Zone that the OpenStack VM will be placed into.
Config OverrideA JSON dictionary that can be used to customize attributes of the VM request
Known Issue

The OpenStack provider supports both Application Credential and User authentication methods.

However, Application Credential authentication may not work with newer OpenStack deployments and can result in a 401 Unauthorized response from the OpenStack Identity (Keystone) service.

401 Unauthorized Error

401 Unauthorized Error

Until this issue is resolved, use User authentication when configuring the OpenStack provider.

OpenStack RC File

Many of the OpenStack provider configuration values can be obtained from the OpenStack RC file provided by your OpenStack deployment.

To download the OpenStack RC file:

  1. Sign in to the OpenStack Horizon dashboard.
  2. Navigate to ProjectAPI Access.
  3. Click Download OpenStack RC File.

The RC file contains values that can be used to populate several OpenStack provider fields.

Example values from an OpenStack RC file:

export OS_AUTH_URL=https://openstack.domain:5000
export OS_PROJECT_NAME="admin"
export OS_USER_DOMAIN_NAME="Default"
export OS_PROJECT_DOMAIN_ID="default"
export OS_USERNAME="admin"
Kasm FieldOpenStack RC Variable / Source
OpenStack Identity EndpointOS_AUTH_URL
Project NameOS_PROJECT_NAME
Project Domain NameOS_PROJECT_DOMAIN_NAME or OS_PROJECT_DOMAIN_ID
User Domain NameOS_USER_DOMAIN_NAME
UsernameOS_USERNAME
OpenStack Nova EndpointObtained from the Compute (Nova) service endpoint.
OpenStack Glance EndpointObtained from the Image (Glance) service endpoint.
OpenStack Cinder EndpointObtained from the Block Storage (Cinder) service endpoint. The endpoint includes the Project ID.

The OpenStack RC file does not contain the user's password. You will be prompted to enter it when sourcing the RC file.

User Credentials

Credential

Create an User Credential

Application Credentials remain available in the product. However, due to the known issue described above, we recommend using User authentication. If Application Credential authentication results in a 401 Unauthorized error, switch to User authentication.

OpenStack notes

The OpenStack provider requires OpenStack endpoints to present trusted, signed TLS certificates. Configure this through an API gateway that presents a valid certificate or by configuring valid certificates on each individual service (reference: OpenStack Docs).

Openstack Endpoints Require Trusted Certificates

The OpenStack provider requires that OpenStack endpoints present trusted, signed TLS certificates. This can be done through an API gateway that presents a valid certificate or through configuring valid certificates on each individual service Openstack Docs.

Application Credential Access Rules
- service: volumev3
method: POST
path: /v3/*/volumes

- service: volumev3
method: DELETE
path: /v3/*/volumes/*

- service: volumev3
method: GET
path: /v3/*/volumes

- service: volumev3
method: GET
path: /v3/*/volumes/*

- service: volumev3
method: GET
path: /v3/*/volumes/detail

- service: compute
method: GET
path: /v2.1/servers/detail

- service: compute
method: GET
path: /v2.1/servers

- service: compute
method: GET
path: /v2.1/flavors

- service: compute
method: GET
path: /v2.1/flavors/*

- service: compute
method: GET
path: /v2.1/servers/*/os-volume_attachments

- service: compute
method: GET
path: /v2.1/servers/*

- service: compute
method: GET
path: /v2.1/servers/*/os-interface

- service: compute
method: POST
path: /v2.1/servers

- service: compute
method: DELETE
path: /v2.1/servers/*

- service: image
method: GET
path: /v2/img/*

- service: image
method: GET
path: /v2/schemas/image

KubeVirt enabled providers

Overview

Kasm supports AutoScaling in Kubernetes environments running KubeVirt. Supported environments include generic k8s installations as well as GKE and Harvester deployments.

Updated startup scripts

Kasm has released updated startup scripts to include KubeVirt support. The most important change is the inclusion of the qemu-agent.

https://github.com/kasmtech/workspaces-autoscale-startup-scripts/blob/develop/latest/docker_agents/ubuntu.sh

The qemu-agent installation snippet is commented out by default in the startup script. To use it with KubeVirt, first uncomment it.

Config overrides

Kasm generates VMs using a Kubernetes YAML manifest described by this API specification:

https://kubevirt.io/api-reference/main/definitions.html#_v1_virtualmachine

When Kasm providers do not expose a required feature, you can override the provider configuration. To do this, store the entire manifest in the provider config_override. Kasm parses the manifest and attempts to update certain fields. The metadata is updated so that the name field contains a unique name, the namespace matches the namespace in the provider config, and the labels contain various labels required for AutoScale functionality. All other values are preserved. The runStrategy is set to Always and the hostname is set to match the unique name. To support startup scripts, a disk with the following settings is appended to the disks:

- name: config-drive-disk
cdrom:
bus: sata
readonly: true

This points to a volume that is appended to the volumes with the following settings:

- name: config-drive-disk
cloudInitConfigDrive:
secretRef:
name: f'{name}-secret'

The manifest spawns multiple VMs, so unique names for certain resources such as PVCs are necessary. To support this, the provider replaces any instance of $KASM_NAME with a unique name. To use this for multiple different types of resources, append to the name as in this suggested PVC example:

volumes:
- name: disk-0
persistentVolumeClaim:
claimName: $KASM_NAME-pvc

Because the manifest spawns multiple VMs, use a disk cloning method such as the dataVolume feature of the Containerized Data Importer interface created by KubeVirt.

Caveats

The k8s namespace for Kasm resources is configured on the provider and must not be updated while the provider is in use. Updating it can result in unpredictable behavior and orphaned resources. To change the k8s namespace, create a new AutoScale and provider with the new namespace. Update the old AutoScale configuration, setting the standby cores, GPUs, and memory to 0. This allows new resources to transition to the new provider.

Orphaned k8s objects can exist for various reasons, such as power loss of the Kasm server during VM creation. Currently, you must clean up these objects manually. The k8s objects that Kasm creates are virtualmachines, secrets, and PVCs.

The Kasm KubeVirt provider does not work out of the box with the following Kubernetes deployments:

  • KIND. The default KIND deployment uses local-path-provisioning for storage, which does not support CDI cloning.

KubeVirt settings

A number of settings are required to use this functionality. The KubeVirt settings appear in the Pool configuration when the feature is licensed.

Find the appropriate Kubernetes configuration options by downloading the KubeConfig file provided by your Kubernetes installation.

KubeVirt VM

KubeVirt VM
NameDescription
NameA name to use to identify the config.
Max InstancesThe maximum number of KubeVirt compute instances to provision regardless of the need for additional resources.
Kubernetes HostThe address of the kubernetes cluster (e.g. https://kubevirt.domain:5000).
Kubernetes SSL CertificateThe kubernetes cluster certificate as a base64 encoded string of a PEM file.
Kubernetes API TokenThe bearer token for authentication to the kubernetes cluster.
VM NamespaceThe name of the Kubernetes namespace where the VMs will be provisioned (e.g. kasm-autoscale).
VM SSH Public KeyThe Public SSL Certificate used to access the VM.
VM CoresThe nubmer of CPU cores to configure for the VM.
VM MemoryThe amount of memory to configure for the VM. The admin console accepts Bytes/MiB/GiB and stores the value as bytes (memory_bytes). API integrations must submit the number of bytes.
VM Disk SizeThe size of the disk to configure for the VM. The admin console accepts Bytes/MB/MiB/GB/GiB and stores the value as bytes (disk_size_bytes). API integrations must submit the number of bytes.
VM Disk SourceThe name of the source PVC containing a cloud ready disk image used to clone a new disk volume
VM Interface TypeThe interface type for the VM (e.g. masquerade or bridge).
VM Network NameThe name of the network interface. If using a multus network, it should match the name of that network. If the network is not in the default namespace, it should be specified as namespace/name (e.g. kasm-autoscale/kasm-network).
VM Network TypeThe network type for the VM (e.g. pod or multus).
VM Startup ScriptWhen VMs are provisioned, this script is executed and is responsible for installing and configuring the Kasm Agent. Scripts are ran as bash scripts on a Linux host and Powershell scripts on a Windows host. Additional troublshooting steps can be found in the VMWare vSphere section of the Autoscale documentation.
Configuration OverrideA config override that contains a complete YAML manifest file used when provisioning the VM.
Enable TPMEnable TPM for VM.
Enable EFI BootEnable the EFI boot loader for the VM.
Enable Secure BootEnable secure boot for the VM (requires EFI boot to be enabled).

KubeVirt GKE setup example

This example assumes you have a GKE account, a Linux development environment, and an existing Kasm deployment (ref).

The example will assume the following variables:

  • cluster name kasm
  • zone us-central1
  • region us-central1-c
  • machine-type c3-standard-8
  • namespace kasm
  • storage class name kasm-storage
  • pvc name kasm-ubuntu-jammy
  • pvc size 25GiB
  • pvc image jammy-server-cloudimg-amd64.img

These should be replaced with values more appropriate to your installation.

Ensure GKE is configured

  • Install the gcloud console (ref):
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
tar -xf google-cloud-cli-linux-x86_64.tar.gz
./google-cloud-sdk/install.sh -q --path-update true --command-completion true
. ~/.profile
  • Initialize the gcloud console (ref):
gcloud init --no-launch-browser
gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-c
  • Enable the GKE engine API (ref):
gcloud services enable container.googleapis.com
  • Create a cluster with nested virtualization support (ref):
gcloud container clusters create kasm \
--enable-nested-virtualization \
--node-labels=nested-virtualization=enabled \
--machine-type=c3-standard-8
  • Install the kubectl gcloud component (ref):
gcloud components install kubectl
  • Configure GKE kubectl authentication (ref):
gcloud components install gke-gcloud-auth-plugin
gcloud container clusters get-credentials kasm \
--region=us-central1-c
  • Create the Kasm namespace:
kubectl create namespace kasm

Install KubeVirt

Note: The current v1.3 release of KubeVirt introduced a bug preventing GKE support. You must install the v1.2.2 release.

  • Install KubeVirt (ref):
#export RELEASE=$(curl https://storage.googleapis.com/kubevirt-prow/release/kubevirt/kubevirt/stable.txt)
export RELEASE=v1.2.2
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-operator.yaml
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/${RELEASE}/kubevirt-cr.yaml
  • Wait for it to be ready. This may time out multiple (2-3) times before returning successfully:
kubectl -n kubevirt wait kv kubevirt --for condition=Available

Install the Containerized Data Importer extension

In order to support efficient cloning KubeVirt requires the Containerized Data Importer extension (ref).

  • Install the CDI extension:
export VERSION=$(curl -s https://api.github.com/repos/kubevirt/containerized-data-importer/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-operator.yaml
kubectl create -f https://github.com/kubevirt/containerized-data-importer/releases/download/$VERSION/cdi-cr.yaml
  • Create a new storage class that uses the GKE CSI driver and has the Immediate volume binding mode:
kubectl apply -f - <<EOF
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
components.gke.io/component-name: pdcsi
components.gke.io/component-version: 0.18.23
components.gke.io/layer: addon
storageclass.kubernetes.io/is-default-class: "true"
labels:
addonmanager.kubernetes.io/mode: EnsureExists
k8s-app: gcp-compute-persistent-disk-csi-driver
name: kasm-storage
parameters:
type: pd-balanced
provisioner: pd.csi.storage.gke.io
reclaimPolicy: Delete
volumeBindingMode: Immediate
EOF
  • Mark any existing default storage classes as non-default:
kubectl patch storageclass standard-rwo -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

Create local kubectl authentication

Currently, to authenticate with the GKE cluster, Kasm needs a local kubectl authentication account.

  • Create a service account:
KUBE_SA_NAME="kasm-admin"
kubectl create sa $KUBE_SA_NAME
kubectl create clusterrolebinding $KUBE_SA_NAME --clusterrole cluster-admin --serviceaccount default:$KUBE_SA_NAME
  • Manually create a long-lived API token for the service account
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: $KUBE_SA_NAME-secret
annotations:
kubernetes.io/service-account.name: $KUBE_SA_NAME
type: kubernetes.io/service-account-token
EOF
  • Generate the kubeconfig
KUBE_DEPLOY_SECRET_NAME=$KUBE_SA_NAME-secret
KUBE_API_EP=`gcloud container clusters describe kasm --format="value(privateClusterConfig.publicEndpoint)"`
KUBE_API_TOKEN=`kubectl get secret $KUBE_DEPLOY_SECRET_NAME -o jsonpath='{.data.token}'|base64 --decode`
KUBE_API_CA=`kubectl get secret $KUBE_DEPLOY_SECRET_NAME -o jsonpath='{.data.ca\.crt}'`
echo $KUBE_API_CA | base64 --decode > tmp.deploy.ca.crt

touch $HOME/local.cfg
export KUBECONFIG=$HOME/local.cfg
kubectl config set-cluster local --server=https://$KUBE_API_EP --certificate-authority=tmp.deploy.ca.crt --embed-certs=true
kubectl config set-credentials $KUBE_SA_NAME --token=$KUBE_API_TOKEN
kubectl config set-context local --cluster local --user $KUBE_SA_NAME
kubectl config use-context local
  • Validate your kubeconfig works
kubectl version

This should display both the client and server versions. If it does not, retrieve the current config used by kubectl to ensure it uses the correct config:

kubectl config view

Ensure that it is using the local settings you generated and not an existing GKE configuration.

Upload a PVC

Use the virtctl tool to upload a VM image. Both the raw and qcow2 formats are supported. The image should be cloud-ready, with cloud-init configured.

  • Download and install the virtctl tool:
VERSION=$(kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.observedKubeVirtVersion}")
ARCH=$(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/') || windows-amd64.exe
echo ${ARCH}
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-${ARCH}
chmod +x virtctl
sudo install virtctl /usr/local/bin
  • Expose the CDI Upload Proxy by executing the following command in another terminal:
kubectl -n cdi port-forward service/cdi-uploadproxy 8443:443
  • Use the virtctl tool to upload the VM image:
virtctl image-upload pvc kasm-ubuntu-jammy --uploadproxy-url=https://localhost:8443 --size=25Gi --image-path=./jammy-server-cloudimg-amd64.img --insecure -n kasm

Ensure Kasm is configured

  • Configure Kasm
    • Add a license
    • Set the default zone upstream address to the address of the Kasm host
    • Add a Pool
      • Name KubeVirt Pool
      • Type Docker Agent
    • Add an Auto-Scale config
      • Name KubeVirt AutoScale
      • AutoScale Type Docker Agent
      • Pool KubeVirt Pool
      • Deployment Zone default
      • Standby Cores 4
      • Standby GPUs 1
      • Standby Memory 4 GiB (select GiB in the unit selector)
      • Downscale Backoff 600
      • Agent Cores Override 4
      • Agent GPUs Override 1
      • Agent Memory Override 4 GiB (select GiB in the unit selector)
    • Create a new VM Provider
      • Provider KubeVirt
      • Name KubeVirt Provider
      • Max Instances 10
      • Host paste server URI from kubeconfig
      • SSL Certificate paste certiciate-authority-data from kubeconfig
      • API Token paste token from kubeconfig
      • VM Namespace kasm
      • VM Public SSH Key paste user public ssh key
      • Cores 4
      • Memory 4 GiB (select GiB in the unit selector)
      • Disk Source kasm-ubuntu-jammy
      • Disk Size 30 GiB (select GiB in the unit selector)
      • Interface Type bridge
      • Network Name default
      • Network Type pod
      • Startup Script paste ubuntu docker agent startup script