Správa MetaCloudu pomocí příkazové řádky

From MetaCentrum
Jump to: navigation, search

(English version)

Před použitím příkazů je nutné se přihlásit, viz Přístup do MetaCloudu přes příkazovou řádku.

Spuštění virtuálního stroje

Výpis seznamu dostupných obrazů a templatů, ke kterým máte přístup

$ oneimage list
   ID USER       GROUP      NAME            DATASTORE     SIZE TYPE PER STAT RVMS
1704 oneadmin   metacloud  METACLOUD-Debia metacloud-    9.8G OS    No  rdy    0
1705 oneadmin   metacloud  METACLOUD-Ubunt metacloud-    9.8G OS    No  rdy    0 
1706 oneadmin   metacloud  METACLOUD-CentO metacloud-    9.8G OS    No  rdy    0
1707 oneadmin   metacloud  METACLOUD-Scien metacloud-    9.8G OS    No  rdy    0
$ onetemplate list
    ID USER            GROUP           NAME                                REGTIME
  2620 oneadmin        metacloud       METACLOUD-Debian-7.8.0-x86_  03/26 20:43:12
  2621 oneadmin        metacloud       METACLOUD-Ubuntu-14.04-x86_  03/26 20:44:02
  2622 oneadmin        metacloud       METACLOUD-CentOS-7.0.1406-x  03/26 20:44:40
  2623 oneadmin        metacloud       METACLOUD-ScientificLinux-7  03/26 20:45:21

Nyní můžete spustit instanci virtuálního stroje

$ onetemplate instantiate 2620
 VM ID: 1977

Tato instance se objeví ve výpisu bežících virtuálních strojů, důležité je pozorovat STAT pole, které dává informaci o aktuálním stavu virtuálního stroje.

$ onevm list
 ID   USER          GROUP    NAME         STAT    UCPU    UMEM   HOST         TIME
 1977 <VAS_LOGIN>   users    one-1977     pend    0       0K                  0d 00h00
$ onevm list
 ID   USER          GROUP    NAME         STAT    UCPU    UMEM   HOST         TIME
 1977 <VAS_LOGIN>   users    one-1977     runn    0       0K     dukan3.ics   0d 00h00

Po nastartování virtuálního stroje ("runn" ve sloupci STAT, veškeré STAT možnosti popsány níže na stránce) si vypíšete detailní informace o tomto stroji následovně

$ onevm show 1977
 VIRTUAL MACHINE 1977 INFORMATION 
 -----------------------------
 ...
 NIC = [
   BRIDGE        = "onebr0",
   IP            = <IP_ADRESA_VM>,      # adresa pro SSH spojeni s VM
   MAC           = "02:00:c0:a8:fe:03",
   NETWORK       = "public",
   NETWORK_UNAME = "oneadmin",
   NETWORK_ID    = "1"
 ]
 ...

Změna user-data

Pokud potřebujete změnit user-data (viz Kontextualizace VM), můžete je buď změnit přímo v template, což je nepohodlné, nebo příkazu pro instanciaci dát další parametr:

onetemplate instantiate --name "My Ubuntu" 2772 my_context.txt

kde obsahem souboru my_context.txt musí být nový obsah položky CONTEXT v template, např.:

CONTEXT=[
  EMAIL="$USER[EMAIL]",
  PUBLIC_IP="$NIC[IP]",
  SSH_KEY="$USER[SSH_KEY]",
  TARGET="vdb",
  TOKEN="YES",
  VM_GID="$GID",
  VM_GNAME="$GNAME",
  VM_ID="$VMID",
  VM_UID="$UID",
  VM_UNAME="$UNAME",
  USERDATA_ENCODING="base64",
  USER_DATA="____base64_encoded_userdata___"
]

kde ____base64_encoded_userdata___ jsou user-data zakódovaná pomocí base64.

Tedy spuštění se dá udělat skriptem vypadajícím nějak takto:

#!/bin/bash

USER_DATA_FILE=user_data.yaml
CONTEXT_FILE=/tmp/ctx.$$
TEMPLATE_ID=2941

echo "starting virtual image OpenNebula using custom user-data"

if [ ! -f "$USER_DATA_FILE" ] ; then
  echo "file $USER_DATA_FILE not found"
  exit 1
fi

cat >$CONTEXT_FILE <<"EOF"
CONTEXT=[
  EMAIL="$USER[EMAIL]",
  PUBLIC_IP="$NIC[IP]",
  SSH_KEY="$USER[SSH_KEY]",
  TARGET="vdb",
  TOKEN="YES",
  VM_GID="$GID",
  VM_GNAME="$GNAME",
  VM_ID="$VMID",
  VM_UID="$UID",
  VM_UNAME="$UNAME",
  USERDATA_ENCODING="base64",
EOF
echo >>$CONTEXT_FILE -n '  USER_DATA="'
base64 >>$CONTEXT_FILE -w 0 $USER_DATA_FILE
cat >>$CONTEXT_FILE <<EOF
"
]
EOF
onetemplate instantiate -v $TEMPLATE_ID $CONTEXT_FILE

Správa Metacloudu

Uvedeme seznam všech programů implementujících ONE API. Každý příkaz je možno podrobně prostudovat vypsáním nápovědy přepínačem -h. Dále jsou uvedeny důležité příkazy pro práci s MetaCloudem s pomocí opennebula-cli. Význam intuitivně vyplývá.

  • oneuser: přihlašování, správa profilu uživatele
  • onedatastore: listování dostupných úložisk
  • oneimage: přidávání, odebírání a správa obrazů
  • onetemplate: přidávání, odebírání a správa obrazů templatů virt. strojů
  • onevm: tvorba, kontrola a monitoring virt. strojů
  • onevnet: listování dostupných sítí

Správa templatů virtuálních strojů:

Výpis dostupných templatů

$ onetemplate list
    ID USER            GROUP           NAME                                REGTIME
  2620 oneadmin        metacloud       METACLOUD-Debian-7.8.0-x86_  03/26 20:43:12
  2621 oneadmin        metacloud       METACLOUD-Ubuntu-14.04-x86_  03/26 20:44:02
  2622 oneadmin        metacloud       METACLOUD-CentOS-7.0.1406-x  03/26 20:44:40
  2623 oneadmin        metacloud       METACLOUD-ScientificLinux-7  03/26 20:45:21

Spuštění virtuálního stroje

$ onetemplate instantiate 2620 --name Instance-METACLOUD-Debian-7.8.0-x86_64
 VM ID: 1977

Můžete si taktéž vytvořit vlastní template a nahrát do databáze MetaCloudu

$ cat Custom-METACLOUD-Debian-7.8.0-x86_64.one
#---------------------------------------
# VM definition example
#--------------------------------------- 

CONTEXT=[EMAIL="$USER[EMAIL]",PUBLIC_IP="$NIC[IP]",SSH_KEY="$USER[SSH_KEY]",TARGET="vdb",TOKEN="YES",USER_DATA="#cloud-config
# see https://help.ubuntu.com/community/CloudInit

bootcmd:
- test -L /etc/motd && unlink /etc/motd || /bin/true

runcmd:
- unlink /etc/nologin || /bin/true

mounts:
- [vdc,none,swap,sw,0,0]
- [vdd,/scratch,ext3,defaults,2,0]

write_files:
- path: /etc/nologin
  content: |2
    
      *** Initial configuration by cloud-init is in progress. Please wait. ***
- path: /etc/motd
  content: |2
                                   cccccccc
                                 ::       :::
                               :c            c:
                               c              c::
                           ::::c:             :  :::
               :::::::::::c:     :                :c:::::::::::
             :::          :                      ::            :::
            c:   __  __      _         ____ _                 _  :c
       :::::c:  |  \/  | ___| |_ __ _ / ___| | ___  _   _  __| |   c
     :::        | |\/| |/ _ \ __/ _` | |   | |/ _ \| | | |/ _` |  :::::::
    c           | |  | |  __/ || (_| | |___| | (_) | |_| | (_| |        ::
    c           |_|  |_|\___|\__\__,_|\____|_|\___/ \__,_|\__,_|         c
     :::                                                          :     c:
        ::::c:               cloud@metacentrum.cz      :        :cc:::::
              :::c                                    :c:::::::::
                 ::::::::::            ::          :::
                          :::::      :::::::::::::::
                              ccccccc:

# sysadmin's master access key
ssh_authorized_keys:
- ssh-dss AAAAB3NzaC1kc3MAAACBAJIwhyfTXj6LeaF5adEINIsRawjlYE8vi1rHK9lb3fC0J+58NSL7mRx5zX0r+HPfnyYptciIG9uh0s7RRRu5c6MHPU5L4Vh7CrAT9SkKg7XmdkfNC6k6a6Dpq2hntwEUjxHvaNbuQA+FtiMEYT3M1/RBR6TdvmEFN2FMcHox5L3zAAAAFQC7Uu5YO5vIVRF80LJ2i7TAqYR3FwAAAIB3ioZ1nxwhYatpdIIaLbK8Za+fFzYT3sObea2jzEItGHVK/smyA4CcMw+54clCx726+0DF9nRnoQUWsh0hYGGdo3s5aPMksX+pqE+w0Nv94osVc+3RkixUjPiNnTLWYcZ/o228Du+FpN1o7AtoGYoQgnL/ZDCwyLWJSApdoAJu0AAAAIAIMihuKkNKHPvgVzJNAAtX+10LH7EAA/iY1wBnotLZ+e1doOCOcqnYw/ULJfBYWx9vMle4cPg8o7yioDn/SfO+GUwQNkr2Z1XkmLwmdWVdCeLgbor2hswyZmS7jF8CvdwMHxKD8ve/RrHkyBUkVxiUUnYT8MmInouPGfdmgR5Wow== cloud-support@metacentrum.cz

power_state:
  mode: reboot
  message: Initial configuration done by cloud-init, forcing reboot to apply changes.


",VM_GID="$GID",VM_GNAME="$GNAME",VM_ID="$VMID",VM_UID="$UID",VM_UNAME="$UNAME"]
CPU="0.25"
DISK=[DEV_PREFIX="vd",IMAGE="METACLOUD-Debian-7.8.0-x86_64-201503272153@metacloud-dukan",IMAGE_UNAME="oneadmin"]
DISK=[DEV_PREFIX="vd",SIZE="2048",TYPE="swap"]
DISK=[DEV_PREFIX="vd",FORMAT="ext3",SIZE="20480",TYPE="fs"]
LOGO="images/logos/debian.png"
MEMORY="2048"
NIC=[NETWORK="metacloud-brno-public",NETWORK_UNAME="oneadmin"]
RAW=[DATA="<!-- RAW data follows: --><cpu mode='host-model'></cpu> <devices><serial type='pty'><target port='0'/></serial><console type='pty'><target type='serial' port='0'/></console> <channel type='pty'><target type='virtio' name='org.qemu.guest_agent.0'/></channel></devices>",TYPE="kvm"]
SCHED_REQUIREMENTS="(HYPERVISOR=\"kvm\") & (CLUSTER=\"metacloud-dukan\")"
VCPU="1"

$ onetemplate create Custom-METACLOUD-Debian-7.8.0-x86_64.one
 ID: 583

Nebo vytvořit kopii už dostupného templatu a následně ji upravit

$ onetemplate clone 2620 MyTemplate
 ID: 584
$ onetemplate update 584

Správa obrazů virtuálních strojů:

Výpis dostupných obrazů

$ oneimage list
   ID USER       GROUP      NAME            DATASTORE     SIZE TYPE PER STAT RVMS
1704 oneadmin   metacloud  METACLOUD-Debia metacloud-    9.8G OS    No  rdy    0
1705 oneadmin   metacloud  METACLOUD-Ubunt metacloud-    9.8G OS    No  rdy    0 
1706 oneadmin   metacloud  METACLOUD-CentO metacloud-    9.8G OS    No  rdy    0
1707 oneadmin   metacloud  METACLOUD-Scien metacloud-    9.8G OS    No  rdy    0

Do MetaCloudu si můžete nahrát i vlastní obrazy nebo vytvořit kopii některého z připravných obrazů.

$ oneimage clone 1704 MyImage
 ID: 371

Vlastnímu obrazu můžete následně nastavit jeho perzistenci.

$ oneimage persistent 371
$ oneimage nonpersistent 371

Na perzistentním obrazu zůstávají data uložena i po vypnutí virtuálního stroje a lze z něj vytvořit pouze jedna instance. Na neperzistentním obrazu data uložená nezůstávají, zato může být vytvořeno více instatncí virtuálních strojů s tímto obrazem. Pro příklad využití viz. Příklad práce s cloudem

Správa virtuálních strojů:

$ onevm list
 ID   USER            GROUP    NAME            STAT    CPU     MEM              HOSTNAME           TIME
  0   <VAS_LOGIN>     users    DebianVM        pend      0      0K                          00 00:00:03
$ onevm list
 ID   USER            GROUP    NAME            STAT    CPU     MEM              HOSTNAME           TIME
  0   <VAS_LOGIN>     users    DebianVM        runn      0      0K    dukan1.ics.muni.cz    00 00:02:40
$ onevm suspend 0
$ onevm list
 ID          USER     GROUP    NAME            STAT    CPU     MEM              HOSTNAME           TIME
  0   <VAS_LOGIN>     users    DebianVM        susp      0    512K    dukan1.ics.muni.cz    00 00:11:13
$ onevm resume 0
$ onevm list
 ID          USER     GROUP    NAME            STAT    CPU     MEM              HOSTNAME           TIME
  0   <VAS_LOGIN>     users    DebianVM        runn      0    512K    dukan1.ics.muni.cz    00 00:15:13
$ onevm stop 0
$ onevm list
 ID          USER     GROUP    NAME            STAT    CPU     MEM              HOSTNAME           TIME
  0   <VAS_LOGIN>     users    DebianVM        stop      0    512K    dukan1.ics.muni.cz    00 00:32:13
$ onevm resume 0
$ onevm list
 ID          USER     GROUP    NAME            STAT    CPU     MEM              HOSTNAME           TIME
  0   <VAS_LOGIN>     users    DebianVM        pend      0    512K    dukan1.ics.muni.cz    00 00:34:13

Pro úplnost je třeba uvést přesný výčet možných stavů virtuálního stroje, detailně popsán v dokumentaci

*Pending (pend): Čeká na prostředky a na vlastní spuštění
*Hold (hold): Pozastaveno vlastníkem, do uvolnění nelze spouštět
*Prolog (prol): Systém kopíruje obraz do výpočetního stroje
*Running (runn): Virtuální stroj nastartoval, od nyní je i monitorován
*Migrate (migr): Stroj je právě migrován
*Epilog (epil): Ukončení činnosti virt. stroje, čištění výpočetního stroje, přenos dat do úložiště
*Stopped (stop): Pozastaveno, data jsou přenášena zpátky do úložiště
*Suspended (susp): Pozastaveno, data jsou ponechána na výpočetním stroji
*Failed (fail): Vyskytla se chyba v běhu virt. stroje.
*Unknown (unknown): Stav není znám
*Done (done): Virt. stroj není vidět ve výpisu a je uchováván z databázových důvodů

Firewall

Funkci firewallu pro jednotlivé virtuální stroje plní bezpečnostní skupiny. Jejich použití dokumentuje samostatný návod Bezpečnostní nastavení - Security Groups.

Správa disků

Nové disky můžou být připojeny k běžící VM pomocí onevm attachdisk, nebo odpojeny pomocí onevm detachdisk. Např. pro připojení obrazu “storage” k běžícímu stroji:

$ onevm attachdisk one-5 --image storage

Pro odpojení disku z běžícího stroje, najděte ID obrazu disku, který chcete odpojit pomocí onevm show, a pak jednoduše proveďte příkaz onevm detach vm_id disk_id:

$ onevm show one-5
...
DISK=[
  DISK_ID="1",
...
  ]
...

$ onevm detachdisk one-5 1