hp helion openstack lab guide ČÁst druhÁ – pokroČilÉ

43
HP Helion OpenStack 1.1 Květen 2014 Tomáš Kubica Dokument verze 0.13 HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

Upload: others

Post on 06-Feb-2022

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

HP Helion OpenStack 1.1

Květen 2014

Tomáš Kubica

Dokument verze 0.13

HP HELION OPENSTACK LAB GUIDE

ČÁST DRUHÁ – POKROČILÉ

Page 2: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

1 | H P H e l i o n O p e S t a c k

Obsah 1. Úvod do pokročilého ovládání Helion OpenStack ................................................................................ 2

1.1. Jdeme za rámec základní práce aneb proč automatizovat automatizované ................................ 2

1.2. Jak (a proč) se posunout z pouhé automatizované infrastruktury blíže k potřebám aplikací? .... 2

2. Příkazová řádka ..................................................................................................................................... 3

2.1. Proč příkazovou řádku?................................................................................................................. 3

2.2. OpenStack CLI ............................................................................................................................... 3

2.3. Přihlášení ....................................................................................................................................... 5

2.4. První kroky v příkazové řádce ....................................................................................................... 6

2.5. Pokročilejší operace v příkazové řádce ....................................................................................... 10

2.6. Praktický příklad skriptu .............................................................................................................. 16

3. Lidsky čitelné datové formáty ............................................................................................................. 19

3.1. YAML ........................................................................................................................................... 19

3.2. JSON ............................................................................................................................................ 20

4. Orchestrační šablony OpenStack Heat................................................................................................ 20

4.1. Nejjednodušší šablona ................................................................................................................ 20

4.2. Komplexnější šablona ................................................................................................................. 25

4.3. Heat autoscaling a autohealing ................................................................................................... 31

5. OpenStack API ..................................................................................................................................... 31

6. Úvod do orchestrace s HP Cloud Service Automation ........................................................................ 35

7. Starejme se o vnitřek VM s Ansible .................................................................................................... 35

7.1. K čemu je to dobré? .................................................................................................................... 35

7.2. Ansible ......................................................................................................................................... 35

7.2.1 Instalace .............................................................................................................................. 35

7.2.2 Příprava labu ....................................................................................................................... 36

7.2.3 Základní operace ................................................................................................................. 39

7.2.4 Názorný příklad – web server ............................................................................................. 40

7.3. HP Server Automation ................................................................................................................ 41

8. HP Helion Development Platform ....................................................................................................... 41

9. Shrnutí a závěr .................................................................................................................................... 41

10. Další zdroje ...................................................................................................................................... 41

Page 3: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

2 | H P H e l i o n O p e S t a c k

1. Úvod do pokročilého ovládání Helion OpenStack

1.1. Jdeme za rámec základní práce aneb proč automatizovat automatizované V první části labu jsme si vyzkoušeli práci s Helion OpenStack přes jeho GUI. Dokázali jsme z jednoho

nástroje rychle a efektivně vytvářet potřebné zdroje na úrovni virtuálních serverů, storage, sítí i

bezpečnosti, a to všechno řízeným způsobem spojovali do výsledné infrastruktury na vyžádání. Proč

bychom vůbec chtěli nad takovým systémem dělat ještě něco dalšího?

Představte si následující situace:

Máte komplexní aplikaci složenou z různých vrstev a komponent, má specifické nároky pro

každou část z pohledu paměti, CPU, storage, jsou definovaná komunikační pravidla, označen

backend a frontend a tak podobně. Jak bychom mohli pro své kolegy takovou infrastrukturu

popsat? Screenshoty z GUI? Nešlo by to nějak lépe?

Potřebujete dávkově vytvořit nějaké infrastrukturní prostředí, například založit 30 projektů,

spustit 30 různě velkých VM nebo promazat nepoužívané sítě? Přece to nebudete klikat...

Co když dostanete zadání infrastrukturních požadavků ve formě excel tabulky s názvy serverů?

Co když budete potřebovat založit infrastrukturu na základě informací z jiného systému? Budete

muset vzít nějakou tiskovou sestavu a naklikat to v GUI?

Možná máte nějaké opakující se úkony, které ovšem vyžadují dosazení nějakých parametrů.

Budete infrastrukturu pokaždé ručně naklikávat a vždy změníte jen těch pár parametrů?

GUI Helion OpenStack je poněkud technické, možná by bylo dobré nabídnou nějaký katalag

služeb, kde si uživatel jen vybere z katalogu možností – chci nový blog server, nový sharepoint,

novou QA infrastrukturu, Development prostředí pro vývoj v Javě.

Přesně v těchto momentech je vhodné nad Helion OpenStack budovat další vrstvu automatizace a

abstrakcí – a to i pokud se stále jedná jen o infrastrukturu na vyžádání. Jaké máte prostředky?

OpenStack CLI

OpenStack Heat šablony

OpenStack API a například Python

HP Cloud Service Automation ... to je zlatý hřeb !

O tom všem v tomto labu.

1.2. Jak (a proč) se posunout z pouhé automatizované infrastruktury blíže k potřebám

aplikací? Infrastruktura je palivo, aplikace jsou auta. Aplikace jsou to, co má blízko k byznysu a přináší zásadní

hodnotu. Téměř každý nový byznysový projekt dnes potřebuje podporu IT, ať už kvůli realizaci, sběru

dat, marketingu, řízení vztahů, výroby, dodávek. Prakticky vždy tato hodnota dříme v nějaké aplikaci.

Teprve tu je potřeba někam umístit – do nějaké platformy (aplikačního prostředí) a tu do infrastruktury.

My ovšem v dnešním labu nebudeme příliš zacházet do oblastí PaaS (to si necháme na jindy), ale i

v rámci IaaS dává smysl se OS, aplikačnímu prostředí a třeba i vlastním aplikacím věnovat. Tak například

jak to zařídit, abyste měli image (šablonu) nějaké instance, a přitom byla jistota, že po jejím nasazením

bude obsahovat všechny nejnovější security patche, budou tam nainstalovány potřebné balíčky pro

nejnovější verzi aplikace a tak podobně? Určitě nechcete po naběhnutí šablony pokaždé znovu

Page 4: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

3 | H P H e l i o n O p e S t a c k

procházet kompletní proces aktualizací a instalací balíčků a prostředí či modifikace konfiguračních

souborů apod. Stejně tak nechcete váš image přetvářet každý měsíc tak, aby obsahoval potřebné

aktualizace. Pravděpodobně sáhnete po nějakém způsobu jak automatizovaným způsobem tyto potřeby

zajišťovat. V dnešním labu si vyzkoušíte:

Ansible (open source)

HP Server Automation ... to je zlatý hřeb !

2. Příkazová řádka

2.1. Proč příkazovou řádku? V předchozí části labu jsme se soustředili na ovládání skrze grafické rozhraní. Proč tedy vůbec má smysl

znát příkazovou řádku?

Příkazová řádka je open source a využívá OpenStack API, takže funguje stejně v různých

modifikací OpenStack od různých výrobců – to co se naučíte se vám hodí v mnoha situacích

V některých operacích je příkazová řádka rychlejší

Ovládat infrastrukturu můžete i z minimálního systému bez grafického prostředí

Příkazy můžete skriptovat, tedy vytvářet jednoduché „aplikace“, které dávkovým způsobem

budou provádět nějaké operace nebo provádět pravidelné záležitosti (například sestavíte nějaké

demo prostředí, které dáte k rozbití a po ukončení takové session skriptem vrátíte demo do

původního stavu)

Některé funkce jsou dostupné pouze tímto způsobem – běžný vývoj je, že nová funkce je jako

první k dispozici v příkazové řádce a později v grafickém interface

Pokročilejší uživatel by tedy měl CLI znát, stojí to za to.

2.2. OpenStack CLI OpenStack příkazová řádka je ve skutečnosti soubor open source aplikací napsaných v jazyce Python,

který využívá OpenStack API. Jde tedy o CLI wrapper, čili textové rozhraní nad OpenStack RESTful API.

Tyto aplikace můžete používat kdekoli, z jakéhokoli počítače s podporou Python (samotné aplikace si

nainstalujete přes pip, v případě ubuntu jsou dostupné i jako apt-get balíčky).

Aplikace mají jména podle názvů jednotlivých projektů:

Nova (práce s instancemi)

Cinder (práce s blokovou storage, tedy volume, snapshot apod.)

Glance (práce s image)

Swift (práce s objektovou storage)

Neutron (síťařina)

Keystone (jména, hesla, identity)

Heat (orchestrační šablony)

Jsou i další, ale pro lab je nebudeme potřebovat

Obvykle se příkaz volá způsobem:

nova operace poziční_parametr další_parametry (označené jako --parametr hodnota)

Page 5: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

4 | H P H e l i o n O p e S t a c k

Tak například to může vypadat takhle:

nova boot mojeVM --image Windows –flavor m1.tiny

Často můžete požádat o pomoc, například:

tomas@helion-ProLiant-DL380-Gen9:~$ nova help

usage: nova [--version] [--debug] [--os-cache] [--timings]

[--timeout <seconds>] [--os-auth-token OS_AUTH_TOKEN]

[--os-username <auth-user-name>] [--os-password <auth-password>]

[--os-tenant-name <auth-tenant-name>]

[--os-tenant-id <auth-tenant-id>] [--os-auth-url <auth-url>]

[--os-region-name <region-name>] [--os-auth-system <auth-system>]

[--service-type <service-type>] [--service-name <service-name>]

[--volume-service-name <volume-service-name>]

[--endpoint-type <endpoint-type>]

[--os-compute-api-version <compute-api-ver>]

[--os-cacert <ca-certificate>] [--insecure]

[--bypass-url <bypass-url>]

<subcommand> ...

Command-line interface to the OpenStack Nova API.

Positional arguments:

<subcommand>

absolute-limits Print a list of absolute limits for a user

add-fixed-ip Add new IP address on a network to server.

add-floating-ip DEPRECATED, use floating-ip-associate instead.

add-secgroup Add a Security Group to a server.

agent-create Create new agent build.

...

Nebo o detaily konkrétní operace

tomas@helion-ProLiant-DL380-Gen9:~$ nova help boot

usage: nova boot [--flavor <flavor>] [--image <image>]

[--image-with <key=value>] [--boot-volume <volume_id>]

[--snapshot <snapshot_id>] [--num-instances <number>]

[--meta <key=value>] [--file <dst-path=src-path>]

[--key-name <key-name>] [--user-data <user-data>]

[--availability-zone <availability-zone>]

[--security-groups <security-groups>]

[--block-device-mapping <dev-name=mapping>]

[--block-device key1=value1[,key2=value2...]]

[--swap <swap_size>]

[--ephemeral size=<size>[,format=<format>]]

[--hint <key=value>]

[--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,port-id=port-uuid>]

[--config-drive <value>] [--poll]

<name>

Boot a new server.

Positional arguments:

<name> Name for the new server

Optional arguments:

--flavor <flavor> Name or ID of flavor (see 'nova flavor-list').

--image <image> Name or ID of image (see 'nova image-list').

--image-with <key=value>

Image metadata property (see 'nova image-show').

Page 6: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

5 | H P H e l i o n O p e S t a c k

--boot-volume <volume_id>

Volume ID to boot from.

--snapshot <snapshot_id>

...

Jste vyzbrojeni, pojďme na to!

2.3. Přihlášení Nejprve se přes SSH (doporučuji program Putty) připojte na server v labu, z kterého budeme následující

kroky provádět. Některé CLI příkazy jsou docela široké – nastavte tedy Putty tak, že se změnou velikosti

okna bude přidávat znaky (místo zvětšování fontu)

Pak zadejte IP adresu serveru v labu a připojte se

Jakmile se připojíte ujistěte se, že jsou pro vás připraveny potřebné soubory api.sh a eca.crt

tomas@helion-ProLiant-DL380-Gen9:~$ ls

api.sh eca.crt

Pokud ano, pokračujeme dál. Příkazová řádka je ve skutečnosti aplikace, která může běžet kdekoli.

Musíme ji tedy říct, kde má hledat Helion OpenStack API server a dát jí přihlašovací údaje vašeho

Page 7: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

6 | H P H e l i o n O p e S t a c k

projektu. Použijte připravený skript, aplikujte ho příkazem source a jako argumenty uveďte jméno heslo

tenant. Například:

tomas@helion-ProLiant-DL380-Gen9:~$ source api.sh tomas.kubica helion tomas.kubica

kde “tomas.kubica” je uživatelské jméno i jméno projektu (tenantu) a “helion” je vaše heslo

2.4. První kroky v příkazové řádce Pojďme to hned vyzkoušet. Pokud jste po předchozím labu vše v rámci vašeho projektu pořádně vyčistili,

neměla by být spuštěna žádná instance. Následující příkaz tedy vrátí prázdnou tabulku – ale to, že ji

zobrazí znamená, že máme přihlašovací údaje správně.

tomas@helion-ProLiant-DL380-Gen9:~$ nova list

+----+------+--------+------------+-------------+----------+

| ID | Name | Status | Task State | Power State | Networks |

+----+------+--------+------------+-------------+----------+

+----+------+--------+------------+-------------+----------+

Ale můžeme se podívat na Flavors

tomas@helion-ProLiant-DL380-Gen9:~$ nova flavor-list +--------------------------------------+-----------+-----------+------+-----------+------+-------+-------------+-----------+

| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |

+--------------------------------------+-----------+-----------+------+-----------+------+-------+-------------+-----------+

| 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True |

| 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True |

| 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True |

| 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True |

| ddd64d6e-884c-4277-a068-eae6b370a479 | m1.tiny | 512 | 4 | 0 | | 1 | 1.0 | True |

+--------------------------------------+-----------+-----------+------+-----------+------+-------+-------------+-----------+

Podobné to bude se storage volume

tomas@helion-ProLiant-DL380-Gen9:~$ cinder list

+----+--------+--------------+------+-------------+----------+-------------+

| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |

+----+--------+--------------+------+-------------+----------+-------------+

+----+--------+--------------+------+-------------+----------+-------------+

Pokud jste vyčistili předchozí lab, uvidíte pouze výchozí síť a externí síť

tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-list

+--------------------------------------+-------------+-----------------------------------------------------+

| id | name | subnets |

+--------------------------------------+-------------+-----------------------------------------------------+

| 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e | ext-net | e3be37fb-1ced-432f-950c-99b887bb52c2 |

| 7590c21a-4878-48ae-b957-7562e4dc1d0d | default-net | 2c223f18-79f9-41c0-b19a-e5bdfa294895 192.168.1.0/24 |

+--------------------------------------+-------------+-----------------------------------------------------+

Podívejme se ještě na dostupné image

tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list

+--------------------------------------+-----------------------------------+-------------+------------------+-----------+--------+

| ID | Name | Disk Format | Container Format | Size | Status |

+--------------------------------------+-----------------------------------+-------------+------------------+-----------+--------+

| dfc71bdf-06ab-42d6-828e-51612cbcd9ac | debian-wheezy-amd64-20140929-disk | qcow2 | bare | 221489152 | active |

| 35c7876d-a570-4358-a44a-bcaa303b2673 | msgaas-rabbit-cluster_1.1.0.3 | qcow2 | bare | 525925376 | active |

+--------------------------------------+-----------------------------------+-------------+------------------+-----------+--------+

Vyzkoušíme si jednoduché spuštění instance. V Putty využijte toho, že jakýkoli text označíte, tak se vám

ihned automaticky nakopíruje do schránky. Do řádky ho pak vložíte jednoduše kliknutím na pravé

tlačítko. To udělejte s názvem našeho debian image, ať to nemusíte opisovat.

Page 8: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

7 | H P H e l i o n O p e S t a c k

tomas@helion-ProLiant-DL380-Gen9:~$ nova boot mojeVM --image debian-wheezy-amd64-20140929-disk --flavor m1.tiny

+--------------------------------------+--------------------------------------------------------------------------+

| Property | Value |

+--------------------------------------+--------------------------------------------------------------------------+

| OS-EXT-AZ:availability_zone | nova |

| OS-EXT-STS:power_state | 0 |

| OS-EXT-STS:task_state | scheduling |

| OS-EXT-STS:vm_state | building |

| OS-SRV-USG:launched_at | - |

| OS-SRV-USG:terminated_at | - |

| accessIPv4 | |

| accessIPv6 | |

| adminPass | CwE4vk7vyQFx |

| config_drive | |

| created | 2015-03-25T11:27:57Z |

| flavor | m1.tiny (ddd64d6e-884c-4277-a068-eae6b370a479) |

| hostId | |

| id | 701610f6-49b6-404a-9c3a-da11c21f8189 |

| image | debian-wheezy-amd64-20140929-disk (dfc71bdf-06ab-42d6-828e-51612cbcd9ac) |

| key_name | - |

| metadata | {} |

| name | mojeVM |

| os-extended-volumes:volumes_attached | [] |

| progress | 0 |

| security_groups | default |

| status | BUILD |

| tenant_id | baa7096fe1d54571900c3758397e0939 |

| updated | 2015-03-25T11:27:57Z |

| user_id | 078a6c284c804ba0b68e9e5447043da7 |

+--------------------------------------+--------------------------------------------------------------------------+

Koukněte se v jakém je stavu – nejdřív vám bude možná příkaz nova list ukazovat BUILD, ale po nějaké

době už ACTIVE

tomas@helion-ProLiant-DL380-Gen9:~$ nova list

+--------------------------------------+--------+--------+------------+-------------+----------+

| ID | Name | Status | Task State | Power State | Networks |

+--------------------------------------+--------+--------+------------+-------------+----------+

| 701610f6-49b6-404a-9c3a-da11c21f8189 | mojeVM | BUILD | spawning | NOSTATE | |

+--------------------------------------+--------+--------+------------+-------------+----------+

tomas@helion-ProLiant-DL380-Gen9:~$ nova list

+--------------------------------------+--------+--------+------------+-------------+--------------------------+

| ID | Name | Status | Task State | Power State | Networks |

+--------------------------------------+--------+--------+------------+-------------+--------------------------+

| 701610f6-49b6-404a-9c3a-da11c21f8189 | mojeVM | ACTIVE | - | Running | default-net=192.168.1.11 |

+--------------------------------------+--------+--------+------------+-------------+--------------------------+

Pojďme ji hned zase zrušit

tomas@helion-ProLiant-DL380-Gen9:~$ nova delete mojeVM

tomas@helion-ProLiant-DL380-Gen9:~$ nova list

+----+------+--------+------------+-------------+----------+

| ID | Name | Status | Task State | Power State | Networks |

+----+------+--------+------------+-------------+----------+

+----+------+--------+------------+-------------+----------+

Vytvoříme si nový volume, který bude bootovací a bude na něm náš debian image. Tento musíme

referencovat přes jeho ID, takže opět použijte příkaz glance image-list a označte si ID tak, že ho přes

pravé tlačítko použijete, když je třeba.

tomas@helion-ProLiant-DL380-Gen9:~$ cinder create --image-id dfc71bdf-06ab-42d6-828e-51612cbcd9ac --display-name MujBootDisk 4

Page 9: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

8 | H P H e l i o n O p e S t a c k

+---------------------+--------------------------------------+

| Property | Value |

+---------------------+--------------------------------------+

| attachments | [] |

| availability_zone | nova |

| bootable | false |

| created_at | 2015-03-25T12:28:00.884103 |

| display_description | None |

| display_name | MujBootDisk |

| encrypted | False |

| id | bac044cb-c5ca-4c19-828b-47ad7cafd72b |

| image_id | dfc71bdf-06ab-42d6-828e-51612cbcd9ac |

| metadata | {} |

| size | 4 |

| snapshot_id | None |

| source_volid | None |

| status | creating |

| volume_type | None |

+---------------------+--------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ cinder list

+--------------------------------------+-------------+--------------+------+-------------+----------+-------------+

| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |

+--------------------------------------+-------------+--------------+------+-------------+----------+-------------+

| bac044cb-c5ca-4c19-828b-47ad7cafd72b | downloading | MujBootDisk | 4 | None | false | |

+--------------------------------------+-------------+--------------+------+-------------+----------+-------------+

Po nějaké době bude volume připraven

tomas@helion-ProLiant-DL380-Gen9:~$ cinder list

+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |

+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

| bac044cb-c5ca-4c19-828b-47ad7cafd72b | available | MujBootDisk | 4 | None | true | |

+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

Nabootujeme z něj novou instanci – budeme potřebovat volume ID

tomas@helion-ProLiant-DL380-Gen9:~$ nova boot dalsiVM --boot-volume bac044cb-c5ca-4c19-828b-47ad7cafd72b --flavor

m1.tiny

+--------------------------------------+--------------------------------------------------+

| Property | Value |

+--------------------------------------+--------------------------------------------------+

| OS-EXT-AZ:availability_zone | nova |

| OS-EXT-STS:power_state | 0 |

| OS-EXT-STS:task_state | scheduling |

| OS-EXT-STS:vm_state | building |

| OS-SRV-USG:launched_at | - |

| OS-SRV-USG:terminated_at | - |

| accessIPv4 | |

| accessIPv6 | |

| adminPass | eD2mKNnbdm5D |

| config_drive | |

| created | 2015-03-25T12:35:55Z |

| flavor | m1.tiny (ddd64d6e-884c-4277-a068-eae6b370a479) |

| hostId | |

| id | 497fd77b-af7a-4c29-a0a6-fb327691744e |

| image | Attempt to boot from volume - no image supplied |

| key_name | - |

| metadata | {} |

| name | dalsiVM |

Page 10: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

9 | H P H e l i o n O p e S t a c k

| os-extended-volumes:volumes_attached | [{"id": "bac044cb-c5ca-4c19-828b-47ad7cafd72b"}] |

| progress | 0 |

| security_groups | default |

| status | BUILD |

| tenant_id | baa7096fe1d54571900c3758397e0939 |

| updated | 2015-03-25T12:35:56Z |

| user_id | 078a6c284c804ba0b68e9e5447043da7 |

+--------------------------------------+--------------------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ nova list

+--------------------------------------+---------+--------+------------+-------------+--------------------------+

| ID | Name | Status | Task State | Power State | Networks |

+--------------------------------------+---------+--------+------------+-------------+--------------------------+

| 497fd77b-af7a-4c29-a0a6-fb327691744e | dalsiVM | ACTIVE | - | Running | default-net=192.168.1.13 |

+--------------------------------------+---------+--------+------------+-------------+--------------------------+

Prohlédněme si detaily běžící instance

tomas@helion-ProLiant-DL380-Gen9:~$ nova show dalsiVM

+--------------------------------------+----------------------------------------------------------+

| Property | Value |

+--------------------------------------+----------------------------------------------------------+

| OS-EXT-AZ:availability_zone | nova |

| OS-EXT-STS:power_state | 1 |

| OS-EXT-STS:task_state | - |

| OS-EXT-STS:vm_state | active |

| OS-SRV-USG:launched_at | 2015-03-25T12:36:37.000000 |

| OS-SRV-USG:terminated_at | - |

| accessIPv4 | |

| accessIPv6 | |

| config_drive | |

| created | 2015-03-25T12:35:55Z |

| default-net network | 192.168.1.13 |

| flavor | m1.tiny (ddd64d6e-884c-4277-a068-eae6b370a479) |

| hostId | 7ee01409c9503576106d27bbd5c42f5852e18553171df105b143d96e |

| id | 497fd77b-af7a-4c29-a0a6-fb327691744e |

| image | Attempt to boot from volume - no image supplied |

| key_name | - |

| metadata | {} |

| name | dalsiVM |

| os-extended-volumes:volumes_attached | [{"id": "bac044cb-c5ca-4c19-828b-47ad7cafd72b"}] |

| progress | 0 |

| security_groups | default |

| status | ACTIVE |

| tenant_id | baa7096fe1d54571900c3758397e0939 |

| updated | 2015-03-25T12:36:37Z |

| user_id | 078a6c284c804ba0b68e9e5447043da7 |

+--------------------------------------+----------------------------------------------------------+

Podívejme se na volume a také na jeho detaily

tomas@helion-ProLiant-DL380-Gen9:~$ cinder list

+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+

| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |

+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+

| bac044cb-c5ca-4c19-828b-47ad7cafd72b | in-use | MujBootDisk | 4 | None | true | 497fd77b-af7a-4c29-a0a6-fb327691744e |

+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ cinder show MujBootDisk +---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Property | Value |

+---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| attachments | [{u'device': u'/dev/vda', u'server_id': u'497fd77b-af7a-4c29-a0a6-fb327691744e', u'id': u'bac044cb-c5ca-4c19-828b-47ad7cafd72b', u'host_name': None, u'volume_id': u'bac044cb-c5ca-4c19-828b-47ad7cafd72b'}] |

| availability_zone | nova |

| bootable | true |

| created_at | 2015-03-25T12:28:00.000000 |

| display_description | None |

| display_name | MujBootDisk |

| encrypted | False |

| id | bac044cb-c5ca-4c19-828b-47ad7cafd72b |

| metadata | {u'readonly': u'False', u'attached_mode': u'rw'} |

| os-vol-tenant-attr:tenant_id | baa7096fe1d54571900c3758397e0939 |

| os-volume-replication:driver_data | None |

| os-volume-replication:extended_status | None |

| size | 4 |

| snapshot_id | None |

| source_volid | None |

| status | in-use |

| volume_image_metadata | {u'container_format': u'bare', u'min_ram': u'0', u'disk_format': u'qcow2', u'image_name': u'debian-wheezy-amd64-20140929-disk', u'image_id': u'dfc71bdf-06ab-42d6-828e-51612cbcd9ac', u'checksum': u'5690939c3f261fac819347a6d8b7eb32', u'min_disk': u'0', u'size': u'221489152'} |

| volume_type | None |

+---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Page 11: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

10 | H P H e l i o n O p e S t a c k

2.5. Pokročilejší operace v příkazové řádce Některé další aspekty, které si pamatuje z první části labu, si jen rámcově ukážeme, ale nebudeme s nimi

aktivně pracovat. Pokud vás budou zajímat, využívejte help příkazů (nova help, nova boot help, …) a

pohrajte si sami.

tomas@helion-ProLiant-DL380-Gen9:~$ nova secgroup-list

+--------------------------------------+--------------+--------------+

| Id | Name | Description |

+--------------------------------------+--------------+--------------+

| ea62d680-0c24-4f60-9417-ea6f5d639eee | MojePravidla | MojePravidla |

| b9eaf0cf-e8b2-41f1-93d8-df59fbcc3615 | default | default |

+--------------------------------------+--------------+--------------+

tomas@helion-ProLiant-DL380-Gen9:~$ nova secgroup-list-rules MojePravidla

+-------------+-----------+---------+-----------+--------------+

| IP Protocol | From Port | To Port | IP Range | Source Group |

+-------------+-----------+---------+-----------+--------------+

| icmp | -1 | -1 | 0.0.0.0/0 | |

| tcp | 22 | 22 | 0.0.0.0/0 | |

| | | | | MojePravidla |

+-------------+-----------+---------+-----------+--------------+

tomas@helion-ProLiant-DL380-Gen9:~$ swift list

MujKontejner

tomas@helion-ProLiant-DL380-Gen9:~$ swift upload MujKontejner api.sh

api.sh

tomas@helion-ProLiant-DL380-Gen9:~$ swift list MujKontejner

api.sh

Můžeme si vytvořit další, tentokrát prázdný volume a připojit ho do naší běžící instance

tomas@helion-ProLiant-DL380-Gen9:~$ cinder create --display-name DalsiDisk 1

+---------------------+--------------------------------------+

| Property | Value |

+---------------------+--------------------------------------+

| attachments | [] |

| availability_zone | nova |

| bootable | false |

| created_at | 2015-03-25T12:57:48.719454 |

| display_description | None |

| display_name | DalsiDisk |

| encrypted | False |

| id | 90773500-d1b9-4d92-a3fa-148a7b1445a2 |

| metadata | {} |

| size | 1 |

| snapshot_id | None |

| source_volid | None |

| status | creating |

| volume_type | None |

+---------------------+--------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ nova list

+--------------------------------------+---------+--------+------------+-------------+--------------------------+

| ID | Name | Status | Task State | Power State | Networks |

+--------------------------------------+---------+--------+------------+-------------+--------------------------+

| 497fd77b-af7a-4c29-a0a6-fb327691744e | dalsiVM | ACTIVE | - | Running | default-net=192.168.1.13 |

+--------------------------------------+---------+--------+------------+-------------+--------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ nova volume-attach dalsiVM 90773500-d1b9-4d92-a3fa-148a7b1445a2

+----------+--------------------------------------+

Page 12: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

11 | H P H e l i o n O p e S t a c k

| Property | Value |

+----------+--------------------------------------+

| device | /dev/vdb |

| id | 90773500-d1b9-4d92-a3fa-148a7b1445a2 |

| serverId | 497fd77b-af7a-4c29-a0a6-fb327691744e |

| volumeId | 90773500-d1b9-4d92-a3fa-148a7b1445a2 |

+----------+--------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ cinder list +--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+

| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |

+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+

| 90773500-d1b9-4d92-a3fa-148a7b1445a2 | in-use | DalsiDisk | 1 | None | false | 497fd77b-af7a-4c29-a0a6-fb327691744e |

| bac044cb-c5ca-4c19-828b-47ad7cafd72b | in-use | MujBootDisk | 4 | None | true | 497fd77b-af7a-4c29-a0a6-fb327691744e |

+--------------------------------------+--------+--------------+------+-------------+----------+--------------------------------------+

Následně můžeme volume zase odpojit, udělat snapshot a znovu připojit

tomas@helion-ProLiant-DL380-Gen9:~$ nova volume-detach dalsiVM 90773500-d1b9-4d92-a3fa-148a7b1445a2

tomas@helion-ProLiant-DL380-Gen9:~$ cinder snapshot-create 90773500-d1b9-4d92-a3fa-148a7b1445a2 --display-name MujDalsiSnapshot

+---------------------+--------------------------------------+

| Property | Value |

+---------------------+--------------------------------------+

| created_at | 2015-03-25T18:55:25.723306 |

| display_description | None |

| display_name | MujDalsiSnapshot |

| id | 0ee3d322-29fb-453b-b448-6bf169569cdb |

| metadata | {} |

| size | 1 |

| status | creating |

| volume_id | 90773500-d1b9-4d92-a3fa-148a7b1445a2 |

+---------------------+--------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ cinder snapshot-list

+--------------------------------------+--------------------------------------+-----------+------------------+------+

| ID | Volume ID | Status | Display Name | Size |

+--------------------------------------+--------------------------------------+-----------+------------------+------+

| 0ee3d322-29fb-453b-b448-6bf169569cdb | 90773500-d1b9-4d92-a3fa-148a7b1445a2 | available | MujDalsiSnapshot | 1 |

+--------------------------------------+--------------------------------------+-----------+------------------+------+

tomas@helion-ProLiant-DL380-Gen9:~$ nova volume-attach dalsiVM 90773500-d1b9-4d92-a3fa-148a7b1445a2

+----------+--------------------------------------+

| Property | Value |

+----------+--------------------------------------+

| device | /dev/vdb |

| id | 90773500-d1b9-4d92-a3fa-148a7b1445a2 |

| serverId | 497fd77b-af7a-4c29-a0a6-fb327691744e |

| volumeId | 90773500-d1b9-4d92-a3fa-148a7b1445a2 |

+----------+--------------------------------------+

Na závěr si ještě pohrajeme se sítí. Nejprve se ujistěte, že jste na konci minulého labu zrušili router i

nové sítě, ale floating IP máte pro projekt přiřazenou (pokud ne, snadno si opravíte )

tomas@helion-ProLiant-DL380-Gen9:~$ neutron floatingip-list

+--------------------------------------+------------------+---------------------+---------+

| id | fixed_ip_address | floating_ip_address | port_id |

+--------------------------------------+------------------+---------------------+---------+

| 090d298a-357f-4def-90fd-752471c6a149 | | 172.16.2.3 | |

+--------------------------------------+------------------+---------------------+---------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-list

Page 13: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

12 | H P H e l i o n O p e S t a c k

+--------------------------------------+-------------+-----------------------------------------------------+

| id | name | subnets |

+--------------------------------------+-------------+-----------------------------------------------------+

| 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e | ext-net | e3be37fb-1ced-432f-950c-99b887bb52c2 |

| 7590c21a-4878-48ae-b957-7562e4dc1d0d | default-net | 2c223f18-79f9-41c0-b19a-e5bdfa294895 192.168.1.0/24 |

+--------------------------------------+-------------+-----------------------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-list

tomas@helion-ProLiant-DL380-Gen9:~$ neutron subnet-list

+--------------------------------------+------+----------------+--------------------------------------------------+

| id | name | cidr | allocation_pools |

+--------------------------------------+------+----------------+--------------------------------------------------+

| 2c223f18-79f9-41c0-b19a-e5bdfa294895 | | 192.168.1.0/24 | {"start": "192.168.1.2", "end": "192.168.1.254"} |

+--------------------------------------+------+----------------+--------------------------------------------------+

Teď se pokusíme v CLI udělat něco podobného, co v prvním labu v GUI – tedy vytvoříme dvě nové sítě,

každou se svým subnetem a router, který je propojuje a připojuje na gateway.

tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-create PrvniSit

Created a new network:

+-----------------+--------------------------------------+

| Field | Value |

+-----------------+--------------------------------------+

| admin_state_up | True |

| id | d78a23ba-d8d3-46f3-99eb-4f429890338a |

| name | PrvniSit |

| router:external | False |

| shared | False |

| status | ACTIVE |

| subnets | |

| tenant_id | baa7096fe1d54571900c3758397e0939 |

+-----------------+--------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-create DruhaSit

Created a new network:

+-----------------+--------------------------------------+

| Field | Value |

+-----------------+--------------------------------------+

| admin_state_up | True |

| id | 8c7f0937-0b96-4cf6-bc5f-70884fa58e1b |

| name | DruhaSit |

| router:external | False |

| shared | False |

| status | ACTIVE |

| subnets | |

| tenant_id | baa7096fe1d54571900c3758397e0939 |

+-----------------+--------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron subnet-create --name PrvniSubnet --allocation-pool

start=192.168.5.100,end=192.168.5.200 --dns-nameserver 8.8.8.8 PrvniSit 192.168.5.0/24

Created a new subnet:

+-------------------+----------------------------------------------------+

| Field | Value |

+-------------------+----------------------------------------------------+

| allocation_pools | {"start": "192.168.5.100", "end": "192.168.5.200"} |

| cidr | 192.168.5.0/24 |

| dns_nameservers | 8.8.8.8 |

| enable_dhcp | True |

| gateway_ip | 192.168.5.1 |

| host_routes | |

| id | 8bb31674-2ba7-45a5-8983-c1da8b738448 |

Page 14: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

13 | H P H e l i o n O p e S t a c k

| ip_version | 4 |

| ipv6_address_mode | |

| ipv6_ra_mode | |

| name | PrvniSubnet |

| network_id | d78a23ba-d8d3-46f3-99eb-4f429890338a |

| tenant_id | baa7096fe1d54571900c3758397e0939 |

+-------------------+----------------------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron subnet-create --name DruhySubnet --allocation-pool

start=192.168.6.100,end=192.168.6.200 --dns-nameserver 8.8.8.8 DruhaSit 192.168.6.0/24

Created a new subnet:

+-------------------+----------------------------------------------------+

| Field | Value |

+-------------------+----------------------------------------------------+

| allocation_pools | {"start": "192.168.6.100", "end": "192.168.6.200"} |

| cidr | 192.168.6.0/24 |

| dns_nameservers | 8.8.8.8 |

| enable_dhcp | True |

| gateway_ip | 192.168.6.1 |

| host_routes | |

| id | b9e73792-0441-42ad-a7ba-5efde9f36894 |

| ip_version | 4 |

| ipv6_address_mode | |

| ipv6_ra_mode | |

| name | DruhySubnet |

| network_id | 8c7f0937-0b96-4cf6-bc5f-70884fa58e1b |

| tenant_id | baa7096fe1d54571900c3758397e0939 |

+-------------------+----------------------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-list

+--------------------------------------+-------------+-----------------------------------------------------+

| id | name | subnets |

+--------------------------------------+-------------+-----------------------------------------------------+

| 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e | ext-net | e3be37fb-1ced-432f-950c-99b887bb52c2 |

| 7590c21a-4878-48ae-b957-7562e4dc1d0d | default-net | 2c223f18-79f9-41c0-b19a-e5bdfa294895 192.168.1.0/24 |

| 8c7f0937-0b96-4cf6-bc5f-70884fa58e1b | DruhaSit | b9e73792-0441-42ad-a7ba-5efde9f36894 192.168.6.0/24 |

| d78a23ba-d8d3-46f3-99eb-4f429890338a | PrvniSit | 8bb31674-2ba7-45a5-8983-c1da8b738448 192.168.5.0/24 |

+--------------------------------------+-------------+-----------------------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-create DalsiRouter

Created a new router:

+-----------------------+--------------------------------------+

| Field | Value |

+-----------------------+--------------------------------------+

| admin_state_up | True |

| external_gateway_info | |

| id | ca89b936-0c1b-401b-aa66-f5a0c9adab44 |

| name | DalsiRouter |

| routes | |

| status | ACTIVE |

| tenant_id | baa7096fe1d54571900c3758397e0939 |

+-----------------------+--------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-gateway-set ca89b936-0c1b-401b-aa66-f5a0c9adab44 3a5b5cd4-0c4b-

4bc3-b44e-826c7b19556e

Set gateway for router ca89b936-0c1b-401b-aa66-f5a0c9adab44

tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-interface-add ca89b936-0c1b-401b-aa66-f5a0c9adab44 PrvniSubnet

Added interface 12bdc881-3749-4246-a55a-f8dc8732e8ff to router ca89b936-0c1b-401b-aa66-f5a0c9adab44.

tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-interface-add ca89b936-0c1b-401b-aa66-f5a0c9adab44 DruhySubnet

Added interface 43ddd2ce-39ba-4aaa-9fcc-6116cbbe1a25 to router ca89b936-0c1b-401b-aa66-f5a0c9adab44.

Page 15: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

14 | H P H e l i o n O p e S t a c k

Podívejte se do GUI a ověřte si, že výsledek je dle očekávání

Posledním krokem bude vytvořit instanci běžící v některé z našich nových sítí

tomas@helion-ProLiant-DL380-Gen9:~$ nova boot netVM --image debian-wheezy-amd64-20140929-disk --flavor m1.tiny --nic

net-id=d78a23ba-d8d3-46f3-99eb-4f429890338a

+--------------------------------------+--------------------------------------------------------------------------+

| Property | Value |

+--------------------------------------+--------------------------------------------------------------------------+

| OS-EXT-AZ:availability_zone | nova |

| OS-EXT-STS:power_state | 0 |

| OS-EXT-STS:task_state | scheduling |

| OS-EXT-STS:vm_state | building |

| OS-SRV-USG:launched_at | - |

| OS-SRV-USG:terminated_at | - |

| accessIPv4 | |

| accessIPv6 | |

| adminPass | NYERzSDLFn9b |

| config_drive | |

| created | 2015-03-26T05:06:34Z |

| flavor | m1.tiny (ddd64d6e-884c-4277-a068-eae6b370a479) |

| hostId | |

Page 16: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

15 | H P H e l i o n O p e S t a c k

| id | e266c8d8-c6de-4419-aa22-04a9354fbbe2 |

| image | debian-wheezy-amd64-20140929-disk (dfc71bdf-06ab-42d6-828e-51612cbcd9ac) |

| key_name | - |

| metadata | {} |

| name | netVM |

| os-extended-volumes:volumes_attached | [] |

| progress | 0 |

| security_groups | default |

| status | BUILD |

| tenant_id | baa7096fe1d54571900c3758397e0939 |

| updated | 2015-03-26T05:06:34Z |

| user_id | 078a6c284c804ba0b68e9e5447043da7 |

+--------------------------------------+--------------------------------------------------------------------------+

A výsledek?

Právě jste pronikli do základů OpenStack CLI, gratuluji!

Na závěr po sobě uklidíme

tomas@helion-ProLiant-DL380-Gen9:~$ nova list

+--------------------------------------+---------+--------+------------+-------------+--------------------------+

| ID | Name | Status | Task State | Power State | Networks |

+--------------------------------------+---------+--------+------------+-------------+--------------------------+

| 497fd77b-af7a-4c29-a0a6-fb327691744e | dalsiVM | ACTIVE | - | Running | default-net=192.168.1.13 |

| e266c8d8-c6de-4419-aa22-04a9354fbbe2 | netVM | ACTIVE | - | Running | PrvniSit=192.168.5.101 |

+--------------------------------------+---------+--------+------------+-------------+--------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ nova delete dalsiVM

tomas@helion-ProLiant-DL380-Gen9:~$ nova delete netVM

Page 17: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

16 | H P H e l i o n O p e S t a c k

tomas@helion-ProLiant-DL380-Gen9:~$ cinder snapshot-list

+--------------------------------------+--------------------------------------+-----------+------------------+------+

| ID | Volume ID | Status | Display Name | Size |

+--------------------------------------+--------------------------------------+-----------+------------------+------+

| 0ee3d322-29fb-453b-b448-6bf169569cdb | 90773500-d1b9-4d92-a3fa-148a7b1445a2 | available | MujDalsiSnapshot | 1 |

+--------------------------------------+--------------------------------------+-----------+------------------+------+

tomas@helion-ProLiant-DL380-Gen9:~$ cinder snapshot-delete 0ee3d322-29fb-453b-b448-6bf169569cdb

tomas@helion-ProLiant-DL380-Gen9:~$ cinder list

+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |

+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

| 90773500-d1b9-4d92-a3fa-148a7b1445a2 | available | DalsiDisk | 1 | None | false | |

| bac044cb-c5ca-4c19-828b-47ad7cafd72b | available | MujBootDisk | 4 | None | true | |

+--------------------------------------+-----------+--------------+------+-------------+----------+-------------+

tomas@helion-ProLiant-DL380-Gen9:~$ cinder delete DalsiDisk

tomas@helion-ProLiant-DL380-Gen9:~$ cinder delete MujBootDisk

tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-list

+--------------------------------------+-------------+---------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

----+

| id | name | external_gateway_info

|

+--------------------------------------+-------------+---------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

----+

| ca89b936-0c1b-401b-aa66-f5a0c9adab44 | DalsiRouter | {"network_id": "3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e",

"enable_snat": true, "external_fixed_ips": [{"subnet_id": "e3be37fb-1ced-432f-950c-99b887bb52c2", "ip_address":

"172.16.2.6"}]} |

+--------------------------------------+-------------+---------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------

----+ tomas@helion-ProLiant-DL380-Gen9:~$ neutron subnet-list

+--------------------------------------+-------------+----------------+----------------------------------------------------+

| id | name | cidr | allocation_pools |

+--------------------------------------+-------------+----------------+----------------------------------------------------+

| 2c223f18-79f9-41c0-b19a-e5bdfa294895 | | 192.168.1.0/24 | {"start": "192.168.1.2", "end": "192.168.1.254"} |

| 8bb31674-2ba7-45a5-8983-c1da8b738448 | PrvniSubnet | 192.168.5.0/24 | {"start": "192.168.5.100", "end": "192.168.5.200"} |

| b9e73792-0441-42ad-a7ba-5efde9f36894 | DruhySubnet | 192.168.6.0/24 | {"start": "192.168.6.100", "end": "192.168.6.200"} |

+--------------------------------------+-------------+----------------+----------------------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-interface-delete DalsiRouter 8bb31674-2ba7-45a5-8983-c1da8b738448

Removed interface from router DalsiRouter.

tomas@helion-ProLiant-DL380-Gen9:~$ neutron router-interface-delete DalsiRouter b9e73792-0441-42ad-a7ba-5efde9f36894

Removed interface from router DalsiRouter.

tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-list

+--------------------------------------+-------------+-----------------------------------------------------+

| id | name | subnets |

+--------------------------------------+-------------+-----------------------------------------------------+

| 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e | ext-net | e3be37fb-1ced-432f-950c-99b887bb52c2 |

| 7590c21a-4878-48ae-b957-7562e4dc1d0d | default-net | 2c223f18-79f9-41c0-b19a-e5bdfa294895 192.168.1.0/24 |

| 8c7f0937-0b96-4cf6-bc5f-70884fa58e1b | DruhaSit | b9e73792-0441-42ad-a7ba-5efde9f36894 192.168.6.0/24 |

| d78a23ba-d8d3-46f3-99eb-4f429890338a | PrvniSit | 8bb31674-2ba7-45a5-8983-c1da8b738448 192.168.5.0/24 |

+--------------------------------------+-------------+-----------------------------------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-delete PrvniSit

Deleted network: PrvniSit

tomas@helion-ProLiant-DL380-Gen9:~$ neutron net-delete DruhaSit

Deleted network: DruhaSit

2.6. Parsování Linux a příkazová řádka je odvěká kombinace, takže nepřekvapí, že obsahuje řadu nástrojů pro parsování

výstupu. Vyzkoušejme si jednoduchý příklad. Nejprve vypišme seznam image bez nějakých modifikací:

Page 18: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

17 | H P H e l i o n O p e S t a c k

tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list +--------------------------------------+--------------------------------------------------------------------------------------+-------------+------------------+------------+--------+

| ID | Name | Disk Format | Container Format | Size | Status |

+--------------------------------------+--------------------------------------------------------------------------------------+-------------+------------------+------------+--------+

| 8b8f00f8-5543-4a07-9c85-485889f1c2ff | ansible | qcow2 | bare | 1300889600 | active |

| abcac3ce-4180-4817-b848-939bb48080c0 | dbaas-api_1.1.0.35 | qcow2 | bare | 589732352 | active |

| 6e2b077a-26fe-4eac-bfd2-937c9937791e | dbaas-conductor_1.1.0.35 | qcow2 | bare | 589570048 | active |

| 6a42e333-9bb6-40a7-862f-11b53fffb676 | dbaas-database_1.1.0.35 | qcow2 | bare | 680777216 | active |

| ef6211f6-95a9-4eb6-a45b-cd9f9d4ab641 | dbaas-guest_1.1.0.35 | qcow2 | bare | 654554112 | active |

| 16f03c0b-6c47-4ac8-ab5a-19e64338a8c0 | dbaas-messaging_1.1.0.35 | qcow2 | bare | 584186368 | active |

| ee7280a3-b4ad-4bd1-98e5-6639cefe51c3 | dbaas-taskmanager_1.1.0.35 | qcow2 | bare | 589372416 | active |

| dfc71bdf-06ab-42d6-828e-51612cbcd9ac | debian-wheezy-amd64-20140929-disk | qcow2 | bare | 221489152 | active |

| 0d54050e-8b4f-454b-adc1-6ee23ad1efba | HP Helion Development Platform CE - Application Lifecycle Service Installer 1.1.0.19 | qcow2 | bare | 504060416 | active |

| 8be1cda2-b2be-4fa6-a5b4-0e63e66e0491 | HP Helion Development Platform CE - Application Lifecycle Service Seed Node 1.1.0.19 | qcow2 | bare | 3771465728 | active |

| a652e1e2-462f-41ef-926c-2fe716625156 | marketplace-api_1.1.0.40 | qcow2 | bare | 588244480 | active |

| b7623074-6909-4b57-b139-dd2935a03284 | marketplace-database_1.1.0.40 | qcow2 | bare | 666752512 | active |

| 2fd67325-5830-497c-aa19-c71701eb4c2e | marketplace-engine_1.1.0.40 | qcow2 | bare | 575566848 | active |

| 15e23004-0dea-4f0e-b07f-329535554e34 | marketplace-messaging_1.1.0.40 | qcow2 | bare | 570447360 | active |

| b9942ece-e544-4dff-b7c8-b7d0d0769672 | msgaas-rabbit-cluster_1.0.0.2 | qcow2 | bare | 507274240 | active |

| a37d347e-e9b1-4814-b47c-c730c2727a1f | msgaas-rabbit-cluster_1.0.0.2 | qcow2 | bare | 507274240 | active |

| 35c7876d-a570-4358-a44a-bcaa303b2673 | msgaas-rabbit-cluster_1.1.0.3 | qcow2 | bare | 525925376 | active |

+--------------------------------------+--------------------------------------------------------------------------------------+-------------+------------------+------------+--------+

Možná bychom teď potřebovali pro další zpracování získat jen všechna ID našich obrazů, ostatní

informace nám tam překážejí. Výstup příkazu můžeme nasměrovat do jiné utilitky s nzvek awk, která

dokáže parsovat jednotlivá slova. Takto si vytiskneme vždy jen druhé slovo v řádku:

tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list | awk '{print $2}'

ID

8b8f00f8-5543-4a07-9c85-485889f1c2ff

abcac3ce-4180-4817-b848-939bb48080c0

6e2b077a-26fe-4eac-bfd2-937c9937791e

6a42e333-9bb6-40a7-862f-11b53fffb676

ef6211f6-95a9-4eb6-a45b-cd9f9d4ab641

16f03c0b-6c47-4ac8-ab5a-19e64338a8c0

ee7280a3-b4ad-4bd1-98e5-6639cefe51c3

dfc71bdf-06ab-42d6-828e-51612cbcd9ac

0d54050e-8b4f-454b-adc1-6ee23ad1efba

8be1cda2-b2be-4fa6-a5b4-0e63e66e0491

a652e1e2-462f-41ef-926c-2fe716625156

b7623074-6909-4b57-b139-dd2935a03284

2fd67325-5830-497c-aa19-c71701eb4c2e

15e23004-0dea-4f0e-b07f-329535554e34

b9942ece-e544-4dff-b7c8-b7d0d0769672

a37d347e-e9b1-4814-b47c-c730c2727a1f

35c7876d-a570-4358-a44a-bcaa303b2673

To není špatné, ale oddělující čáry nám vycházejí jako prázdné řádky (jsou totiž jedno slovo, takže druhé

neexistuje a tím vznikne prázdný řádek ve výstupu). Awk umožňuje klást podmínky, tak například nám

vypíše pouze řádky, které splňují nějaké kritérium (například název image, tedy $4, obsahuje nějaké

znaky). My jednoduše budeme chtít, aby se něco vytisklo jen, pokud $2 existuje:

tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list | awk '{if ($2) print $2}'

ID

8b8f00f8-5543-4a07-9c85-485889f1c2ff

abcac3ce-4180-4817-b848-939bb48080c0

6e2b077a-26fe-4eac-bfd2-937c9937791e

6a42e333-9bb6-40a7-862f-11b53fffb676

ef6211f6-95a9-4eb6-a45b-cd9f9d4ab641

16f03c0b-6c47-4ac8-ab5a-19e64338a8c0

ee7280a3-b4ad-4bd1-98e5-6639cefe51c3

dfc71bdf-06ab-42d6-828e-51612cbcd9ac

0d54050e-8b4f-454b-adc1-6ee23ad1efba

8be1cda2-b2be-4fa6-a5b4-0e63e66e0491

a652e1e2-462f-41ef-926c-2fe716625156

b7623074-6909-4b57-b139-dd2935a03284

Page 19: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

18 | H P H e l i o n O p e S t a c k

2fd67325-5830-497c-aa19-c71701eb4c2e

15e23004-0dea-4f0e-b07f-329535554e34

b9942ece-e544-4dff-b7c8-b7d0d0769672

a37d347e-e9b1-4814-b47c-c730c2727a1f

35c7876d-a570-4358-a44a-bcaa303b2673

To už je lepší, prázdné řádky jsou pryč. Ještě nám tam zbývá název sloupce, tedy „ID“. V takovém

případě ho do výstupu zahrnout nechceme:

tomas@helion-ProLiant-DL380-Gen9:~$ glance image-list | awk '{if ($2!="ID" && $2) print $2}'

8b8f00f8-5543-4a07-9c85-485889f1c2ff

abcac3ce-4180-4817-b848-939bb48080c0

6e2b077a-26fe-4eac-bfd2-937c9937791e

6a42e333-9bb6-40a7-862f-11b53fffb676

ef6211f6-95a9-4eb6-a45b-cd9f9d4ab641

16f03c0b-6c47-4ac8-ab5a-19e64338a8c0

ee7280a3-b4ad-4bd1-98e5-6639cefe51c3

dfc71bdf-06ab-42d6-828e-51612cbcd9ac

0d54050e-8b4f-454b-adc1-6ee23ad1efba

8be1cda2-b2be-4fa6-a5b4-0e63e66e0491

a652e1e2-462f-41ef-926c-2fe716625156

b7623074-6909-4b57-b139-dd2935a03284

2fd67325-5830-497c-aa19-c71701eb4c2e

15e23004-0dea-4f0e-b07f-329535554e34

b9942ece-e544-4dff-b7c8-b7d0d0769672

a37d347e-e9b1-4814-b47c-c730c2727a1f

35c7876d-a570-4358-a44a-bcaa303b2673

A je to – máme očištěný výstup, který můžeme použít pro další zpracování – o tom za chvilku.

2.7. Praktický příklad skriptu Pro tento lab jsem potřeboval vytvořit prostředí pro 30 účastníků - vytvořit projekt v Helion OpenStack,

uživatelské přihlášení a loginy v serveru v labu (to s Helion nijak nesouvisí). Stačilo z pozvánky v kalendáří

vzít začátek vašich emailových adres a uložit to po řádkách do souboru. Následně spustit následující

skript, který udělá co potřebujeme. Všimněte si, že nastavení OpenStack prostředí je kratší a jednodušší,

než vytvoření vašeho loginu do serveru v labu

#!/bin/bash

while read line

do

name=$line

keystone tenant-create --name $line

keystone user-create --tenant $line --name $line --pass helion

home="/home/$line"

useradd $line -s /bin/bash

echo "$line:helion" | chpasswd

cp -R /etc/skel "$home" && echo $'\e[32m'"Copied skeleton to: $home"$'\e[m' || ( exit_code=$?; echo

$'\e[31m'"Failed to create: $home"$'\e[m' ) >&2

chown -R "$line:$line" "$home" && echo $'\e[32m'"Set owner on: $home"$'\e[m' || ( exit_code=$?; echo

$'\e[31m'"Failed to set owner on: $home"$'\e[m' ) >&2

done < $1

Tím pádem je možné kdykoli do prostředí přidat další účastníky školení... přece to nebudete všechno

klikat.

Page 20: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

19 | H P H e l i o n O p e S t a c k

2.8. Příklad skriptu s parsováním Pokud chcete v OpenStack vymazat router, musíte nejdřív zrušit jeho interface. Zkusme si napsat

jednoduchý skript, kterému jako parametr pošleme ID routeru a on nejprve zjistí jeho interface, ty zruší

a následně smaže celý router. Vypadalo by to nějak takhle:

for port in $(neutron router-port-list $1 | awk '{if ($2 != "id" && $2) print $2}')

do

neutron router-interface-delete $1 port=$port

done

neutron router-delete $1

Jak script vytvořit? Použijte třeba editor nano (nano jmenoskriptu.sh) a do něj tento text vložte (schránka a

pravé tlačítko), pak to uložte. Ještě musíte skript učinit spustitelný příkazem

Chmod +x jmenoskriptu.sh

Jak použít? Takhle:

root@helion-ProLiant-DL380-Gen9:~# neutron router-list

+--------------------------------------+------+-----------------------+

| id | name | external_gateway_info |

+--------------------------------------+------+-----------------------+

| dd11512d-469c-4285-b27c-708a258f9eef | test | null |

+--------------------------------------+------+-----------------------+

root@helion-ProLiant-DL380-Gen9:~# ./routerdelete.sh dd11512d-469c-4285-b27c-708a258f9eef

Removed interface from router dd11512d-469c-4285-b27c-708a258f9eef.

Deleted router: dd11512d-469c-4285-b27c-708a258f9eef

root@helion-ProLiant-DL380-Gen9:~# neutron router-list

... tady je prázdno

Tak vidíte, skriptování není těžké.

3. Lidsky čitelné datové formáty Prakticky všechny moderní nástroje používají k popisu nějaké datové struktury lidsky čitelné formáty

místo dřívějších binárních souborů. Určitě znáte jeden z nich, který je ale (z mnoha důvodů) spíše na

ústupu – XML. V rámci našeho labu se setkáme s YAML a JSON.

3.1. YAML YAML je předpis datové struktury, který je extrémně dobře lidsky čitelný. Přestože se může zdát, že jde o

text bez zřejmých pravidel, tato jsou jasně daná a díky nim dokáže počítač celou strukturu zpracovat.

Myslím, že následující příklad tak není třeba nijak podrobně vysvětlovat – poznáte, jaké informace jsou

obsaženy a v jaké struktuře?

---

zamestnanci:

-

jmeno: "tomas"

napoj: "pivo"

jazyk:

- "EN"

- "CZ"

-

jmeno: "martin"

napoj: "vino"

jazyk:

- "EN"

Page 21: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

20 | H P H e l i o n O p e S t a c k

- "SK"

YAML (případně jeho různé podmnožiny) je velmi často využíván pro šablony, konfigurační soubory,

předpisy a tak podobně. Jsou na něm postaveny například OpenStack Heat infrastrukturní šablony nebo

Ansible playbooky.

3.2. JSON Formát JSON je jiný předpis datové struktury, který je velmi úsporný, velmi dobře zpracovatelný

počítačem, a přitom si zachovává dobrou lidskou čitelnost. Takhle vypadají stejná data z předchozího

příladu v JSON formátu:

{"zamestnanci":[

{

"jmeno":"tomas",

"napoj":"pivo",

"jazyk":["EN", "CZ"]

},

{

"jmeno":"martin",

"napoj":"vino",

"jazyk":["EN", "SK"]

}

]

}

Pro svoje vlastnosti je velmi oblíbený v různých API, zejména v RESTful. Do této kategorie patří

OpenStack API, iLO, OneView, iMC i SDN API a také API celé řady nástrojů z dílny HP Software.

4. Orchestrační šablony OpenStack Heat

4.1. Nejjednodušší šablona Připojte se do GUI a jděte na záložku Orchestration, Stacks a klikněte na Launch Stack

Šablonu můžete zadat přímo do okna, nebo ji nahrajete ve formě souboru. Obsah šablony používá YAML

strukturu a pro začátek bude vypadat takto:

heat_template_version: 2013-05-23

description: Vytvorime jednoduchou instanci

resources:

PrvniPokus:

Page 22: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

21 | H P H e l i o n O p e S t a c k

type: OS::Nova::Server

properties:

key_name: MujKlic

image: debian-wheezy-amd64-20140929-disk

flavor: m1.tiny

Vložte do okna (nebo přes soubor) a klikněte na Next

Použijte nějaké jméno, zadejte heslo a klikněte na Launch

Počkejte až všechno doběhne

Page 23: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

22 | H P H e l i o n O p e S t a c k

Koukněte se do instancí – je tam?

Nic složitého, ale také zatím nic zvlášť užitečného. Vraťte se do Stacků a zrušte ho kliknutím na Delete

Stack

Šablona může být interaktivnější a některé parametry si nechat zadat uživatelem až v okamžiku jejího

deploymentu. Následující příklad dává možnost definovat typ (velikost/flavor) serveru, ale chceme dát

na výběr jen ze dvou možností. Dále využijeme možnosti formovat výstup, ve kterém předáme dál

některé informace z instalace šablony, v našem případě jakou IP adresu VM dostala (teď se vám to bude

zdát zbytečné, ale až se dostaneme k možnosti navázat šablonu na další operace v Ansiblu nebo jinému

nástroji, uvidíte, jak je předání parametrů dál důležité). Vezměte tento text a vložte do schránky (nebo si

přepište do souboru).

heat_template_version: 2013-05-23

description: Vytvorime jednoduchou instanci

parameters:

instance_type:

type: string

label: Typ instance

description: Vyberte si flavor m1.tiny nebo m1.small

constraints:

- allowed_values: [ m1.tiny, m1.small ]

description: Pripustne hodnoty jsou m1.tiny nebo m1.small.

resources:

PrvniPokus:

type: OS::Nova::Server

properties:

key_name: MujKlic

image: debian-wheezy-amd64-20140929-disk

flavor: { get_param: instance_type }

Page 24: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

23 | H P H e l i o n O p e S t a c k

outputs:

instance_ip:

description: IP adresa vysledne instance

value: { get_attr: [PrvniPokus, first_address] }

Založte tento Stack a klikněte na Next

Všimněte si, že GUI po vás chce vyplnit onen parametr a klikněte na Launch

Až bude nahoře, klikněte na Stack pro další detaily

Page 25: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

24 | H P H e l i o n O p e S t a c k

Na první záložce je obrázek topologie šablony, ale to zatím neukazuje nic zajímavého. Klikněte na

Overview

Všimněte si některých detailů včetně našeho output pravidla

Page 26: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

25 | H P H e l i o n O p e S t a c k

Na úvod to není špatné. Zrušte tento Stack a zkusíme si něco pořádného.

4.2. Komplexnější šablona Přestaňme chodit kolem horké kaše a připravme si něco složitějšího a užitečnějšího. Zrušte aktuální

Stack a vytvoříme si nový, komplexnější. YAML je dostatečně dobře čitelný, takže nebudeme vysvětlovat

jednotlivé aspekty této šablony – pročtěte si jí a určitě pochopíte, co se tady děje. Vytvoříme si dvě nové

sítě, dva subnety, nový router a zajistíme potřebné propojení. Dále založíme dva volume, dva servery

koukající každý do jiné sítě a volume k nim namapujeme. Vypadá to takhle:

heat_template_version: 2013-05-23

description: Vytvorime jednoduchou instanci

resources:

sit1:

type: OS::Neutron::Net

properties:

name: MojeSit1

sit2:

type: OS::Neutron::Net

properties:

name: MojeSit2

subnet1:

type: OS::Neutron::Subnet

properties:

network_id: { get_resource: sit1 }

cidr: 192.168.10.0/24

allocation_pools:

Page 27: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

26 | H P H e l i o n O p e S t a c k

- start: 192.168.10.100

end: 192.168.10.200

subnet2:

type: OS::Neutron::Subnet

properties:

network_id: { get_resource: sit2 }

cidr: 192.168.11.0/24

allocation_pools:

- start: 192.168.11.100

end: 192.168.11.200

router:

type: OS::Neutron::Router

properties:

external_gateway_info:

network: ext-net

router_interface:

type: OS::Neutron::RouterInterface

properties:

router_id: { get_resource: router }

subnet_id: { get_resource: subnet1 }

router_interface2:

type: OS::Neutron::RouterInterface

properties:

router_id: { get_resource: router }

subnet_id: { get_resource: subnet2 }

server1_port:

type: OS::Neutron::Port

properties:

network_id: { get_resource: sit1 }

fixed_ips:

- subnet_id: { get_resource: subnet1 }

server2_port:

type: OS::Neutron::Port

properties:

network_id: { get_resource: sit2 }

fixed_ips:

- subnet_id: { get_resource: subnet2 }

server1:

type: OS::Nova::Server

properties:

key_name: MujKlic

image: debian-wheezy-amd64-20140929-disk

flavor: m1.tiny

networks:

- port: { get_resource: server1_port }

server2:

type: OS::Nova::Server

properties:

key_name: MujKlic

image: debian-wheezy-amd64-20140929-disk

flavor: m1.tiny

networks:

- port: { get_resource: server2_port }

Page 28: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

27 | H P H e l i o n O p e S t a c k

volume1:

type: OS::Cinder::Volume

properties:

size: 1

volume2:

type: OS::Cinder::Volume

properties:

size: 1

vol1_att:

type: OS::Cinder::VolumeAttachment

properties:

instance_uuid: { get_resource: server1 }

volume_id: { get_resource: volume1 }

mountpoint: /dev/vdb

vol2_att:

type: OS::Cinder::VolumeAttachment

properties:

instance_uuid: { get_resource: server2 }

volume_id: { get_resource: volume2 }

mountpoint: /dev/vdb

Založte tuto šablonu (už víte jak) a až bude nastartována, pojďme si ji prohlédnout.

Takhle třeba Stack topologie ukazuje návaznosti

Prohlédněte si vytvořené zdroje (screenshot nezahrnuje všechny)

Page 29: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

28 | H P H e l i o n O p e S t a c k

a události

Page 30: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

29 | H P H e l i o n O p e S t a c k

Prověříme si síťovou topologii

Page 31: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

30 | H P H e l i o n O p e S t a c k

Instance

a volume

Zkrátka všechno je tak, jak jsme chtěli. Zopakujme pár poznatků:

Page 32: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

31 | H P H e l i o n O p e S t a c k

Už dříve jsme si vyzkoušeli, že šablona může zahrnovat mnoho vstupních parametrů, takže

dokument může být poměrně univerzální a při použití šablony si ji uživatel doladí dle reálných

potřeb

Šablona je v jednoduchém textovém formátu a sama o sobě může sloužit jako dokumentace

(Infrastructure as code)

Jednoduchý textový formát můžete prohnat libovolným versioning systémem jako je třeba Git a

snadno zjistíte rozdíly mezi verzemi šablony

Kromě vyzkoušených věcí můžete používat konfigurační skripty – k tomu se ještě později

dostaneme

Výsledkem může být předání parametrů do dalšího systému, například něco, co zajistí

konfiguraci OS a instalaci aplikace

Heat šablony podporují automatické škálování a redundanci a o tom hned v další kapitole

4.3. Heat autoscaling a autohealing OpenStack Heat dokáže víc, než jsme dosud viděli, ale jde o funkce, které se v tuto chvíli poměrně

bouřlivě vyvíjí. Autoscaling je už na velmi dobré úrovni, autohealing zatím není implementován ve

formě, která by byla produkčně použitelná. Tato funkcionalita je nad rámec dnešního labu, ale pojďme si

alespoň popsat o co jde.

Autoscaling je funkce Heat, která umožňuje v rámci topologie automaticky naklonovat (nebo pozabíjet)

instance podle nějakých parametrů. Těmito parametry typicky bývá metrika přicházející z OpenStack

modulu Ceilometer a půjde například o zatížení CPU. Definujete tedy pravidlo, že počet web serverů se

má pohybovat mezi 2 až 8 a pokud je zátěž členů větší, než třeba 70%, nastartuje se další VM (až do

definovaného maxima). Pokud zátěž klesne pod hranici 50% a vydrží tam po nějaký čas (cool time, třeba

půl hodiny), Heat zabije nadbytečné VM. S nástupem Helion OpenStack 2.0 bude v řešení k dispozici i

load-balancer jako služba (LBaaS) a bude zajištěno i automatické přidání nových VM do load-balancing

skupiny. Důležité je také nezaměňovat autoscaling infrastruktury s možnosti autoscaling aplikací v PaaS –

v prvním případě jde jen o bootování image z template, zatímco v PaaS se jedná o komplexní

deployment aplikace, začlenění do RabbitMQ a mnoho dalších operací.

Je dobré si uvědomit, že autoscaling vyžaduje připravenost aplikace – tedy šablona vaší VM musí být

schopna si sama nathnout state i obsah (třeba ze sdílené databáze).

Autohealing implementace v Heat není v aktuální stavu doporučena pro produkci, ale pracuje se na

kompletní předělání v rámci komunity. Myšlenkou je, aby šablona udržovala svůj stav – tedy pokud

dojde k havárii některé komponenty popsané v šabloně (například zmizí VM v důsledku pádu fyzického

compute node), Heat by zajistil spuštění této VM na jiném compute node (nabootováním ze stejného

StoreVirtual volume například).

5. OpenStack API Veškeré operace, které jsme dosud dělali (a ještě MNOHO dalších) nemusíme provádět pouze

z grafického rozhraní, příkazové řádky nebo konstrukcí šablony. To všechno je dostupné i ve formě

RESTful API.

RESTful je koncept v současnosti velmi rozšířeného způsobu interakce komponent a aplikací postavený

na jednoduchých webových voláních podobně, jako přistupujete třeba na nějakou webovou stránku.

Page 33: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

32 | H P H e l i o n O p e S t a c k

URL říká jakou funkci voláte (třeba práce s volume) a přístupová metoda znamená co s ní chcete dělat

(vytvořit, přečíst, upravit, smazat). Formát dat je lidsky čitelný JSON formát. RESTful API najdete u

mnoha dalších HP produktů jako je:

iLO

OneView

Moonshot chassis manager

iMC

VAN SDN Controller

3PAR

StoreVirtual

Cloud Service Automation

Server Automation

Operation Orchestration

... a mnoho dalších

RESTful rozhraní můžete využívat v jakémkoli programovacím jazyce bez jakýchkoli proprietárních

knihoven.

V našem labu si pouze poodhalíme možnosti, nebudeme dělat nic komplexního. Využijeme toho, že

OpenStack kromě čistého API nabízí i předpřipravené knihovny pro řadu programovacích jazyků včetně

velmi oblíbeného Python (ve kterém je ostatně OpenStack napsán). Použití této SDK nám celou situaci

ještě víc zjednoduší.

Proč se může OpenStack API hodit?

Jakékoli jiné aplikace lze integrovat a vytvářet tak infrastrukturu dle jejich předpisu – například

HP Cloud Service Automation vám dá grafické designéry služeb, billing, portál pro odběratele

služeb a k tomu všemu využívá OpenStack API

API se dá použít i ke čtení, takže například produkt jako je Server Automation dokáže načítat IP

adresy nových VM, aby na ně nainstaloval potřebné patche

Všechna taková „udělátka“ budou fungovat na všech OpenStack instalacích – nejen HP Helion

OpenStack, ale i HP Helion Public Cloud a všechny další produkty třetích stran využívající

OpenStack

Vyzkoušíme si naprogramovat tři příkladové jednoduché aplikace. Připojte se přes SSH do labu (viz

předchozí instrukce) a skripty tam najdete připravené. Nejprve si každý okomentujeme v tomto textu a

následně si je spusťte. Před tím budete muset nahrát do environmental proměnných přihlašovací údaje

stejně, jak jsme to dělali u příkazové řádky (použijte příkaz source api.sh jméno heslo projekt).

První skript nám ukáže jak natáhnout přihlašovací údaje a přihlásit se ke komponentě glance, která řeší

repozitář diskových obrazů. Následně je jednoduše vypíšeme na obrazovku.

from os import environ as env

import glanceclient.v2.client as glclient

import keystoneclient.v2_0.client as ksclient

keystone = ksclient.Client(auth_url=env['OS_AUTH_URL'],

username=env['OS_USERNAME'],

Page 34: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

33 | H P H e l i o n O p e S t a c k

password=env['OS_PASSWORD'],

tenant_name=env['OS_TENANT_NAME'],

cacert=env['OS_CACERT'])

glance_endpoint = keystone.service_catalog.url_for(service_type='image')

glance = glclient.Client(glance_endpoint, token=keystone.auth_token, cacert=env['OS_CACERT'])

images = list(glance.images.list())

print 'Tak vidim tady tyto image:'

print '--------------------------'

for image in images:

print image['name']

Pokud máte základy Python, jistě nic složitého

Vyzkoušejte si tuto aplikaci, ale před tím (pokud jste přeskočili některé předchozí laby nebo se od

serveru odpojili) zavolejte (na vaše loginy upravený) příkaz source api.sh tomas.kubica helion tomas.kubica pro

nastavení environmental proměnných s přihlašovacími údaji do OpenStack. Aplikace se spouští příkazem

python následovaným jejím jménem, tedy:

tomas@helion-ProLiant-DL380-Gen9:~$ python imagelist.py

Tak vidim tady tyto image:

--------------------------

msgaas-rabbit-cluster_1.1.0.3

debian-wheezy-amd64-20140929-disk

No a je to, funguje. Vyzkoušejme něco o trochu složitějšího – pojďme vytvořit VM (s výchozím

nastavením). Aplikaci předáme požadované jméno VM jako argument, ale nechceme jen ať VM vytvoří,

ale sleduje, kdy bude aktivní. Tedy po vytvoření instance budeme informovat uživatele, že se systém

teprve utváří a až bude hotovo, vypíšeme vše co vidíme. Skript vypadá takhle:

from os import environ as env

import glanceclient.v2.client as glclient

import keystoneclient.v2_0.client as ksclient

import novaclient.v1_1.client as nvclient

import time,sys

print "Kontaktujeme OpenStack"

nova = nvclient.Client(auth_url=env['OS_AUTH_URL'],

username=env['OS_USERNAME'],

api_key=env['OS_PASSWORD'],

project_id=env['OS_TENANT_NAME'],

cacert=env['OS_CACERT'])

image = nova.images.find(name="debian-wheezy-amd64-20140929-disk")

flavor = nova.flavors.find(name="m1.tiny")

name = sys.argv[1]

print "Vytvarime novou VM " + name

instance = nova.servers.create(name=name, image=image,

flavor=flavor, key_name="MujKlic")

print "VM startuje"

booting = True

while booting:

instance = nova.servers.get(instance.id)

Page 35: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

34 | H P H e l i o n O p e S t a c k

sys.stdout.write('.')

sys.stdout.flush()

if instance.status != 'BUILD': booting = False

time.sleep(2)

print

print "VM je vytvorena a bezi"

print

print 'Tak vidim tady tyto servery:'

print '--------------------------'

servers = list(nova.servers.list())

for server in servers:

print server.status + ' ' + server.name

Vyzkoušejte to:

tomas@helion-ProLiant-DL380-Gen9:~$ python vytvorserver.py hop

Kontaktujeme OpenStack

Vytvarime novou VM hop

VM startuje

..................

VM je vytvorena a bezi

Tak vidim tady tyto servery:

--------------------------

ACTIVE hop

ACTIVE hopla

ACTIVE testik

Zopakujte to víckrát, ať máte stejně jako třeba tři spuštěné instance, protože v dalším skriptu budeme

instance naopak mazat. Následující skript si vypíše všechny instance a jednu po druhé zlikviduje.

from os import environ as env

import glanceclient.v2.client as glclient

import keystoneclient.v2_0.client as ksclient

import novaclient.v1_1.client as nvclient

import time,sys

print "Kontaktujeme OpenStack"

nova = nvclient.Client(auth_url=env['OS_AUTH_URL'],

username=env['OS_USERNAME'],

api_key=env['OS_PASSWORD'],

project_id=env['OS_TENANT_NAME'],

cacert=env['OS_CACERT'])

print 'Jdeme likvidovat VM'

print '--------------------------'

servers = list(nova.servers.list())

for server in servers:

print server.name + " konci..."

nova.servers.delete(server)

Vyzkoušejte to:

tomas@helion-ProLiant-DL380-Gen9:~$ python zabvsechny.py

Kontaktujeme OpenStack

Jdeme likvidovat VM

--------------------------

hop konci...

hopla konci...

testik konci...

Page 36: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

35 | H P H e l i o n O p e S t a c k

tomas@helion-ProLiant-DL380-Gen9:~$ nova list

+--------------------------------------+--------+---------+------------+-------------+--------------------------+

| ID | Name | Status | Task State | Power State | Networks |

+--------------------------------------+--------+---------+------------+-------------+--------------------------+

| 4005ef9e-1320-4553-87e3-173d25d1c3a4 | hop | DELETED | - | Running | default-net=192.168.1.30 |

| 2b5744d2-7c22-4f1d-97b2-d78e105f5d8f | hopla | ACTIVE | deleting | Running | default-net=192.168.1.29 |

| 6c54ae5e-1bc8-4124-865b-a430a6815fe3 | testik | ACTIVE | deleting | Running | default-net=192.168.1.28 |

+--------------------------------------+--------+---------+------------+-------------+--------------------------+

tomas@helion-ProLiant-DL380-Gen9:~$ nova list

+----+------+--------+------------+-------------+----------+

| ID | Name | Status | Task State | Power State | Networks |

+----+------+--------+------------+-------------+----------+

+----+------+--------+------------+-------------+----------+

To by pro tento lab stačilo – účelem je dát nahlédnout do možností API, ne důkladně proškolit

programování pro OpenStack.

6. Úvod do orchestrace s HP Cloud Service Automation Bude k dispozici v pozdějších verzích lab guide

7. Starejme se o vnitřek VM s Ansible

7.1. K čemu je to dobré? HP Helion OpenStack nabízí infrastrukturu jako službu – získáte výpočetní, ukládací a síťové prostředky

rychle, jednoduše a z jediného nástroje. Ukázali jsme si, že díky použití diskových obrazů, snapshotů a

možnosti modifikací OS uvnitř (například vsunutí ověřovacích klíčů nebo spuštění jednoduchého skriptu)

můžete nabootovat instanci v potřebném stavu.

Často ale chcete ještě větší flexibilitu – varieta potřebných konfigurací vnitřku instancí je příliš velká na

to, abyste chtěli mít sto různých image a hlavně se vám nechce je neustále předělávat tak, jak se

objevuje potřeba změn či instalací nějakých patchů. Chtělo by to nástroj, který by po vzniku instance

zařídil vše co je potřeba k tomu, aby se OS a aplikace nacházeli v tom správném stavu, verzi, ve všech

vhodných návaznostech. Jednoduché vyvolání skriptu, které OpenStack nabízí, v takovém případě

nebude stačit.

V rámci labu se seznámíme s dvojicí řešení zaměřených přesně na tento problém. Pokud hledáte něco

jednoduchého a open source, ukážeme si Ansible. Pokud ovšem chcete něco v plné palbě, s obrovskou

škálou šablon, grafickým prostředím a enterprise podporou, použijte HP Server Automation.

7.2. Ansible

7.2.1 Instalace V rámci labu budete používat hotovu šablonu s názvem ansible a přihlašovacími údaji ansible/ansible,

takže instalovat Ansible server nebudete muset. Pokud byste někdy potřebovali, tak buď použijte balíček

přímo z Linux OS (většinou vede na starší verzi) nebo získejte nejnovější verzi následujícím postupem:

export http_proxy=http://web-proxy.corp.hp.com:8088

apt-get update

apt-get install python-pip python-dev git -y

pip install PyYAML jinja2 paramiko --proxy=web-proxy.corp.hp.com:8088

git config --global http.proxy http://web-proxy.corp.hp.com:8088

git clone https://github.com/ansible/ansible.git

cd ansible

Page 37: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

36 | H P H e l i o n O p e S t a c k

make install

git submodule update --init --recursive

7.2.2 Příprava labu Infrastruktura, na které to budme zkoušet zahrnuje tři servery, z toho dva jsou v roli prázdných Linux

systémů a třetí bude fungovat jako Ansible server. Abychom nemuseli naklikávat potřebné věci ručně,

použijte následující Heat šablonu (už víte jak) s tím, že ve vašem projektu musí existovat klíč s názvem

MujKlic (pokud ne, šablonu si upravte na jiné jméno). Pokud máte v projektu ještě nějakou další

infrastrukturu, zrušte ji, ať máte dostatek zdrojů.

Šablona vypadá takhle:

heat_template_version: 2013-05-23

description: Ansible lab

resources:

firewall:

type: OS::Neutron::SecurityGroup

properties:

name: firewall

description: Ping, SSH, web

rules:

- protocol: icmp

- protocol: tcp

port_range_min: 22

port_range_max: 22

- protocol: tcp

port_range_min: 80

port_range_max: 80

ansible_net:

type: OS::Neutron::Net

properties:

name: AnsibleNet

ansible_subnet:

type: OS::Neutron::Subnet

properties:

network_id: { get_resource: ansible_net }

cidr: 192.168.20.0/24

allocation_pools:

- start: 192.168.20.100

end: 192.168.20.200

ansible_router:

type: OS::Neutron::Router

properties:

external_gateway_info:

network: ext-net

router_interface:

type: OS::Neutron::RouterInterface

properties:

router_id: { get_resource: ansible_router }

subnet_id: { get_resource: ansible_subnet }

ansible_port1:

type: OS::Neutron::Port

Page 38: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

37 | H P H e l i o n O p e S t a c k

properties:

network_id: { get_resource: ansible_net }

fixed_ips:

- subnet_id: { get_resource: ansible_subnet }

security_groups:

- {get_resource: firewall}

ansible_port2:

type: OS::Neutron::Port

properties:

network_id: { get_resource: ansible_net }

fixed_ips:

- subnet_id: { get_resource: ansible_subnet }

security_groups:

- {get_resource: firewall}

ansible_port3:

type: OS::Neutron::Port

properties:

network_id: { get_resource: ansible_net }

fixed_ips:

- subnet_id: { get_resource: ansible_subnet }

security_groups:

- {get_resource: firewall}

floating_ip1:

type: OS::Neutron::FloatingIP

properties:

floating_network_id: 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e

port_id: { get_resource: ansible_port1 }

floating_ip2:

type: OS::Neutron::FloatingIP

properties:

floating_network_id: 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e

port_id: { get_resource: ansible_port2 }

floating_ip3:

type: OS::Neutron::FloatingIP

properties:

floating_network_id: 3a5b5cd4-0c4b-4bc3-b44e-826c7b19556e

port_id: { get_resource: ansible_port3 }

ansible:

type: OS::Nova::Server

properties:

key_name: MujKlic

image: ansible

flavor: m1.tiny

networks:

- port: { get_resource: ansible_port1 }

client1:

type: OS::Nova::Server

properties:

key_name: MujKlic

image: debian-wheezy-amd64-20140929-disk

flavor: m1.tiny

networks:

- port: { get_resource: ansible_port2 }

client2:

Page 39: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

38 | H P H e l i o n O p e S t a c k

type: OS::Nova::Server

properties:

key_name: MujKlic

image: debian-wheezy-amd64-20140929-disk

flavor: m1.tiny

networks:

- port: { get_resource: ansible_port3 }

A toto je její výsledek:

Page 40: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

39 | H P H e l i o n O p e S t a c k

Přihlašte se teď do serveru v labu přes SSH protokol (z Putty) tak, jak už jsme to v labu dělali. Následně

ověřte, že máte přístup do instance s Ansible serverem (IP adresu najdete v seznamu běžících instancí):

tomas@helion-ProLiant-DL380-Gen9:~$ ssh [email protected]

The authenticity of host '172.16.2.29 (172.16.2.29)' can't be established.

ECDSA key fingerprint is 58:dd:b2:b3:d2:1e:cb:d0:24:eb:21:74:e8:2a:a2:52.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '172.16.2.29' (ECDSA) to the list of known hosts.

[email protected]'s password:

Linux ansible 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Thu Apr 2 07:35:51 2015 from 10.0.10.254

ansible@ansible-ansible-mq5ltt3vkg5p:~$ ls

ansible demo.yml hosts index.html proxy.sh

ansible@ansible-ansible-mq5ltt3vkg5p:~$

7.2.3 Základní operace Nejprve do naší ansible VM chceme dostat privátní klíč, který v rámci našeho projektu využíváme (stáhli

jste si ho v prvním labu z GUI). Můžete ho nakopírovat přes SCP nebo přes schránku – zadejte příkaz cat >

mujklic.pem a následně označte obsah tohoto souboru na vašem počítači a v Putty okně klikněte na pravé

tlačítko. Operaci ukončete stisknutím CTRL+D.

Změňte bezpečnostní práva k tomuto souboru a zkuste se připojit – vše by mělo proběhnout bez

zadávání hesla.

chmod 600 adminpair.pem

ansible@test-1:~$ ssh [email protected] -i mujklic.pem

Linux debian 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

debian@client:~$ exit

logout

Connection to 192.168.11.106 closed.

Pro Ansible vytvoříme seznam koncových OS, na které budeme sahat a současně je můžeme dát do

skupin tak, aby se nám s nimi dobře pracovalo. Vytvořte soubor hosts zadáním příkazu

nano hosts

Do souboru napiště název nové skupiny (například helionlab) a IP adresu (či DNS) klintských instancí.

[helionlab]

192.168.11.106

192.168.11.107

Ansible může pracovat v ad-hoc režimu, tedy že defacto můžeme v reálném čase provádět hromadné

operace s množinou serverů. Vyzkoušejme si jednodchý „ping“, kdy Ansible zjistí, jestli má do všech

našich systémů přístup. V průběhu můžete být dotázáni, zda si chcete uložit host key (pokud jste se ještě

Page 41: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

40 | H P H e l i o n O p e S t a c k

přes SSH do těch dalších instancí nepřipojovali) – dejte jednoduše ano. V příkazu se odkážeme na náš

klíč, přihlašovat se budeme jako uživatel debian a specifikujeme seznam ovládaných klientů v souboru

hosts.

ansible@ansible:~$ ansible helionlab -m ping --private-key mujklic.pem -i hosts -u debian

192.168.11.106 | success >> {

"changed": false,

"ping": "pong"

}

192.168.11.107 | success >> {

"changed": false,

"ping": "pong"

}

Máme odpovědi, Ansible tedy dokáže naše další VM spravovat – v tuto chvíli už je tedy jedno, jestli

budou dvě nebo jich bude tisíc. V ad-hoc režimu můžeme například poslat do těchto VM nějaký soubor a

dělat další základní operace.

7.2.4 Názorný příklad – web server Hlavní síla ale dříme v playbook, tedy šablonách. V těch řeknete co na cílovém systému očekáváte a

Ansible to zařídí. Dělá se to formou modulů a rolí a celá řada jich přichází předinstalována a další si

můžete stáhnout.

Zkusíme si na cílové systémy dostat webový server a dát do něj novou úvodní stránku. Vytvořte

příkazem nano index.html primitivní webovou stránku:

<h1>HP je cool!</h1>

Teď si uděláme playbook, tedy předpis, jak má server ve výsledku vypadat co do nainstalovaných a

nastavených aplikací. Ansible používá lidsky dobře čitelného formátu YAML, podobně, jako OpenStack

Heat. V labové image už by měl být připraven soubor demo.yml, pokud ne vytvořte jej:

---

- hosts: helionlab

sudo: yes

tasks:

- name: Installs nginx web server

apt: pkg=nginx state=installed update_cache=true

environment:

http_proxy: http://web-proxy.corp.hp.com:8088

notify:

- start nginx

- name: Upload default index.html for host

copy: src=index.html dest=/usr/share/nginx/www/ mode=0644

handlers:

- name: start nginx

service: name=nginx state=started

Co se tam děje? Říkáme, že balík serverů ve skupině helionlab má mít nainstalovaný software NGINX,

což je open source webový server. Dále chceme do serveru nahrát novou startovací webovou stránku a

když se vše podaří, server nastartovat. Může být jeden nebo tisíc, to nehraje roli.

Page 42: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

41 | H P H e l i o n O p e S t a c k

Nejdřív si zkuste, že na serveru aktuálně žádný web neběží. Abychom nemuseli do grafického prostředí,

použijeme textový „prohlížeč“ curl (po chvilce marného čekání zmáčněte CTRL+C):

ansible@ansible:~$ curl 192.168.11.106

^C

ansible@ansible:~$ curl 192.168.11.107

^C

Žádný web tam neběží. Použijme teď Ansible na instalaci a konfiguraci potřebného software:

ansible@ansible:~$ ansible-playbook demo.yml -u debian -i hosts --private-key=mujklic.pem

PLAY [prvnidemo] **************************************************************

GATHERING FACTS ***************************************************************

ok: [192.168.11.106]

ok: [192.168.11.107]

TASK: [Installs nginx web server] *********************************************

changed: [192.168.11.106]

changed: [192.168.11.107]

TASK: [Upload default index.html for host] ************************************

changed: [192.168.11.106]

changed: [192.168.11.107]

NOTIFIED: [start nginx] *******************************************************

changed: [192.168.11.106]

changed: [192.168.11.107]

PLAY RECAP ********************************************************************

192.168.11.106 : ok=4 changed=3 unreachable=0 failed=0

192.168.11.107 : ok=4 changed=3 unreachable=0 failed=0

Zdá se, že to dobře dopadlo – běží tam náš nový web server?

ansible@ansible:~$ curl 192.168.11.106

<h1>HP je cool!</h1>

ansible@ansible:~$ curl 192.168.11.107

<h1>HP je cool!</h1>

7.3. HP Server Automation

7.2.5 Připojení

8. HP Helion Development Platform Bude k dispozici v pozdějších verzích lab guide

9. Shrnutí a závěr Bude k dispozici v pozdějších verzích lab guide

10. Další zdroje Bude k dispozici v pozdějších verzích lab guide

Page 43: HP HELION OPENSTACK LAB GUIDE ČÁST DRUHÁ – POKROČILÉ

42 | H P H e l i o n O p e S t a c k