OpenStack installeerimine ja kasutamine Debianil

Allikas: Kuutõrvaja
                                        Roheline.jpg Toores. Ehk seda pala võib täiendada.

Kui on huvi, tahtmist ja teadmist, siis võib vabalt seda kirjatükki täiendada.

Sissejuhatus

OpenStack [1] on oma olemuselt võrreldav Proxmox Virtual Environmentiga (vaata ka Proxmox VE 2.x juhendit). Ehk siis tegemist on klastriga, kuhu võimalik luua virtuaalserverite pilv. Oma ehituselt ja võimalustelt on samas OpenStack Proxmoxist kõvasti keerukam ja selle paigaldamine on samuti tunduvalt raskem. Lisaks on OpenStacki juures mõeldud kohe rohkem teenuste automaatsele massilisele tekitamisele. Nii Proxmox kui nt Vmware toetavad pigem lahendust, kus saab enda varasemad füüsilised ja unikaalsed serverid kergelt virtuaalmasinateks muuta ning tekitada uusi servereid käsitööna. OpenStack tõrjub sellist lahendust ning propageerib uutlaadi mõtlemist, kus virtuaalmasinaid paigaldatakse vabrikumeetodil, valmis templeatidest ühe hiireklõpsuga ja kõik virtuaalmasinad on juba eos varustatud mõningate spetsiifiliste openstacki init skriptidega, et saada halduskeskkonnalt näiteks teada mountpoindid ja ssh võtmed. See muidugi ei tähenda nagu ei saaks oma vanu servereid üldse OpenStacki konvertida, saab täiesti aga sellega kaovad mõned lisavõimalused.

Mõned faktid

  • Openstack on kirjutatud pythonis
  • Koosneb suurest hulgast teenustest, millest igaüks omab APIt ja on kontrollitavad veebilidiese (horizon) kaudu
  • Veebiliides (dashboard - horizon) on django rakendus
  • Sellele on ehitatud mitmeid suuri kommertsiaalseid pilveteenuseid

Mõned plussid

  • Väga põhjalik ja läbi veebi konfigureeritav võrguhaldus, võimalik on tekitada virtuaalmasinatele kerge vaevaga virtuaalseid võrke ja läbi pluginate suudab OpenStack ka teatud tootjate switche hallata.
  • Võimalikult automatiseeritud virtuaalmasinate tekitamine
  • Ühilduv nii Vmware kui Amazoniga

Mõned miinused

  • Paigaldamise keerukus
  • Puudub virtuaalmasinate automaatne migreerimine mittetöötavalt nodelt (on roadmapis kirjas samas)
  • Võrguosas puudub QOS (aga samuti arendamisel)
  • Keskteenuste dubleerimine keerukas
  • Proxmoxiga ühilduvus puudub kuna seal pole libvirti kasutuses

OpenStacki komponendid

Alustada tuleks sellest, et kõige olulisemad esmased komponendid on keystone, rabbitmq ja mysql. Need on NÖ baasteenused, neid kasutavad peaaegu kõik ülejäänud openstacki komponendid ja seetõttu tuleks nad seadistada ja konfigureerida kõige esimesena. Mysql on vajalik teenuste info hoidmiseks. Keystone on framework autentimiseks ja autoriseerimiseks kõigile openstaki teenustele. Annab võimaluse lisada kasutajaid ja gruppe ning hallata nende vahelisi õigusi (nt erinevate VMide käivitamine jms) ning säilitab endas ka kataloogi kõigi ülejäänud teenuste API ühenduspunktide asukohtadest. Rabbitmq (AMQP server) on aga teenuste vaheliste operatsioonide kordineerimiseks ja staatus teadete vahetamiseks.

Ülejäänud teenustest on esmase ja lihtsa openstack clustri koostamiseks vajalikud nova, neutron ja glange. Nova tegeleb virtuaalmasinate käivitamise, loomise jms haldusega. Neutron tegeleb võrgundusega ja glance pakub kujutiste ehk iso/image failide haldust.

Openstack havana conceptual arch.png

  • Ceilometer - keskne mõõtmistulemuste koguja (idee on see, et mitu rakendust ei peaks koguma samu andmeid)
  • Cinder - salvestusseadmete (kõvaketaste) halduseks
  • Glance - kujutiste haldur (ingl k. image manager). Lihtsamalt öelduna - haldab iso faile.
  • Heat - võimaldab kasutada (käivitada, tekitada) malle (ingl k. template)
  • Horizon - kasutajaliides (GUI - Graphical User Interface - graafiline kasutajaliides)
  • Keystone - kasutajatehaldus.
  • Nova - vastutab arvutuste ja võrgu eest (compute and network manager). Lisaks käivitab sõlmi, loob tõmmiseid (ingl k. snapshot) ja volumesid.
  • Neutron - teeb võrguliidesest teenuse (service) erinevate seadmete vahel (nt virtuaalsed võrgukaardid)
  • Swift - andmete pilveteenus, st võimaldab andmeid hoida virtuaalsetes konteinerites.
  • Trove - andmebaas kui teenus

Komponente on veel ja väga palju, sh neid arendatakse kogukonna poolt kogu aeg juurde. OpenStacki üks eelis ongi välja toodud interneti materjalide põhjal ja arutelu tulemusena selle paindlikkus ja suur komponentide hulk, mida siis võimalik valida vastavalt vajadusele.

Lihtsustatud skeem virtuaalmasina loomisel täidetavatest ülesannetest ja mis komponendid mis ülesandeid seejuures täidavad.

Openstk.png

Tähele tasub panna, et OpenStacki installeerimiseks on vääääääääga palju variante ja võimalusi. Neid on isegi rohkem kui täpitähti eelmises lauses. AGA. Tähtis on see, et installeerimisel tuleb valida õige lähenemine.

OpenStacki paigaldamine

Lihtsalt testimiseks ja proof of consept jaoks oleks soovitatav ehitada kolmest masinast koosnev seadistus. Ilmselt oleks hea ka production clustri loomisel alustada esialgu kolmest serverist ja liikuda sealt siis edasi lisades compute nodesid ja dubleeridest olulisi keskpunkte.

Openstack.png

OpenStacki käsitsi paigaldus

Käsitsi paigaldusel on tundub sobivam teha samm-sammult läbi OpenStacki mõni enda juhend http://docs.openstack.org/kilo/install-guide/install/apt/content/

Testcluster võiks minimaalselt koosneda kolmest serverist.

1. Controller node (server kus asuvad kõik olulised openstacki teenused)

2. Network ehk ainus masin mis ühendatud otse internetiga ja mis pakub virtuaalmasinatele võrguühendust läbi dünaamiliselt loodud võrkude.

3. Compute ehk masin kus asuvad virtuaalmasinad.

Need kolm serverit ei pea olema füüsilised masinad vaid võivad olla täiesti vabalt ka KVM noded.

Nagu juba ülal öeldud on vaja esmalt paigaldada rabbitmq, keystone ja mysql. Suurem osa (julgelt 80%) ülejäänud teenuste konfimist on suuremas osas teenuste rabbitmq ja mysqli külge ühendamine, mysqli populeerimine ja keystonesse kasutajate ning API lõppunktide kirjeldamine. Suurim probleem ongi käsitsipaigaldamise juures selle suur ajakulu ning ka vigade tekkimise võimalus tänu sellele, et pea väsib ning konfifaili võivad hakata tekkima apsakad.

Võrgunduse osas tasub silmas pidada, et testimisel kasutame GRE tunneleid.

Controller nodel võiks olla vähemalt 4G mälu, isegi 2G puhul kippus mul oom-killer rakenduma ja mysqli kärpima.

Paigaldus Crowbar abil

wget --no-check-certificate -O - \
https://raw.githubusercontent.com/opencrowbar/core/develop/tools/crowbar-install.sh | source /dev/stdin

Misjärel teatatakse

Complete!
/root
Remember to populate /tftpboot/files/raid
See: https://github.com/opencrowbar/hardware/tree/master/doc

Files can be pulled from these links after accepting licenses.
  http://www.lsi.com/downloads/Public/Host%20Bus%20Adapters/Host%20Bus%20Adapters%20Common%20Files/SAS_SATA_6G_P19/SAS2IRCU_P19.zip
  http://www.lsi.com/downloads/Public/RAID%20Controllers/RAID%20Controllers%20Common%20Files/8.07.14_MegaCLI.zip

Remeber to populate /tftpboot/isos
You will need to place a supported ISO image or images into this directory
before running production.sh
More details cab be found here:
See: https://github.com/opencrowbar/core/tree/master/doc/deployment-guide/adding-operating-systems.md

Seejärel käivitada

# cd /opt/opencrowbar/core
# ./production.sh malakas.eenet.ee

Ning seejärel minna urlile

http://192.168.124.10:3000

https://crowbar.github.io/docs/getting-started/install-admin-node.html

Esmalt tuleb installida crowbar master server, millelt ülejäänud noded pxed kasutades boodivad ja kus asub veebiliides nendele vajaliku takvara paigaldamiseks

Kõik noded booditakse üle pxe üles kergekaalulise CentOS baasil opsüsteemiga, mis tuvastab raua ja raporteerib crowbarile enda valmisolekust.

https://github.com/crowbar/barclamp-openstack/blob/release/fred/master/crowbar_framework/public/openstack_users_guide.pdf

Esimese sammuna: Power on the nodes. They will PXE boot from the Crowbar admin node.

OpenStacki paigaldamine devstack skriptiga

Käsitsi kõigi komponentide paigaldus on raske ja tüütu protsess. Seda võib teha juba kogenenud faasis, kui teid valdab tunne, et olete OpenStacki ekspert. Küll aga esimeseks installatsiooniks soovitab käesoleva kirjatöö autor kasutada eelvamistatud skripti, mis on ära mainitud (ja soovitatud kasutamiseks) ka OpenStacki enda kodulehel.

Antud juhendi koostamisel on operatsioonisüsteemiks valitud Debian 7.3.

Loomulikult enne installeerimist peab olema korda seatud server / virtuaalmasin, millel soovite töökeskkonda katsetada. Nagu mainitud, katsetamiseks sobib ka virtuaalkeskkond, küll aga ei suuda mõelda olukorrale, kus virtuaalserverile loodud keskkonnale luuakse veel omakorda virtuaalserverid. St virtualiseerimise virtualiseerimine.

Lisaks peab olema serverile külge ühendatud vähemalt kaks kõvaketast, millest üks võib olla väiksem - sinna läheb installeeritakse Debian ja muud süsteemsed failid ning teine (soovitatavalt suurem), mis jagatakse LVM'iga välja ja kuhu peale installeeritakse virtuaalmasinad ja nendega seotud failid.

Allpool leiduv skript (.sh fail) tuleks käivitada kasutajaõigustes ja administraatori õiguseid kasutada ainult vastavate käskude juures, kus see on eraldi välja toodud!


sudo installeerimine

OpenStacki paigaldamiseks on kõigepealt vaja Debianile installeerida lisakomponent sudo. Kuna see skript on valminud Ubuntu jaoks (millel on sudo juba "tehase poolt" installeeritud, siis on vaja mõningad mööndused teha). Selleks tuleb käivitada administraatori õigustes käsk

apt-get install sudo

Pärast komponendi installeerimist on vaja iseenast lisada sudoers listi, seda saab teha, kui käivitada administraatori õigustes käsk

visudo

Faili kõige lõppu tuleks lisada rida

teie_kasutajanimi      ALL=(ALL) ALL

See garanteerib selle, et teie kasutaja saab käivitada sudo käske. Pärast muudatuse tegemist väljuda ja fail salvestada.

Ettevalmistus seega tehtud.

GITi paigaldamine

Kui serverisse pole juba installeeritud, siis on vaja paigaldada git, käivitades alljärgnev käsk administraatori õigustes

apt-get install git

Võib ka kasutada vastpaigaldatud sudo pakki, siis on vaja käivitada käsk kasutajaõigustes

sudo apt-get install git

GITi repositooriumi lisamine

Repositoorium tõmbab aktiivsesse kohvrisse devstacki nimelisse kausta skripti jaoks vajalikud failid.

git clone https://github.com/openstack-dev/devstack.git

Skripti käivitamine

Skript paigaldab vaikimisi konfiguratsiooniga järgnevad komponendid: Ceilometer, Cinder, Glance, Heat, Horizon, Keystone, Nova, Neutron, Swift, and Trove. Paigaldatavad komponendid on ära toodud siin samas juhendis (pisut allpool).

Täpsemalt on skript lahti kirjutatud ja seletatud devstack'i lehel [2] (Devstack on skripti autor ja jagaja, materjal inglisekeelne).

Installeerimise käivitamiseks tuleb minna devstacki kausta ja käivitada skript. (NB! kasutajaõigustes)

cd devstack;
./stack.sh;

Installatsioon võtab tõenäoliselt aega, küll aga ei tohiks arvuti juurest kaugele minna, kuna vahepeal on vajalik kasutaja sekkumine. Muuhulgas küsitakse erinevaid paroole ja võtmeid.

Kui installatsioon on lõppenud, siis on OpenStack ligipääsetav teie arvuti IP-aadressilt, kasutades http protokolli. Näiteks http://192.168.56.1

Enne alustamist on soovitatav käsitsi tekitada LVMi kasutades LVM grupp ja mõni plokkseade (kõvaketas) sinna ka liita. Vastasel juhul hakatakse kasutama arvuti põhilist ketast, mis installeerimisel valides oli ju pisem. Kui see on aga soov, siis palun väga. :)

Kettad, NAS seadmed jms

Openstack Block Storage ehk Cinder pakub blokkseadmeid kasutajate instantsidele. Võimalik on kasutada paljusid erinevaid ketta allikaid nagu NAS/SAN, NFS, iSCSI, Ceph jne. Block Storage API ja scheduler teenus töötavad tüüpiliselt controlleril. Voluumi teenused võivad töötada controlleril, compute nodedel või eraldi storage nodedes, sõltuvalt mis storage draiverit parasjagu kasutatakse.

https://www.rdoproject.org/Using_Ceph_for_Cinder_with_RDO_Havana

Võrgud

TODO

Manageeritavad ühtetüüpi switchide nt cisco puhul saab kasutada spetsiifilisi neutroni pluginaid, mis automaagiliselt switche konfigureerivad https://wiki.openstack.org/wiki/Neutron/ML2/MechCiscoNexus

Kui kasutuses on mittemanageeritavad ja erinevate tootjate switchid on kõige mõistlikum kasutada gre tunneleid.

1.png

A,B,C instansi võrk ehk instantsi eth0 mis ühendatud tap seadmega. Tap seade on omakorda ühendatud linuxi bridgega. Miks mitte kohe ühendada tap seade br-int seadmega? Openstack kasutab iptables reegleid tap seadmel, et rakendada turvagruppe ja OpenVswitch ei toeta iptables reegleid, mis on lisatud otse tap seadmele, mis istub openvswitchi pordi taga.

D,E Integratsioonivõrk,

F,G gre tunnel sild

Floating IP

Floating ehk ujuv-ip on võimalus virtuaalmasinatele väliseid aadresse jagada, see ei ole virtuaalmasina opsüsteemile nähtav. Ujuva IP lisamine realiseeritakse nimelt NAT reeglina qrouteri kõhus.

Pilt ujuva ip realiseerimisest haldusliideses

Insta.png

# ip netns exec qrouter-f737fffc-3267-47c9-8af5-812ec3f52822 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
13: qr-d5c0fa9c-e7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether fa:16:3e:50:ad:33 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.1/24 brd 192.168.2.255 scope global qr-d5c0fa9c-e7
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe50:ad33/64 scope link 
       valid_lft forever preferred_lft forever
14: qg-743e5b0a-e8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default 
    link/ether fa:16:3e:9c:43:0e brd ff:ff:ff:ff:ff:ff
    inet 193.40.55.91/25 brd 193.40.55.127 scope global qg-743e5b0a-e8
       valid_lft forever preferred_lft forever
    inet 193.40.55.90/32 brd 193.40.55.90 scope global qg-743e5b0a-e8
       valid_lft forever preferred_lft forever
    inet6 2001:bb8:2001:2:f816:3eff:fe9c:430e/64 scope global dynamic 
       valid_lft 86377sec preferred_lft 14377sec
    inet6 fe80::f816:3eff:fe9c:430e/64 scope link 
       valid_lft forever preferred_lft forever

Iptablesi reeglid ruuteris

# ip netns exec qrouter-f737fffc-3267-47c9-8af5-812ec3f52822 iptables -t nat -S neutron-l3-agent-float-snat
-N neutron-l3-agent-float-snat
-A neutron-l3-agent-float-snat -s 192.168.2.3/32 -j SNAT --to-source 193.40.55.90

Lihtsa võrgu skeem veebiliideses

Vork.png

Üks asjalik blogipost võrgundusest https://fosskb.wordpress.com/2014/06/10/managing-openstack-internaldataexternal-network-in-one-interface/

Üks ametlik põhjalik ülevaade https://wiki.openstack.org/wiki/Neutron/DVR_L2_Agent

Ja teine ametlik ülevaade http://docs.openstack.org/havana/install-guide/install/apt/content/section_networking-routers-with-private-networks.html

http://networkheresy.com/2012/06/08/the-overhead-of-software-tunneling/ Mõned võrgutestid gre tunnelite võimekuse kohta

Virtuaalmasinad ja pilveteadlikud operatsioonisüsteemide tõmmised

Vaikimisi vajab OpenStack virtuaalmasinate tekitamiseks spetsiaalselt ettevalmistatud operatsioonisüsteemiga kettatõmmiseid. Nende tõmmise hankimise üheks kohaks on näiteks http://docs.openstack.org/image-guide/content/ch_obtaining_images.html

Tegemist on nn cloud-aware ehk pilveteadlike utiliitidega nt Ubuntupuhul CloudInitiga https://help.ubuntu.com/community/CloudInit varustatud operatsioonisüsteemidega, mis suudavad iseseisvalt hankida endale võtmed, mountpoindid, hostnamed jms vajaliku. OpenStacki poolelt on olemas selle info pakkumiseks metadata teenus http://docs.openstack.org/admin-guide-cloud/content/section_metadata-service.html

Paljud vähemtuntud operatsioonisüsteemid saab käsitsi ette valmistada. Näiteks gentoo jaoks on juhend siin http://terrarum.net/blog/creating-a-gentoo-cloud-image.html ning võimalik on kasutada isegi FreeBSD'd http://docs.openstack.org/image-guide/content/example-freebsd-image.html mis kasutab bsd-cloudinit. Windowsi installiks leiab aga juhendi järgnevalt urlilt http://docs.openstack.org/image-guide/content/windows-image.html

Vaikimisi floating IP'd pingida ei saa. Selleks tuleb lisada default security gruppi icmp-all reegel, näiteks dashboardi kaudu või käskudega

$ nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 
$ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0        

Paljudel pilvepõhistel opsüsteemidel pole kasutajanime/parooli põhine ligipääs lubatud.

Logimiseks saab kasutada enamasti tekitatud võtit

$ ssh -i (Key) -l ubuntu (Instance IP)

Üks cloudistatud operatsioonisüsteemi eelis on see, et ta saadab kõik enda konsoolilogi ka haldusliidesele, mis selle talletab ja teeb paljude teenuste stardivigade või muude kasutuses olevate süsteemides tekkinud vigade leidmise kergemaks.

Vaade stardilogile läbi veebiliidese

Logi.png

Metadata teenusest ja selle konfigureerimisest leiab rohkem infot blogipostist http://www.sebastien-han.fr/blog/2012/07/11/play-with-openstack-instance-metadata/ või siit https://vietstack.wordpress.com/2014/09/27/introduction-of-metadata-service-in-openstack/

Kuidas metadata küsimine detailselt läbi network node käib saab vaadata alljärgneval skeemil

Neutron-metadata-dhcp-agent.png

Lisame nt glancesse ubuntu ketta

# wget http://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img -P /var/kvm/images
# glance image-create --name="Ubuntu1404" --is-public=true --disk-format=qcow2 --container-format=bare < /var/kvm/images/ubuntu-14.04-server-cloudimg-amd64-disk1.img
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | fc56f0c5e6ff27d905feda89d5618fc9     |
| container_format | bare                                 |
| created_at       | 2015-07-06T13:07:19.000000           |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
| id               | b7530024-778d-4aa8-b43e-847480affaa0 |
| is_public        | True                                 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | Ubuntu1404                           |
| owner            | dd13d7a0c6c64aacb8e128ee11078849     |
| protected        | False                                |
| size             | 257819136                            |
| status           | active                               |
| updated_at       | 2015-07-06T13:07:28.000000           |
| virtual_size     | None                                 |
+------------------+--------------------------------------+

Ja saame nüüd minna ja startida instance üles.

OpenStacki kasutamine

Administratsioonipaneelis avaneb kohe kaks vaadet - on projektivaade ja administraatorivaade. Analüüsime neid lähemalt. Administratsioonipaneel on jagatud kaheks - vasakul äärealal on menüü ja paremal pool suuremana sisu.

Openstackadmin.png

Projektivaade

Projektivaatest on ka pilt (vt üleval pool).

Loomulikult saab esimese asjana rippmenüüst vahetada projekti, mille kallal töötatakse.

Sisuosas on esmakohal ära toodud piirangud - iga projekti kohta on võimalik ära määrata piirangud, missugust arvutusvõimsust antakse. Põhiinfona võiks välja tuua, et hetkel on sellel projektil võimalik luua 10 virtuaalmasinat (instance), kasutada kokku 20 virtuaalset protsessorit (VCPU) ja 50GB RAMi. Loomulikult on muudki piirangud (kettaid, kõvakettamaht jne). Piiranguid saab administraator iga projekti jaoks suurendada.

Vasakult menüüst saab valida nt Instances - tegemist on siis virtuaalmasinate haldusega selles projektis. Kui oleme harjunud looma uue virtuaalmasina, siis OpenStacki puhul on vaja see käivitada (ingl k. launch).

Kokkuvõte

Kopeeritud OpenStacki dokumentatsioonist: The OpenStack Block Storage service is not a shared storage solution like a Storage Area Network (SAN) of NFS volumes, where you can attach a volume to multiple servers. With the OpenStack Block Storage service, you can attach a volume to only one instance at a time.

- Päris suur miinus, minu arust - ühte volumet pole võimalik mitme masina taga kasutada.

- ega hästi tööle ei saanud

Lingid

https://docs.mirantis.com/openstack/fuel/fuel-6.0/reference-architecture.html

http://enakai00.hatenablog.com/entry/20130606/1370487001

http://www.chenshake.com/openstack-neutron-capture/ Neutroni võrgust mõned slaidid

http://getcloudify.org/2014/05/14/openstack-neutron-networking-nova.html

https://wiki.debian.org/OpenStackHowto

http://ssahinkoc.blogspot.com/2014/06/migration-from-proxmox-to-openstack.html

http://www.drdobbs.com/web-development/project-of-the-month-openstack-a-univers/231902601

http://docs.openstack.org/developer/openstack-ansible/ Openstack-ansible paigaldamisviis