Virtual Machines
Manage GPU virtual machines using CLI commands.
Create VM
Basic Creation
podstack vm create \
--name my-vm \
--os ubuntu-22.04 \
--cpu 4 \
--memory 16 \
--disk 100
With GPU
podstack vm create \
--name gpu-vm \
--os ubuntu-22.04 \
--cpu 8 \
--memory 64 \
--disk 200 \
--gpu-type A100 \
--gpu-count 1
Full Options
podstack vm create \
--name production-vm \
--project my-project \
--os ubuntu-22.04 \
--cpu 16 \
--memory 128 \
--disk 500 \
--gpu-type A100 \
--gpu-count 2 \
--ssh-key my-key \
--ssh-key team-key \
--public-ip \
--user-data ./cloud-init.yaml \
--label environment=production \
--wait
Create Options
| Flag | Description |
|---|---|
--name | VM name (required) |
--os | Operating system (required) |
--cpu | CPU cores (required) |
--memory | Memory in GB (required) |
--disk | Disk size in GB (required) |
--gpu-type | GPU type: A100, H100, V100, L40S |
--gpu-count | Number of GPUs |
--ssh-key | SSH key name (can repeat) |
--public-ip | Allocate public IP |
--user-data | Cloud-init script path |
--label | Label KEY=VALUE (can repeat) |
--project | Project ID or name |
--wait | Wait for VM to be running |
Available OS Images
podstack vm images
Common images:
ubuntu-22.04- Ubuntu 22.04 LTSubuntu-20.04- Ubuntu 20.04 LTSubuntu-22.04-cuda- Ubuntu 22.04 with CUDAdebian-11- Debian 11 Bullseyerocky-8- Rocky Linux 8
List VMs
# All VMs
podstack vm list
# Filter by status
podstack vm list --status running
# Filter by project
podstack vm list --project my-project
# Output formats
podstack vm list --output json
podstack vm list --output wide
Get VM Details
podstack vm get my-vm
podstack vm get my-vm --output json
VM Lifecycle
Start VM
podstack vm start my-vm
podstack vm start my-vm --wait
Stop VM
podstack vm stop my-vm
podstack vm stop my-vm --force
Restart VM
podstack vm restart my-vm
Delete VM
podstack vm delete my-vm
podstack vm delete my-vm --force --yes
Connect to VM
SSH
# Interactive SSH
podstack vm ssh my-vm
# As different user
podstack vm ssh my-vm --user ubuntu
# With command
podstack vm ssh my-vm -- nvidia-smi
Console
Open VNC console in browser:
podstack vm console my-vm
File Transfer
# Upload
podstack vm cp ./script.sh my-vm:/root/script.sh
# Download
podstack vm cp my-vm:/var/log/syslog ./syslog.txt
Resize VM
# Stop first
podstack vm stop my-vm
# Resize
podstack vm resize my-vm \
--cpu 8 \
--memory 32 \
--disk 200
# Start
podstack vm start my-vm
Snapshots
Create Snapshot
podstack vm snapshot create my-vm \
--name before-upgrade \
--description "Snapshot before system upgrade"
List Snapshots
podstack vm snapshot list my-vm
Restore Snapshot
podstack vm snapshot restore my-vm --snapshot before-upgrade
Delete Snapshot
podstack vm snapshot delete my-vm --snapshot before-upgrade
Networking
Public IP
# Allocate
podstack vm ip allocate my-vm
# Release
podstack vm ip release my-vm
Firewall
# Add rule
podstack vm firewall add my-vm \
--protocol tcp \
--port 443 \
--source 0.0.0.0/0
# List rules
podstack vm firewall list my-vm
# Remove rule
podstack vm firewall remove my-vm --rule rule-id
Monitoring
podstack vm metrics my-vm
User Data (Cloud-Init)
Create a cloud-init script:
# cloud-init.yaml
#cloud-config
packages:
- docker.io
- nvidia-driver-525
runcmd:
- systemctl enable docker
- systemctl start docker
Use it:
podstack vm create \
--name my-vm \
--os ubuntu-22.04 \
--user-data ./cloud-init.yaml \
...
Examples
Development VM
podstack vm create \
--name dev-vm \
--os ubuntu-22.04-cuda \
--cpu 8 \
--memory 32 \
--disk 200 \
--gpu-type A100 \
--public-ip \
--wait
# Get SSH command
podstack vm get dev-vm --output json | jq -r '"ssh root@" + .public_ip'
Batch Processing
# Create multiple VMs
for i in {1..5}; do
podstack vm create \
--name worker-$i \
--os ubuntu-22.04 \
--cpu 4 \
--memory 16 \
--disk 50
done
# Delete all workers
podstack vm list --quiet | grep worker | xargs -I {} podstack vm delete {} --yes
Next Steps
- Storage - Storage commands
- Pods - Container commands
- Configuration - CLI settings