Migrate from GCP Compute Engine to Quake AI compute
Coming from another cloud?
▸Google Cloud·VM instances, Persistent Disk, Machine Images (full VM state capture)
VM instances
- Uses REST API 'instances.insert' instead of Nova 'servers.create' with different auth via service accounts vs Keystone.
- Supports bare metal instances (no hypervisor), not in standard OpenStack Nova.
- Network interfaces tied to VPC subnets; differs from Neutron ports/floating IPs.
OS images
- Public images shareable across projects (e.g. debian-cloud); OpenStack typically tenant-private.
- Image families point to latest version; no OpenStack equivalent.
- Custom images stored in Cloud Storage with licensing fees for premium OS.
Persistent Disk
- Uses Google Compute Engine REST API instead of OpenStack Cinder API.
- Offers multiple performance tiers (pd-standard HDD, pd-balanced SSD, pd-ssd, pd-extreme) with performance scaling linearly with provisioned size, unlike Cinder's backend-dependent performance.
- Supports regional disks replicated synchronously across 2 zones for higher availability (better than 99.9999% durability), while Cinder volumes are typically zonal unless using replication features.
- Online resize to increase size without detaching; no manual striping/RAID needed as GCP handles distribution automatically.
Migrate from GCP compute engine to Quake AI compute
You use this guide to move compute workloads from GCP Compute Engine to Quake AI (OpenStack Nova). GCP can export custom images to QCOW2, OpenStack Glance's preferred format, with Cloud Build handling the conversion internally so you skip the manual qemu-img step. For most workloads, rebuild and rsync stays faster, but you can use image export for custom GCE images with extensive baked-in configuration.
Service mapping#
Google Cloud to Quake AI
| Google Cloud service | Quake AI equivalent | Key difference |
|---|---|---|
| Disk Clones | Clones | Direct disk-to-disk cloning (zonal-to-zonal or zonal-to-regional) without intermediate snapshot, synchronous and instantly usable (regional... see details |
| Compute Engine | Compute | No notable divergence |
| Machine types | Flavors | Organized by families/series (e.g. N2 general-purpose); OpenStack flavors flat list. Custom types +5% premium for N/E series; no such... see details |
| Machine Images (full VM state capture) | Images | Public images shareable across projects (e.g. debian-cloud); OpenStack typically tenant-private. Image families point to latest version; no... see details |
| VM instances | Instances | Uses REST API 'instances.insert' instead of Nova 'servers.create' with different auth via service accounts vs Keystone. Supports bare metal... see details |
| SSH keys | Key Pairs | Managed in project/instance metadata or OS Login (IAM); no central 'keypairs' resource like Nova. Auto-generates ephemeral keys for... see details |
| Sole-Tenant Nodes / Instance Groups | Server Groups | MIGs offer autoscaling, autohealing, rolling updates via templates; OpenStack only scheduling policies (affinity etc.). Zonal/regional with... see details |
| Standard/Archive Snapshots | Snapshots | Crash-consistent point-in-time copies stored incrementally in Cloud Storage (geo-redundant by default), unlike Cinder snapshots which... see details |
Prerequisites#
- A Quake AI account with application credentials
- The OpenStack CLI installed and configured
- SSH access to your GCE instances
- An SSH key pair imported to Quake AI (
openstack keypair create --public-key) - For image export:
gcloudCLI installed and Cloud Build API enabled
Image portability#
GCP supports exporting custom images to QCOW2. The export pipeline, powered by Cloud Build, handles the format conversion internally, so you do not run a separate qemu-img step. Among major providers, GCP is the one whose export command produces QCOW2 output directly.
# Export directly to QCOW2
gcloud compute images export \
--image MY_CUSTOM_IMAGE \
--destination-uri gs://MY_BUCKET/MY_IMAGE_QCOW2 \
--export-format qcow2
# Download from Cloud Storage
gsutil cp gs://MY_BUCKET/MY_IMAGE_QCOW2 .
# Upload to Glance
openstack image create MY_IMAGE_NAME \
--disk-format qcow2 --container-format bare \
--file ./MY_IMAGE_QCOW2When to use image export: Use QCOW2 export for custom images with extensive baked-in software or configuration. For standard OS images, use Quake AI public images and rebuild.
Flavor mapping#
GCP machine type families map to Quake AI flavor families by their RAM-to-vCPU ratio. Standard (4:1) maps to m2a, highmem (8:1) maps to r2a, and highcpu (1:1) maps closest to c2a (though Quake AI c2a provides 2 GiB RAM per vCPU, more than GCP highcpu).
| GCP Machine Type | vCPUs | RAM (GiB) | Quake AI Flavor | vCPUs | RAM (GiB) | Notes |
|---|---|---|---|---|---|---|
| e2-micro | 2 (shared) | 1 | s1a.micro | 1 | 1 | Shared → shared; fewer vCPUs on Quake AI |
| e2-small | 2 (shared) | 2 | s1a.small | 1 | 2 | Shared → shared |
| e2-medium | 2 (shared) | 4 | s1a.medium | 2 | 4 | Close match |
| e2-standard-4 | 4 | 16 | m2a.xlarge | 4 | 16 | Exact ratio match |
| e2-standard-8 | 8 | 32 | m2a.2xlarge | 8 | 32 | Exact ratio match |
| n2-standard-2 | 2 | 8 | m2a.large | 2 | 8 | Exact ratio match |
| n2-standard-8 | 8 | 32 | m2a.2xlarge | 8 | 32 | Exact ratio match |
| n2-standard-32 | 32 | 128 | m2a.8xlarge | 32 | 128 | Exact ratio match |
| n2-highcpu-4 | 4 | 4 | c2a.xlarge | 4 | 8 | Quake AI provides 2x the RAM |
| n2-highcpu-8 | 8 | 8 | c2a.2xlarge | 8 | 16 | Quake AI provides 2x the RAM |
| n2-highmem-2 | 2 | 16 | r2a.large | 2 | 16 | Exact ratio match |
| n2-highmem-8 | 8 | 64 | r2a.2xlarge | 8 | 64 | Exact ratio match |
| c2-standard-8 | 8 | 32 | m2a.2xlarge | 8 | 32 | Exact ratio match |
GCP highcpu (1:1 ratio) is tighter than Quake AI c2a (2:1 ratio). If your workload is CPU-bound with minimal memory, c2a still fits; you get more RAM per vCPU on Quake AI, which adds headroom.
GCP also offers newer machine series (N4, C3, C3D, C4) with similar RAM-to-vCPU ratios. Apply the same ratio-based mapping: standard series (4:1) maps to m2a, highcpu series (1:1) maps to c2a, and highmem series (8:1) maps to r2a.
Migration approach#
Option 1: Containerized workloads (recommended)#
If your GCE instances run containers (or you use GKE), migrate container images and redeploy.
- Push container images from Artifact Registry to a portable registry. Google Container Registry (
gcr.io) was shut down in March 2025; Artifact Registry (pkg.dev) is the current GCP container registry:
# Pull from Artifact Registry (current GCP registry)
docker pull REGION-docker.pkg.dev/MY_PROJECT/MY_REPOSITORY/MY_APP:latest
docker tag REGION-docker.pkg.dev/MY_PROJECT/MY_REPOSITORY/MY_APP:latest \
MY_REGISTRY/MY_APP:latest
docker push MY_REGISTRY/MY_APP:latest- Provision a Nova instance on Quake AI:
openstack server create \
--image "Ubuntu-22.04" \
--flavor m2a.xlarge \
--network MY_NETWORK \
--key-name MY_KEY \
--security-group MY_SECURITY_GROUP \
MY_INSTANCE_NAME- Install Docker and deploy:
ssh ubuntu@FLOATING_IP
sudo apt update && sudo apt install -y docker.io
sudo docker pull MY_REGISTRY/MY_APP:latest
sudo docker run -d -p 80:8080 MY_REGISTRY/MY_APP:latestOption 2: Rebuild and rsync (non-containerized)#
- Provision a Nova instance with the same base OS:
openstack server create \
--image "Ubuntu-22.04" \
--flavor m2a.xlarge \
--network MY_NETWORK \
--key-name MY_KEY \
--security-group MY_SECURITY_GROUP \
MY_INSTANCE_NAME- Assign a floating IP:
openstack floating ip create PublicStatic
openstack server add floating ip MY_INSTANCE_NAME FLOATING_IP-
Install your application stack on the Quake AI instance. Reuse cloud-init configs, Ansible playbooks, or startup scripts.
-
Transfer application data from the GCE instance:
rsync -avz --progress -e "ssh -i ~/.ssh/MY_KEY" \
MY_USER@GCE_EXTERNAL_IP:/path/to/app/data \
ubuntu@FLOATING_IP:/path/to/app/data- Migrate databases:
# PostgreSQL
pg_dump -h GCE_EXTERNAL_IP -U MY_USER MY_DATABASE | \
psql -h FLOATING_IP -U MY_USER MY_DATABASE
# MySQL
mysqldump -h GCE_EXTERNAL_IP -u MY_USER -p MY_DATABASE | \
mysql -h FLOATING_IP -u MY_USER -p MY_DATABASEKey pair and security setup#
Import your SSH key#
If you already use an SSH key pair with GCE, import the public key to Quake AI:
openstack keypair create --public-key ~/.ssh/id_ed25519.pub MY_KEYOr generate a new key pair:
openstack keypair create MY_KEY > MY_KEY.pem
chmod 600 MY_KEY.pemTranslate GCP firewall rules to security groups#
GCP firewall rules support both allow and deny with priority ordering. Neutron security groups are allow-only and additive. If your security posture relies on deny rules, rethink the logic for an additive model where you allow only what is needed.
openstack security group create web-tier
openstack security group rule create web-tier \
--protocol tcp --dst-port 22 --remote-ip 0.0.0.0/0
openstack security group rule create web-tier \
--protocol tcp --dst-port 80 --remote-ip 0.0.0.0/0
openstack security group rule create web-tier \
--protocol tcp --dst-port 443 --remote-ip 0.0.0.0/0Validation checklist#
After migrating each workload, verify:
- Application responds correctly on the Quake AI instance
- All expected ports are accessible through the security group
- Data integrity: compare file checksums or row counts between source and destination
- Database connectivity from the application to any migrated databases
- DNS records updated to point to the new Quake AI floating IP
- Monitoring in place (self-managed Prometheus + Grafana to replace GCP Monitoring)
- cloud-init or startup scripts run cleanly on the new instance
- SSL/TLS certificates installed and renewed
Provider-specific gotchas#
| Topic | Detail |
|---|---|
| Egress costs | GCP bills egress per GB. Premium Tier runs steeper than AWS; Standard Tier is comparable for large transfers. See GCP network pricing. |
| Committed Use Discounts | Check for active CUDs before decommissioning. CUDs cannot be cancelled; you pay for the full commitment term (1 or 3 years) regardless of usage. Sustained Use Discounts (SUDs) are automatic and do not create a commitment, so you can decommission at any time without penalty. |
| Service accounts | GCP service accounts with workload identity have no Quake AI equivalent. Switch to OpenStack application credentials. |
| GKE workloads | GKE → self-managed K8s is the most complex migration. See the Kubernetes migration guide. |
| Firewall deny rules | GCP supports deny rules with priority. Neutron is allow-only. Rethink deny-based postures. |
| QCOW2 image export | On GCP you export custom images as QCOW2 without a manual qemu-img step; Cloud Build converts internally. |
| Custom machine types | GCP supports arbitrary vCPU/RAM ratios via custom machine types. Apply the ratio-based Quake AI flavor selection: calculate GiB per vCPU and select the family (m2a for 4:1, r2a for 8:1, c2a for 2:1, s1a for shared). |
See also#
- Migrating from GCP to Quake AI: full cross-service migration hub
- Coming from GCP: concept translation reference
- Create an instance: full instance provisioning workflow
- Compute migration guides: all provider guides
Usage Guidelines
The sample code, software libraries, command line tools, proofs of concept, templates, and other related technology on this page (including any of the foregoing that is provided by Quake AI personnel) is provided to you as Quake AI Content under the Quake AI Customer Agreement, or the relevant written agreement between you and Quake AI (whichever applies). Do not use this Quake AI Content in your production accounts, or on production or other critical data. You are responsible for testing, securing, and optimizing the Quake AI Content (such as sample code) as appropriate for production grade use based on your specific quality control practices and standards. Deploying Quake AI Content may incur Quake AI charges for creating or using Quake AI chargeable resources, such as running Compute instances or storing data in Object Storage. Your use is also subject to the Acceptable Use Policy.
Comparisons to third-party providers in this material reflect publicly documented behavior as of the validation date below. Pricing, quotas, service limits, and feature availability change frequently on every cloud. Verify provider-specific claims against the provider's own current documentation before relying on them for a procurement, architecture, or migration decision.
For the full policy, see Usage Guidelines.
Last validated: 22.06.2026
Quick answers
- Why does `openstack image save` write a 0-byte file for my boot-from-volume instance?CLI
- Why does `openstack server create` fail with "Only volume-backed servers are allowed for flavors with zero disk"?CLIAPITerraform
- Why does my project still have a 10 GiB Cinder volume after I deleted my instance?CLIAPI
See Also
Compute migration guides
Shares: Flavors, Images
Migrate from Azure Virtual Machines to Quake AI Compute
Shares: Flavors, Images
Migrate from DigitalOcean Droplets to Quake AI Compute
Shares: Flavors, Images
Migrate from AWS EC2 to Quake AI compute
Shares: Flavors, Images
Migrate from Hetzner Cloud Servers to Quake AI Compute
Shares: Flavors, Images