# From Zero to Your First VM: A Hands-On ZSvirt Deployment Guide

> A hands-on tutorial for administrators new to ZSvirt: install from the ISO, deploy the management node, initialize the datacenter, add hosts/storage/images/networks, and create your first VM.

- Published: 2026-08-11
- Updated: 2026-08-11
- Author: [ZSvirt Team](https://github.com/ZSvirt)
- Category: Best Practice
- Tags: ZSvirt, Virtualization, Deployment, ZSvirt quick start, ZSvirt installation guide, create a VM, private cloud deployment, VMware alternative

If you're evaluating ZSvirt, the fastest way to learn it isn't reading the entire user manual — it's **getting a VM running with your own hands**.

This tutorial walks you through a minimal end-to-end path: install the management node → initialize the platform → add hosts, storage, networks, and images → create your first VM and log in to it. The whole process takes about 30-40 minutes (excluding image download time). When you're done, you'll have a VM that can reach the internet and open a console — which means every core platform link is working.

<figure class="blog-demo-video" data-home-demo-video="fastDeployment">
  <video controls playsinline preload="none" poster="/images/reference-home/demo-fast-deployment-cover.svg" aria-label="ZSvirt fast deployment demo video" width="1280" height="720">
    <source src="https://oss.zstack.io/product_downloads/ZSvirt/video/Install%20ZSvirt.mp4" type="video/mp4" />
    Your browser does not support video playback. <a href="https://oss.zstack.io/product_downloads/ZSvirt/video/Install%20ZSvirt.mp4">Open the fast deployment video directly</a>.
  </video>
  <figcaption>ZSvirt fast deployment demo: the complete path from installation to a working platform.</figcaption>
</figure>

> Note: low-level command and API names still use legacy fields such as `zstack-ctl`, `zstack-cli`, PrimaryStorage, and BackupStorage. These are command-layer names and don't affect platform operations.

## Before You Start: One Server Is Enough

The minimal setup is All-in-One: a single server acts as both the management node and a compute node. The hardware bar is low:

| Item | Minimum | Recommended |
| --- | --- | --- |
| CPU | Intel VT or AMD-V, at least 8 cores | 24 cores or more |
| Memory | 8 GB | 24 GB or more |
| System disk | 100 GB | 200 GB or more |
| NIC | 1 management NIC | Separate management, storage, and service networks |
| IP | Static IP | Static IP with DNS/NTP configured in advance |

Two easily overlooked points:

- **Don't use DHCP.** The management node IP is written into the platform configuration during installation, and changing it later is painful.
- **Sync the system time.** If the management node's clock is earlier than the installation package's build time, the installer will fail outright — this is the first pit most newcomers hit.

Also prepare the ISO installation media: `ZSvirt-x86_64-DVD-<version>-h84r.iso`. You can boot from a physical optical drive, a USB stick, or an ISO mounted via the server's remote console. For USB creation we recommend Rufus or Fedora Media Writer — both support Legacy and UEFI boot.

## Step 1: Install the Management Node from the ISO

Boot from the ISO and the installer enters **Install ZSVirt** by default — no manual selection needed. You'll land on the **INSTALLATION SUMMARY** screen:

[Image available on the canonical HTML page: Booting from the ISO](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

[Image available on the canonical HTML page: INSTALLATION SUMMARY screen](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

Complete the four configuration items in order:

**1. Installation Destination (system disk)**: select a disk as the system disk and click **Done**.

[Image available on the canonical HTML page: Selecting the system disk](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

**2. Software Selection (installation mode)**: choose **ZSvirt Management Node** and click **Done**.

[Image available on the canonical HTML page: Selecting the ZSvirt Management Node installation mode](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

**3. Network & Host Name**: click **Configure...** to open the NIC settings, switch **IPv4 Settings** > **Method** to **Manual**, click **Add**, and fill in your planned IP, netmask, and gateway:

[Image available on the canonical HTML page: Configuring the ens3 IPv4 address](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

Don't forget to enable **Connect automatically with priority (0)** on the **General** tab — otherwise the NIC won't come up after reboot:

[Image available on the canonical HTML page: Enabling automatic NIC activation](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

**4. Root Password**: enter the root password twice and click **Done**.

[Image available on the canonical HTML page: Setting the root password](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

Once all four items are ready, click **Begin Installation**. The installation takes about 10 minutes; the system then reboots automatically and continues installing the ZSvirt management node service:

[Image available on the canonical HTML page: Beginning the installation](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

[Image available on the canonical HTML page: Automatic management node service installation](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

When the system enters the TUI and **both MN and UI show Running**, the management node is ready:

[Image available on the canonical HTML page: TUI showing MN and UI as Running](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

If you want extra assurance, log in and run two quick checks:

```bash
zstack-ctl status
zstack-ctl show_configuration | grep management.server.ip
```

If the installation fails, check `/tmp/zstack_installation-*.log` first; for Web UI issues, look at `/usr/local/zstack/zstack-ui/logs/ui-install.log`.

## Step 2: Initialize the Platform

Point your browser at the **management node IP** and log in with the default credentials **admin/password**:

[Image available on the canonical HTML page: Logging in to the ZSvirt management platform](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

> ⚠️ In production, always change the default password immediately after your first login. It's a good habit even in test environments.

On first login, the platform guides you through creating a datacenter and a cluster. QuickStart only needs one of each: name the datacenter **Datacenter-1** and the cluster **Cluster-1**:

[Image available on the canonical HTML page: Creating a datacenter](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

[Image available on the canonical HTML page: Creating a cluster](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

Conceptually, a datacenter hosts a group of compute, storage, and network resources, while a cluster organizes hosts, datastores, and distributed switches. Create them first — everything else attaches underneath.

## Step 3: Add the Management Node as a Host

The All-in-One trick is to add the management node itself as a host. Enter a name, the IP address (the management node IP), and the root password, click **OK**, and wait until the host shows as connected:

[Image available on the canonical HTML page: Adding a host](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

If this step fails, nine times out of ten it's SSH connectivity or a wrong root password — test manually with `ssh root@<host IP>` first.

## Step 4: Add a Datastore and Image Storage

VM disks live on datastores; system images live on image storage. You need both.

**Datastore**: for testing, a local datastore is fine. Enter a name and a mount path (don't reuse the system root or a temp directory), then click **OK**:

[Image available on the canonical HTML page: Adding a datastore](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

> Note: local datastores work for single-host verification but can't do cross-host migration. To try live migration later, switch to shared storage that all hosts can access.

**Image storage**: enter a name, the image storage IP (again the management node IP), and the password, click **Test Connection**, select **Local Directory**, and click **OK**:

[Image available on the canonical HTML page: Adding image storage](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

Then add a system image (qcow2 or raw). For testing, the defaults are fine — just click **OK**. The system automatically provisions a test image, `ZStack-image-1.4`, which you can use right away to verify VM creation:

[Image available on the canonical HTML page: Adding an image](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

Import speed depends on the network path between the image storage, management node, hosts, and datastores, so be patient with large images. If it fails, first confirm the platform can read the image URL or local path (`curl -I <image URL>` or `qemu-img info <image file>` are handy).

## Step 5: Create the Network

Create a distributed switch and a distributed port group. Using vlan-2344 as an example, configure the VLAN ID, IP allocation method, and DNS, then click **OK**:

[Image available on the canonical HTML page: Creating a distributed switch and port group](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

A few tips:

- For quick verification, **enable IP address management and DHCP** so VMs get IPs automatically.
- Don't let the network segment overlap the gateway, DHCP service IP, or existing service addresses — this is the second most common pit, and it's why most "VM got no IP" reports happen.
- All hosts in the cluster need a physical interface or bond with the same name; when using VLANs, the switch-side trunk/access configuration must match the platform.

## Step 6: Create Your First VM

Click **Create VM**, enter a name, select the **system image** you just imported for disk 1, pick **NIC 1**, and confirm:

[Image available on the canonical HTML page: Creating a VM](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)

When the VM shows as Running and the console reaches a login screen, you're most of the way there.

Log in to the guest and run a quick verification:

```bash
ip addr
ip route
ping -c 4 <gateway IP>
ping -c 4 223.5.5.5
ping -c 4 www.baidu.com
```

Reading the results is simple:

- **Gateway reachable** → distributed switch, port group, DHCP, and VLAN are all working;
- **External IP reachable** → upstream routing works;
- **Domain resolves and responds** → DNS works.

## Step 7: Double-Check via CLI (Optional)

If you prefer the command line, run a full-chain health check on the management node:

```bash
zstack-cli
```

```text
LogInByAccount accountName=admin password=<admin password>

QueryHost fields=uuid,name,managementIp,state,status
QueryPrimaryStorage fields=uuid,name,type,state,status,availableCapacity,totalCapacity
QueryBackupStorage fields=uuid,name,type,state,status,availableCapacity,totalCapacity
QueryL3Network fields=uuid,name,type
QueryImage fields=uuid,name,state,status
QueryVmInstance name=vm-test-01 fields=uuid,name,state,hostUuid,vmNics
```

Expected output:

```text
Host state=Enabled status=Connected
PrimaryStorage state=Enabled status=Connected
BackupStorage state=Enabled status=Connected
Image state=Enabled status=Ready
VmInstance state=Running
```

If everything matches, the compute-storage-network-image-VM chain is fully working.

## Troubleshooting Cheat Sheet

| Symptom | Check first |
| --- | --- |
| Installation script exits | System time, root privileges, `/tmp/zstack_installation-*.log` |
| Failed to add host | SSH connectivity, root password, time sync, firewall |
| Failed to add image | Image URL readability, image format, free image storage capacity |
| VM gets no IP | Segment overlapping gateway/reserved addresses, DHCP enabled |
| Console won't open | `zstack-ctl status`, browser certificate |

For a more complete list, see the [installation docs](https://zsvirt.io/en/docs/install-zsphere/).

## What's Next

Once the minimal environment works, continue in this order:

1. **Change the default password** and create individual admin accounts;
2. **Configure NTP** so the management node, hosts, and storage share the same time;
3. Switch the local datastore to **shared storage** and try cross-host live migration;
4. Build standard **Linux/Windows template images** and install VMTools for complete in-guest monitoring;
5. When you need dual-node high availability, see the HA chapter of the [Installation and Upgrade Tutorial](https://zsvirt.io/en/docs/install-zsphere/).

A fully illustrated step-by-step reference is also available on the [Quick Start](https://zsvirt.io/en/docs/quick-start/) docs page.

If you run into issues during deployment, feel free to open an issue or join the discussion in the [GitHub community](https://github.com/ZSvirt).

## Official links


- [Canonical HTML page](https://zsvirt.io/blog/zsvirt-quickstart-deploy-your-first-vm/)
- [Discuss on GitHub](https://github.com/ZSvirt/zsvirt/discussions)
