Skip to content

OpenStack — How It Works

Internal mechanisms, VM lifecycle, network data paths, and service interactions.

VM Provisioning Flow

sequenceDiagram
    participant User as User / Horizon
    participant KS as Keystone
    participant Nova_API as Nova API
    participant Sched as Nova Scheduler
    participant MQ as RabbitMQ
    participant Compute as Nova Compute
    participant Neutron as Neutron
    participant Glance as Glance
    participant Cinder as Cinder

    User->>KS: Authenticate (token)
    KS-->>User: Token
    User->>Nova_API: POST /servers (flavour, image, network)
    Nova_API->>KS: Validate token
    Nova_API->>Glance: Check image exists
    Nova_API->>Neutron: Allocate port
    Nova_API->>MQ: Schedule request
    MQ->>Sched: Pick host
    Sched->>Sched: Filter: RAM, CPU, disk, AZ
    Sched->>Sched: Weigh: balance, spread
    Sched->>MQ: Host selected
    MQ->>Compute: Build instance
    Compute->>Glance: Download image
    Compute->>Cinder: Attach volume (if any)
    Compute->>Neutron: Plug port → OVN
    Compute->>Compute: Launch KVM/QEMU domain
    Compute->>Nova_API: Instance ACTIVE

Neutron Networking (OVN)

flowchart TB
    subgraph Tenant["Tenant Network"]
        VM1["VM 1\n(10.0.0.2)"]
        VM2["VM 2\n(10.0.0.3)"]
    end

    subgraph OVN["OVN Data Path"]
        LS["Logical Switch\n(tenant subnet)"]
        LR["Logical Router\n(inter-subnet)"]
        GW["Gateway Router\n(external)"]
        SNAT["SNAT\n(floating IP)"]
    end

    subgraph Physical["Physical Network"]
        ExtNet["External Network\n(provider bridge)"]
    end

    VM1 --> LS
    VM2 --> LS
    LS --> LR
    LR --> GW
    GW --> SNAT
    SNAT --> ExtNet

    style OVN fill:#ef3e42,color:#fff

Ceph Integration

OpenStack Service Ceph Layer Purpose
Cinder RBD (RADOS Block Device) Persistent VM volumes
Glance RBD or RGW (Object) VM image storage
Nova RBD (ephemeral disks) Live migration enabler
Swift RGW (RADOS Gateway) S3-compatible object store
Manila CephFS Shared file systems

Multi-Region Architecture

flowchart TB
    subgraph Global["Global Services"]
        KS_G["Keystone\n(shared identity)"]
    end

    subgraph Region1["Region 1"]
        Nova1["Nova"]
        Neutron1["Neutron"]
        Cinder1["Cinder"]
        Compute1["Compute Hosts"]
    end

    subgraph Region2["Region 2"]
        Nova2["Nova"]
        Neutron2["Neutron"]
        Cinder2["Cinder"]
        Compute2["Compute Hosts"]
    end

    KS_G --> Region1
    KS_G --> Region2

Sources