OpenStack installeerimine ja kasutamine Debianil
Toores. Ehk seda pala võib täiendada.
Kui on huvi, tahtmist ja teadmist, siis võib vabalt seda kirjatükki täiendada.
Sisukord
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.
- 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.
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.
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
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.
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.
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
# 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
Ü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
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
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.
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