Project

General

Profile

Actions

Ucloud » History » Revision 4

« Previous | Revision 4/16 (diff) | Next »
Ahmed Bilal, 07/02/2019 09:17 AM


ucloud (To Be Continued)

Requirements
1. Python 3.7, pip, pipenv
2. etcd
3. ceph

ucloud-api

Outside world (indirect) communication with the internal systems.

Its responsibilities are
  • Create VM (Done) POST /vm/create
    {
        "name": "username",
        "realm": "user_realm",
        "seed": "user_seed",
        "specs": {
            "cpu": 16,
            "ram": 256,
            "hdd": 2000,
            "ssd": 256
        }
    }
    
  • Delete VM (Done) POST /vm/delete
    {
        "name": "username",
        "realm": "user_realm",
        "seed": "user_seed",
        "vmid": "id_of_virtual_machine" 
    }
    
  • Status VM (Done) GET /vm/status
    {
        "id": "id_of_virtual_machine" 
    }
    
  • Create new network
  • Attach network to VM
  • Detach network from VM
  • Delete network

ucloud-scheduler

It schedules/reschedules VM that are created using ucloud-api. How does it schedules? It does by watching any changes under the /v1/vm/ prefix. Basically, it deals with two ETCD entries

1. Virtual Machines Entries that looks like

/v1/vm/1
{
  "owner": "ahmedbilal-admin",
  "specs": {
    "cpu": 20,
    "ram": 2,
    "hdd": 10,
    "ssd": 10
  },
  "hostname": "",
  "status": "REQUESTED_NEW" 
}

2. Hosts Entries that look like
/v1/host/1
{
    "cpu": 32,
    "ram": 128,
    "hdd": 1024,
    "ssd": 0
    "status": "UP" 
}

It loop through list of host entries found under /v1/host/ and check whether we can run the incoming VM on that host. if we can, then it (ucloud-scheduler) sets the hostname key of incoming VM to that host. Suppose, our scheduler decides that we can run the earlier shown VM /v1/vm/1 on /v1/host/1. Then, our updated entry would look like

/v1/vm/1
{
  "owner": "ahmedbilal-admin",
  "specs": {
    "cpu": 20,
    "ram": 2,
    "hdd": 10,
    "ssd": 10
  },
  "hostname": "/v1/host/1",
  "status": "REQUESTED_NEW" 
}

Note the hostname key/value pair.

ucloud-vm
It is responsible for creating (running) / deleting (stopping) / monitoring virtual machines

It watches the /v1/vm/ prefix for any changes like (Virtual Machines with status like SCHEDULED_DEPLOY or REQUEST_DELETE.

On, SCHEDULED_DEPLOY it creates the VM and run it. On, REQUEST_DELETE it stops the VM.

It is also responsible for monitoring VM statues i.e whether they are RUNNING or KILLED (in action). If a VM is killed we put that in log file, notify system administrator and restart it.

Updated by Ahmed Bilal over 5 years ago · 4 revisions