Sissejuhatus pilveinfrastruktuuri vÔrku

Sissejuhatus pilveinfrastruktuuri vÔrku

Pilvearvutamine tungib aina sĂŒgavamale meie ellu ja ilmselt ei ole ĂŒhtegi inimest, kes ei oleks kunagi kasutanud mĂ”nda pilveteenust. Kuid mis on Ă”ieti pilv ja kuidas see töötab, teab enamik inimesi vaid idee tasandil. 5G muutub juba reaalsuseks ning telekommunikatsiooni infrastruktuur hakkab liikuma traditsioonilistelt lahendustelt pilvelahendustele, nagu see toimus ĂŒleminekul tĂ€ielikult fĂŒĂŒsilistelt lahendustelt virtuaalsetele "poodidele".

TÀna rÀÀgime pilve infrastruktuuri sisemaailmast, keskendudes eriti vÔrgutehnoloogia aluste kÀsitlemisele.

Mis on pilv? Kas see on lihtsalt virtualiseerimine — vaade kĂŒlje pealt?

VĂ€ga loogiline kĂŒsimus. Ei — see ei ole virtualiseerimine, kuigi ilma selleta ei saa. Vaatame kahte mÀÀratlust:

Pilvearvutamine (edaspidi Pilv) — see on mudel, mis pakub kasutajasĂ”bralikku juurdepÀÀsu jaotatud arvutusressurssidele, mis tuleb kĂ€ivitada ja aktiveerida nĂ”udmisel minimaalse viivituse ja minimaalsete kuludega teenusepakkuja poolt.

Virtualiseerimine — see, et vĂ”imalus jagada ĂŒks fĂŒĂŒsiline ĂŒksus (nĂ€iteks server) mitmeks virtuaalseks, suurendades seelĂ€bi ressursside kasutust (nĂ€iteks oli teil 3 serverit, mis töötasid 25-30% ulatuses, pĂ€rast virtualiseerimist saate 1 serveri, mis töötab 80-90% ulatuses). Loomulikult kasutab virtualiseerimine osa ressurssidest — peate toitma hĂŒperviisorit, kuid praktika on nĂ€idanud, et vaeva tasub end Ă€ra. Ideaalne nĂ€ide virtualiseerimisest on VMWare, mis valmistab virtuaalseid masinaid suurepĂ€raselt, vĂ”i nĂ€iteks KVM, mis mulle rohkem meeldib, kuid see on juba maitse kĂŒsimus.

Me kasutame virtualiseerimist, isegi seda mĂ€rkamatagi, isegi rauavĂ”rgu ruuterid kasutavad juba virtualiseerimist — nĂ€iteks viimastel versioonidel JunOS operatsioonisĂŒsteem installitakse virtuaalse masina peale real-time linux distributsiooni (Wind River 9). Kuid virtualiseerimine ei ole pilv, kuid pilv ei saa eksisteerida ilma virtualiseerimiseta.

Virtualiseerimine on ĂŒks telliskividest, mille peal pilv ehitatakse.

Pilve loomiseks, lihtsalt kogudes mitu hĂŒperviisorit ĂŒhe L2 domeeni alla, lisades paar yaml mĂ€ngu, et automaatselt mÀÀrata VLAN-e mĂ”ne Ansible'i kaudu, ja tĂ”mmates selle peale midagi nagu koordineerimissĂŒsteem virtuaalsete masinate automaatseks loomiseks — ei saa. TĂ€psemalt, see on vĂ”imalik, kuid saadud Frankenstein ei ole see pilv, mis meile vajalik on, kuigi vĂ”ib-olla on see kellegi unistus. Lisaks, kui vĂ”tta nĂ€iteks OpenStack — see on ka tegelikult ĂŒks osa Frankensteinist, aga jĂ€tame selle praegu kĂ”rvale.

Aga ma mÔistan, et antud mÀÀratlusest ei ole tÀpselt selge, mida tÔeliselt pilveks nimetada.

SeetÔttu on NIST-i (Rahvuslik Standardite ja Tehnoloogia Instituut) dokumendis vÀlja toodud 5 pÔhijooned, millega pilvine infrastruktuur peab olema varustatud:

Teenuse pakkumine nĂ”udmisel. Kasutajale peab olema antud vaba juurdepÀÀs eraldatud arvutiressurssidele (nt vĂ”rgud, virtuaalsed kettad, mĂ€lu, protsessorite tuumad jne), ning need ressursid peavad olema automaatselt kĂ€ttesaadavad — st ilma teenuse pakkuja sekkumiseta.

Teeninduse laialdane kÀttesaadavus. JuurdepÀÀs ressurssidele peab olema tagatud standardsete mehhanismide kaudu, et vÔimaldada kasutamist nii tavaliste PC-de, Ôhukeste klientide kui ka mobiilsete seadmete poolt.

Ressursside ĂŒhisuse loomine. Ressursside ĂŒhisused peavad tagama samal ajal ressursside pakkumise mitmele kliendile, tagades klientide isoleerituse ning takistades omavahelist mĂ”ju ja ressursside pĂ€rast konkureerimist. Ühisused sisaldavad ka vĂ”rgustikke, mis tĂ€hendab, et on vĂ”imalik kasutada kattuvat adresseerimist. Ühisused peavad toetama skaleerimist nĂ”udmise pĂ”hja. Ühisuste kasutamine vĂ”imaldab tagada vajaliku teenuste katkestusteta kĂ€ttesaadavuse taseme ja fĂŒĂŒsiliste ning virtuaalsete resource'ide abstraktsiooni — teenuse saajale antakse lihtsalt tema soovitud ressursside komplekt (kus need ressursid fĂŒĂŒsiliselt asuvad, mitmel serveril ja lĂŒlititel — klienti ei huvita). Siiski tuleb arvesse vĂ”tta, et teenusepakkuja peab tagama nende ressursside lĂ€bipaistva varundamise.

Kiire kohandamine erinevatesse tingimustesse. Teenused peavad olema paindlikud — kiire ressursside pakkumine, nende ĂŒmberjaotamine, ressursside lisamine vĂ”i vĂ€hendamine kliendi nĂ”udmisel, samas peab kliendil olema tunne, et pilveressursid on piiramatud. Lihtsuse huvides, nĂ€iteks, te ei nĂ€e hoiatust selle kohta, et teie Apple iCloudis on osa ketta ruumist kadunud, kuna serveris lĂ€ks kĂ”vaketas katki, kuid kĂ”vakettad vĂ”ivad tĂ”epoolest kahjustuda. Lisaks on teie teenuse vĂ”imalused praktiliselt piiramatu — kui vajate 2 TB, siis mingeid probleeme ei ole, lihtsalt maksite ja saite. Sarnast nĂ€idet on vĂ”imalik tuua ka Google Drive’i vĂ”i Yandex.Diski kohta.

Pakutava teenuse mÔÔtmise vĂ”imalus. PilvesĂŒsteemid peavad automaatselt jĂ€lgima ja optimeerima tarbitavaid ressursse, samas peavad need mehhanismid olema lĂ€bipaistvad nii kasutajale kui teenusepakkujale. See tĂ€hendab, et teil on alati vĂ”imalus kontrollida, kui palju ressursse te ja teie kliendid kasutate.

Oluline on arvestada, et need nÔuded on enamikul juhtudel seotud avaliku pilvega. SeetÔttu vÔivad need privaatse pilve (st ettevÔtte sisemiste vajaduste jaoks loodud pilve) puhul olla pisut kohandatud. Siiski peavad need olema tÀidetud, vastasel juhul ei saavuta me kÔiki pilveteenuste eeliseid.

Miks me vajame pilve?

Kuid iga uus vĂ”i juba olemasolev tehnoloogia, iga uus protokoll luuakse millegi jaoks (vĂ€lja arvatud RIP-ng, loomulikult). Protokoll protokolliks — ei ole kellelegi vajalik (vĂ€lja arvatud RIP-ng, loomulikult). On loogiline, et pilv luuakse selleks, et pakkuda kasutajale/klientidele mingit teenust. Me kĂ”ik oleme tuttavad vĂ€hemalt paariga pilveteenusest, nĂ€iteks Dropbox vĂ”i Google.Docs, ja ma usun, et enamus kasutab neid edukalt — nĂ€iteks on see artikkel kirjutatud Google.Docsi pilveteenuse kaudu. Kuid tuntud pilveteenused on vaid osa pilve vĂ”imalustest — tĂ€psemalt öeldes on need vaid SaaS tĂŒĂŒpi teenused. Pilveteenust vĂ”ime pakkuda kolme viisi: SaaS, PaaS vĂ”i IaaS. Millist teenust just teile vaja lĂ€heb, sĂ”ltub teie soovidest ja vĂ”imalustest.

Vaadakem igaĂŒht jĂ€rjest.

Tarkvara kui teenus (SaaS) — see on tĂ€ielik teenuse mudel kliendile, nĂ€iteks postiteenused nagu Yandex.Mail vĂ”i Gmail. Sellise teenuse mudeli puhul ei pea te, kliendina, praktiliselt mitte midagi tegema, vĂ€lja arvatud teenuse kasutamine — see tĂ€hendab, et te ei pea muretsema teenuse seadistamise, selle lĂ€bisĂ”idutaluvuse vĂ”i varukoopiate tegemise pĂ€rast. Oluline on mitte oma parooli kompromiteerida, kĂ”ik muu teeb teie eest teenuse pakkuja. Teenuse pakkujana kannate te tĂ€ieliku vastutuse kogu teenuse eest — alates serveri riistvarast ja hostimise opsĂŒsteemidest kuni andmebaaside ja tarkvara seadistusteni.

Platform as a Service (PaaS) — antud mudeli kasutamisel pakub teenuseosutaja kliendile teenuse jaoks valmisoleku, nĂ€iteks vĂ”tame veebiserveri. Teenuseosutaja on kliendile andnud virtuaalse serveri (tegelikult ressursside komplekti, nagu RAM/CPU/Storage/VĂ”rgud jms) ning isegi paigaldanud sellele serverile operatsioonisĂŒsteemi ja vajaliku tarkvara, kuid kogu selle seadistamisega tegeleb klient ise ning vastutab teenuse toimimise eest. Teenuseosutaja vastutab nagu eelnevas nĂ€ites fĂŒĂŒsilise riistvara, hĂŒperviisori, virtuaalmasina enda, selle vĂ”rgu kĂ€ttesaadavuse jms toimimise eest, kuid ise teenuse eest enam ei vastuta.

Infrastructure as a Service (IaaS) — see, this approach is more interesting; essentially, the service provider offers the client a full virtualized infrastructure — meaning a set (pool) of resources such as CPU Cores, RAM, Networks, etc. Everything else is up to the client — what the client wants to do with these resources within the allocated pool (quota) — it’s not particularly important to the provider. Whether the client wants to create their own vEPC or even become a mini-operator and offer communication services — that's not a problem — go ahead. In this scenario, the service provider is responsible for delivering the resources, their redundancy and availability, as well as the OS that allows combining these resources into pools and providing them to the client with the capability to increase or decrease resources upon the client's request at any moment. The client configures all virtual machines and other fluff themselves via the self-service portal and console, including network configuration (except for external networks).

Mis on OpenStack?

KĂ”igis kolmes variandis vajab teenusepakkuja operatsioonisĂŒsteemi, mis vĂ”imaldab luua pilveteenuse infrastruktuuri. Tegelikult vastutab SaaS-i puhul kogu tehnoloogiapaki eest mitte ĂŒks osakond — on osakond, mis vastutab infrastruktuuri eest, see tĂ€hendab, et see pakub IaaS-i teisele osakonnale, mis omakorda pakub klientidele SaaS-i. OpenStack on ĂŒks pilveoperatsioonisĂŒsteemidest, mis vĂ”imaldab ĂŒhendada hulga lĂŒliteid, servereid ja salvestussĂŒsteeme ĂŒheks ressursipooliks, jagada see yhte ressursipool alamressursipoolideks (tenandid) ja pakkuda neid ressursse klientidele vĂ”rgus.

OpenStack — on pilveoperatsioonisĂŒsteem, mis vĂ”imaldab hallata suuri arvutusressursside, andmesalvestuste ja vĂ”rguressursside poolusi, mille tĂ”hustamine ja haldamine toimub ĂŒle API kasutades standardseid autentimise mehhanisme.

Teisena, see on avatud lĂ€htekoodiga projektide komplekt, mis on mĂ”eldud pilveteenuste, nii avalike kui ka privaatsete, loomiseks - see tĂ€hendab tööriistade kogumit, mis vĂ”imaldab serveri- ja lĂŒlitusvarasid ĂŒhendada ĂŒhte ressursipooli, hallata neid ning tagada vajalik tase rikke taluvust.

KÀesoleva teksti kirjutamise hetkel nÀeb OpenStacki struktuur vÀlja jÀrgmine:
Sissejuhatus pilveinfrastruktuuri vÔrku
Pilt on vÔetud aadressilt openstack.org

Iga OpenStacki komponente tÀidab mingisugust kindlat funktsiooni. Selline hajutatud arhitektuur vÔimaldab lisada lahendusse just need funktsionaalsed komponendid, mis on vajalikud. Siiski on osa komponente pÔhikomponendid ja nende eemaldamine toob kaasa lahenduse tÀieliku vÔi osalise mittetoimimise. Selliste komponentide hulka kuuluvad:

  • Armatuurlauale — WebipĂ”hine GUI OpenStacki teenuste haldamiseks
  • Keystone — keskne identifitseerimise teenus, mis pakub autentimise ja autoriseerimise funktsionaalsust teistele teenustele ning haldab kasutajate mandaate ja nende rolle.
  • Neutron — vĂ”rgu teenus, mis tagab ĂŒhenduse erinevate OpenStacki teenuste liidesete vahel (sealhulgas ĂŒhenduse VM-ide vahel ja nende juurdepÀÀsu vĂ€lismaailmale)
  • Cinder — vĂ”imaldab juurdepÀÀsu plokkhoidlatele virtuaalmasinatele
  • Nova — haldab virtuaalmasinate elutsĂŒklit
  • Glance — virtuaalmasinate ja hetkevĂ”tete piltide hoidla
  • Swift — vĂ”imaldab juurdepÀÀsu objektide hoidlatele
  • Ceilometer — teenus, mis vĂ”imaldab koguda telemeetriat ja mÔÔta olemasolevaid ja tarbitavaid ressursse
  • Heat — malle pĂ”hine orkestreerimine ressursside automaatseks loomiseks ja proviisioonimiseks

Kogu projektide nimekiri ja nende mÀÀrangud on vaadatavad siin.

Iga OpenStacki koostisosa on teenus, mis vastutab kindla funktsiooni eest ja pakub API-d selle funktsiooni haldamiseks ning selle teenuse koostoimeks teiste pilveteenuste operatsioonisĂŒsteemis, eesmĂ€rgiga luua ĂŒhtne infrastruktuur. NĂ€iteks Nova tagab arvutusressursside haldamise ja API nende ressursside seadistamiseks, Glance – pildihalduse ja API nende haldamiseks, Cinder – plokkhĂ€llide haldamise ja API nende ĂŒle ning nii edasi. KĂ”ik funktsioonid on omavahel tihedalt seotud.

Kuid kui mĂ”elda, et kĂ”ik OpenStackis töötavad teenused esindavad lĂ”puks mingit virtuaalmasinat (vĂ”i konteinerit), mis on ĂŒhendatud vĂ”rku. Tekib kĂŒsimus — miks meil on nii palju komponente?

Vaatame lĂ€bi virtuaalmasina loomise ja selle ĂŒhendamise protsessi vĂ”rku ja pĂŒsivasse salvestusse OpenStackis.

  1. Kui loote masina loomiseks pĂ€ringu, olgu see siis pĂ€ring Horizonis (armatuurlaud) vĂ”i CLI kaudu, toimub kĂ”igepealt teie pĂ€ringu autoriseerimine Keystone'is — kas teil on Ă”igus masinat luua, kas teil on Ă”igus kasutada antud vĂ”rku, kas teie projektil on piisavalt kvooti jne.
  2. Keystone autentib teie pÀringu ja genereerib vastusena auth-tokeni, mida kasutatakse hiljem. PÀrast vastuse saamist Keystone'ilt saadetakse pÀring edasi Nova (nova api) poole.
  3. Nova-api kontrollib teie pÀringu kehtivust, pöördudes tagasi Keystone'i poole, kasutades eelnevalt genereeritud auth-tokenit.
  4. Keystone teeb autentimise ja annab selle auth-tokeni pÔhjal teavet lubade ja piirangute kohta.
  5. Nova-api loob nova-andmebaasis uue VM-i salvestuse ja edastab masina loomise pÀringu nova-scheduler'ile.
  6. Nova-scheduler valib hosti (arvuti sÔlme), kus VM hakatakse mÀÀrama vastavalt antud parameetritele, kaaludele ja tsoonidele. Teave selle ja VM-i identifikaatori kohta salvestatakse nova-andmebaasi.
  7. See further, nova-scheduler connects to nova-compute with a request to deploy an instance. Nova-compute calls nova-conductor to retrieve machine parameter information (nova-conductor acts as a proxy server between nova-database and nova-compute, limiting the number of requests made to nova-database to avoid database consistency issues and reduce load).
  8. Nova-conductor retrieves the requested information from nova-database and forwards it to nova-compute.
  9. Next, nova-compute requests the image ID from glance. Glance validates the request in Keystone and returns the requested information.
  10. Nova-compute queries neutron for network parameter information. Similarly to glance, neutron validates the request in Keystone, creates an entry in the database (port identifier, etc.), initiates a port creation request, and returns the requested information to nova-compute.
  11. Nova-compute sends a request to cinder to allocate a volume for the virtual machine. Like glance, cinder validates the request in Keystone, starts the volume creation request, and sends back the requested information.
  12. Nova-compute kutsub libvirt'i, et teostada virtuaalmasina juurutamist antud parameetritega.

Tegemist on nĂ€iliselt lihtsa operatsiooniga lihtsa virtuaalmasina loomisel, mis muutub pilveplatvormi elementide vaheliste API-kĂ”nede keerukaks keeriseks. Nagu nĂ€ete, koosnevad isegi varem nimetatud teenused vĂ€iksematest komponentidest, mille vahel toimub suhtlemine. Masina loomine on vaid vĂ€ike osa sellest, mida pilveplatvorm vĂ”imaldab – on teenus, mis vastutab liikluse koormuse tasakaalustamise eest, teenus, mis vastutab plokkide salvestamise eest, teenus, mis vastutab DNS-i, teenus, mis vastutab bare metal serverite vahendamise eest jne. Pilv vĂ”imaldab teil suhelda oma virtuaalmasinatega kui lambakarjaga (erinevalt virtualiseerimisest). Kui virtuaalses keskkonnas juhtub masinaga miski – taastate selle varundustest jne, siis pilve rakendused on ĂŒles ehitatud nii, et virtuaalmasin ei mĂ€ngi nii suurt rolli – kui virtuaalmasin "suri" – pole muret – lihtsalt luuakse uus masin malendi pĂ”hjal ja, nagu öeldakse, rĂŒhm ei mĂ€rganud kaotatud vĂ”itlejat. Loomulikult eeldab see orkestreerimise mehhanismide olemasolu – kasutades Heat ĆĄabloone, saate hĂ”lpsasti juurutada keerulisi funktsioone, mis koosnevad kĂŒmnetest vĂ”rgudest ja virtuaalmasinatest.

On alati oluline meeles pidada, et pilveinfrastruktuuri ei eksisteeri ilma vĂ”rguta — iga element mĂ”jutab teisi elemente vĂ”rgu kaudu. Veelgi enam, pilv ei ole sugugi staatiline. Loomulikult on aluseks olev vĂ”rk rohkem-vĂ€hem staatiline — uute sĂ”lmede ja lĂŒlitite lisamine ei toimu iga pĂ€ev, kuid overlay komponent vĂ”ib pidevalt muutuda — uued vĂ”rgud vĂ”ivad tekkida vĂ”i kaduda, uued virtuaalmasinad ilmuvad ja vanad surevad. Ja nagu te mĂ€letate, on pilve mÀÀratlemise kohaselt ressursid automaatselt kasutajale kergest (veel parem, ilma) teenusepakkuja sekkumiseta eraldatud. Seega, see vĂ”rguteenuse pakkumise tĂŒĂŒp, mida praegu teie isikliku kabineti ees on http/https kaudu ja valves oleva vĂ”rguinseneri Vasili tagapool — see ei ole pilv, isegi kui Vasili on kaheksa kĂ€t.

Neutron, olles vÔrgu teenus, pakub API-d pilve infrastruktuuri vÔrguosa haldamiseks. Teenus tagab OpenStacki vÔrguosa töökindluse ja halduse, pakkudes abstraktsioonitaset, mida nimetatakse Network-as-a-Service (NaaS). St, vÔrguosa on sama virtuaalne mÔÔdetav element nagu nÀiteks virtuaalsed CPU tuumad vÔi RAMi maht.

Kuid enne, kui liigume OpenStacki vÔrguosa arhitektuuri juurde, vaatame, kuidas see vÔrguosa OpenStackis toimib ja miks see on oluline ja lahutamatu osa pilvest.

Nii et meil on kaks kliendi virtuaalmasinat RED ja kaks kliendi virtuaalmasinat GREEN. Oletame, et need masinad on paigutatud kahe hĂŒperviisori peale selliselt:

Sissejuhatus pilveinfrastruktuuri vÔrku

Praegu on see lihtsalt nelja serveri virtualiseerimine ja mitte rohkem, kuna seni oleme virtualiseerinud neli serverit, paigutades need kahe fĂŒĂŒsilise serveri peale. Veel pole nad isegi vĂ”rku ĂŒhendatud.

Kuna pilve loomiseks on meil vaja lisada mitu komponenti. Esiteks virtualiseerime vĂ”rguosa — me peame need 4 masinat paarikaupa ĂŒhendama ning kliendid soovivad just L2 ĂŒhendust. Loomulikult vĂ”ib kasutada lĂŒlitit ja seadistada selle poole trunk ning lahendada kĂ”ik Linuxi silla kaudu, vĂ”i arenenumate kasutajate jaoks openvswitch (selle juurde me veel naaseme). Kuid vĂ”rgud vĂ”ivad olla vĂ€ga palju, ja pidevalt L2 lĂŒliti kaudu suruma — ei ole just parim idee — see toob erinevate osakondade, teeninduskeskuse, kuud kestnud taotluste tĂ€itmise ootamise ja nĂ€dalate kaupa tĂ”rkeotsingu. Kaasaegses maailmas ei tööta selline lĂ€henemine enam. Mida varem ettevĂ”te seda mĂ”istab, seda lihtsam on tal edasi liikuda. SeetĂ”ttu eraldame hĂŒperviisorite vahel L3 vĂ”rgu, mille kaudu meie virtuaalmasinad suhtlevad, ja selle L3 vĂ”rgu peale ehitame virtuaalsed pealiskihilised L2 (overlay) vĂ”rgud, kus liigub meie virtuaalmasinate liiklus. Inkaptsuleerimiseks vĂ”ib kasutada GRE, Geneve vĂ”i VxLAN. Peame praegu peatuma viimase peal, kuigi see pole eriti oluline.

Meil tuleb kuhugi paigutada VTEP (loodan, et kÔik tunnevad VxLANi terminoloogiat). Kuna meie serveritest vÀljub kohe L3 vÔrk, ei takista see meid VTEP-i paigutamast otse serveritesse, kus OVS (OpenvSwitch) oskab seda suurepÀraselt teha. Tulemusena saime sellise konstruktsiooni:

Sissejuhatus pilveinfrastruktuuri vÔrku

Kuna liiklus virtuaalsete masinate vahel peab olema eristatav, on portide numbrid virtuaalsete masinate suunas erinevad VLAN-i numbrid. Tagi number mĂ€ngib rolli ainult ĂŒhe virtuaalse lĂŒliti piires, kuna VxLAN-isse kapseldamise korral saame selle probleemideta eemaldada, kuna meil on olemas VNI.

Sissejuhatus pilveinfrastruktuuri vÔrku

NĂŒĂŒd saame luua meie seadmeid ja nende jaoks virtuaalseid vĂ”rke ilma igasuguste probleemideta.

Ent mis juhtub, kui kliendil on veel ĂŒks masin, kuid see asub teises vĂ”rgus? Me vajame vĂ”rkude vahel ruteerimist. Vaatame lihtsat varianti, kus kasutatakse tsentraliseeritud ruteerimist - see tĂ€hendab, et liiklus ruteeritakse spetsiaalsete pĂŒhendatud vĂ”rgu sĂ”lmede kaudu (tavaliselt on need kombineeritud juhtimissĂ”lmedega, seega meil on sama).

Tundub, et pole midagi keerulist — loome sillaliidese kontrollpunktis, suuname sinna liiklust ja sealt marsruutime selle sinna, kuhu meil on vaja. Kuid probleem on selles, et klient RED soovib kasutada vĂ”rku 10.0.0.0/24 ja klient GREEN soovib kasutada vĂ”rku 10.0.0.0/24. See tĂ€hendab, et meie aadressiruumid hakkavad kattuma. Lisaks ei soovi kliendid, et teised kliendid saaksid marsruutida nende sisevĂ”rkudesse, mis on loogiline. Klientide vĂ”rkude ja andmeliikluse eraldamiseks mÀÀrame igaĂŒhele eraldi namespaces. Namespace on sisuliselt Linuxi vĂ”rgu stack'i koopia, see tĂ€hendab, et RED namespace'is olevad kliendid on tĂ€ielikult isoleeritud GREEN namespace'i klientidest (kui marsruutimine nende klientide vahel on lubatud, toimub see lĂ€bi default namespace'i vĂ”i juba kĂ”rgema taseme transpordiseadmetes).

Seega saame sellise skeemi:

Sissejuhatus pilveinfrastruktuuri vÔrku

L2 tunnelid kogunevad kĂ”igist arvutusnode'dest kontrollpunkti, kus asub L3 liides nende andmesidevĂ”rkude jaoks, igaĂŒks eraldi namespace'is isoleerimise tagamiseks.

Kuid me unustasime kĂ”ige olulisema. Virtuaalne masin peab pakkuma klientidele teenust, mis tĂ€hendab, et sellel peab olema vĂ€hemalt ĂŒks vĂ€line liides, mille kaudu on vĂ”imalik ĂŒhendust saada. See tĂ€hendab, et peame vĂ€lja minema vĂ€lismaailma. Siin on erinevaid vĂ”imalusi. Teeme kĂ”ige lihtsama variandi. Lisame igale kliendile ĂŒhe vĂ”rgu, mis on valideeritud teenusepakkujas ja ei kattu teiste vĂ”rkudega. VĂ”rgud vĂ”ivad samuti ĂŒksteisega kattuda ja vaadata erinevatesse VRF-desse teenusepakkuja vĂ”rgus. Need vĂ”rgud elavad samuti iga kliendi nimede ruumis. Kuid nad peavad ikkagi vĂ€lja minema vĂ€lismaailma lĂ€bi ĂŒhe fĂŒĂŒsilise (vĂ”i loogilise, mis on mĂ”istlikum) liidese. Klientide liikluse eristamiseks toimub vĂ€ljastatud liikluse tagamine VLAN-tĂ€itega, mis on mÀÀratud kliendile.

LÔpuks saime sellise skeemi:

Sissejuhatus pilveinfrastruktuuri vÔrku

TĂ”sine kĂŒsimus on, miks mitte luua vĂ€ravaid otse compute sĂ”lmedes? Suurt probleemi selles ei ole, isegi rohkem, kui aktiveerida jaotatud ruuter (DVR), hakkab see nii ka toimima. Antud stsenaariumis vaatleme kĂ”ige lihtsamat varianti kesksete vĂ€ravate puhul, mida OpenStack kasutab vaikimisi. Suure koormusega funktsioonide puhul kasutatakse nii jaotatud ruuterit kui ka kiirendustehnologiaid nagu SR-IOV ja Passthrough, kuid nagu öeldakse, see on juba hoopis teine lugu. KĂ”igepealt vaatame pĂ”hiosa, seejĂ€rel sukeldume detailidesse.

Tegelikult on meie skeem juba toimiv, kuid on paar nĂŒanssi:

  • Peame kuidagi kaitsma meie masinad, see tĂ€hendab, et peame kliendi poole suunatud lĂŒliti liidesele filtrid panema.
  • Luua vĂ”imalus, et virtuaalne masin saaks automaatselt IP-aadressi, et ei peaks iga kord konsooli kaudu sisse logima ja aadressi sisestama.

Alustame masinate kaitsmisest. Selleks vÔib kasutada tavalisi iptables, miks mitte.

See tĂ€hendab, et nĂŒĂŒd on meie topoloogia juba veidi keerulisem:

Sissejuhatus pilveinfrastruktuuri vÔrku

JĂ€tkame. Me peame lisama DHCP serveri. Iga kliendi jaoks oleks ideaalne koht DHCP serverite paigutamiseks juba mainitud kontrollida, kus asuvad nimed:

Sissejuhatus pilveinfrastruktuuri vÔrku

Kuid on vĂ€ike probleem. Mis juhtub, kui kĂ”ik taaskĂ€ivitatakse ja kogu DHCP aadresside rentimise info kaob? Loogiliselt peaks masinatele olema mÀÀratud uued aadressid, mis ei ole kuigi mugav. VĂ€ljapÀÀse on kaks — kas kasutada domeeninimesid ja lisada DNS server iga kliendi jaoks, siis ei ole aadress eriti oluline (sarnaselt k8s vĂ”rguosale) — kuid siin on probleem vĂ€listes vĂ”rkudes, kuna seal vĂ”ivad aadresse samuti mÀÀrata DHCP — on vajalik sĂŒnkroonimine pilveteenuste DNS serverite ja vĂ€liste DNS serverite vahel, mis minu arvates ei ole vĂ€ga paindlik, kuid tĂ€iesti vĂ”imalik. Teine variant on kasutada metaandmeid — see tĂ€hendab, et salvestada teave mÀÀratud masina aadressi kohta, et DHCP server teaks, millist aadressi masinale mÀÀrata, kui masin on juba aadressi saanud. Teine variant on lihtsam ja paindlikum, kuna see vĂ”imaldab sĂ€ilitada lisainfot masina kohta. NĂŒĂŒd lisame skeemile metadata agendi:

Sissejuhatus pilveinfrastruktuuri vÔrku

Veel kĂŒsitakse, kas kĂ”ik kliendid saavad kasutada ĂŒhte vĂ€list vĂ”rku. Kui vĂ€lised vĂ”rgud peavad olema kehtivad kogu vĂ”rgu ulatuses, vĂ”ivad tekkida raskused – tuleb pidevalt eraldada ja kontrollida nende vĂ”rkude eraldamist. KĂ”ikide klientide jaoks ĂŒhise eelhÀÀlestatud vĂ€list vĂ”rgu kasutamise vĂ”imalus oleks avaliku pilve loomisel vĂ€ga kasulik. See lihtsustab masinate kĂ€ivitamist, kuna meil ei oleks vaja vĂ”rrelda aadresside andmebaasi ja valida iga kliendi vĂ€list vĂ”rku unikaalne aadressiruum. Lisaks saame vĂ€list vĂ”rku ette mÀÀrata ja kĂ€ivitamise hetkel tuleb vaid seostada vĂ€lishaadressid kliendi masinatega.

Siin tuleb meile appi NAT — vĂ”imaldame klientidel vĂ€ljuda vĂ€lismaailma lĂ€bi vaikimisi namespace'i, kasutades NAT-i tĂ”lget. Siin on vĂ€ike probleem. See on hea, kui kliendi server töötab kui klient, mitte server — st algatab, mitte ei vĂ”ta ĂŒhendusi vastu. Kuid meil on vastupidi. Sellises olukorras peame tegema sihtkoha NAT-i, et kontrollpunkt mĂ”istaks, et see liiklus on mĂ”eldud kliendi A virtuaalmasinale, mis tĂ€hendab, et peame tegema NAT-i tĂ”lke vĂ€lisest aadressist, nĂ€iteks 100.1.1.1, siseadressiks 10.0.0.1. Sel juhul, kuigi kĂ”ik kliendid kasutavad sama vĂ”rku, sĂ€ilib sisemine isoleeritus tĂ€ielikult. See tĂ€hendab, et meil peab olema kontrollpunktis dNAT ja sNAT. Ühtse vĂ”rgu kasutamine koos ujuvate aadresside ja vĂ€liste vĂ”rkude vĂ”i mĂ”lema samaaegse kasutamisega sĂ”ltub sellest, mida soovite pilve tĂ”mmata. Me ei lisa skeemile veel ujuvaid aadresse, vaid jĂ€tame alles juba varem lisatud vĂ€lised vĂ”rgud — igal kliendil on oma vĂ€line vĂ”rk (skeemil on tĂ€histatud kui VLAN 100 ja 200 vĂ€lisel liidesel).

KokkuvÔttes saime huvitava ja samas lÀbimÔeldud lahenduse, millel on teatud paindlikkus, kuid millel puuduvad veel tÔrketaluvuse mehhanismid.

Esiteks on meil ainult ĂŒks kontrollsĂ”lm — selle rike toob kaasa kĂ”igi sĂŒsteemide kokkuvarisemise. Selle probleemi lahendamiseks on vajalik luua vĂ€hemalt 3-sĂ”lme kvoorum. Lisame selle skeemile:

Sissejuhatus pilveinfrastruktuuri vÔrku

Muidugi sĂŒnkroniseeruvad kĂ”ik sĂ”lmed ja aktiivse sĂ”lme rikete korral vĂ”tab teise sĂ”lme kohustused enda peale.

JĂ€rgmine probleem on virtuaalmasinate kettad. Praegu salvestatakse need hĂŒperviisorites ja hĂŒperviisori probleemide korral kaotame kĂ”ik andmed - ja RAID ei aita siin, kui me kaotame mitte ketta, vaid terve serveri. Selleks vajame teenust, mis toimiks mĂ”ne ladustamise esirinnana. Milline ladustamine see on, pole meile oluline, kuid see peab kaitsma meie andmeid kettast, sĂ”lmedest ja vĂ”ib-olla isegi tervest kapist ebaĂ”nnestumise eest. Siin on mitu vĂ”imalust - loomulikult on olemas SAN-vĂ”rgud Fiber Channeliga, kuid olgem ausad - FC on juba minevik, nagu E1 transpordis - jah, nĂ”ustun, et seda veel kasutatakse, kuid ainult seal, kus ilma selleta ei saa. SeetĂ”ttu ma ei sooviks vabatahtlikult 2020. aastal FC-vĂ”rku rajada, teades, et on olemas teisi huvitavamaid alternatiive. Kuigi igal ĂŒhel on oma eelistused ja vĂ”ib-olla leidub neid, kes arvavad, et FC koos kĂ”igi oma piirangutega on kĂ”ik, mida vajame - ma ei vaidle, igalĂŒhel on oma arvamus. Kuid kĂ”ige huvitavam lahendus, minu arvates, on SDS-i kasutamine, nĂ€iteks Ceph.

Ceph vÔimaldab luua kÔrge kÀttesaadavusega andmete salvestamise lahenduse, millel on palju vÔimalusi varundamiseks, alates pariteedi koodidest (sarnased RAID 5 vÔi 6) kuni andmete tÀieliku replikatsioonini erinevatesse ketastesse, arvestades ketaste asukohti serverites ja serverite asukohti kappides jne.

Ceph'i koostamiseks on veel vaja kolme sÔlme. Salvestusse suheldakse samuti vÔrgu kaudu, kasutades plokk-, objekt- ja failihaldusteenuseid. Lisame skeemile salvestuse:

Sissejuhatus pilveinfrastruktuuri vÔrku

MĂ€rkus: hĂŒperkonvergente compute nodid on samuti vĂ”imalikud — see on kontseptsioon, mis ĂŒhendab mitmeid funktsioone ĂŒhel nodil — nĂ€iteks storage+compute — mitte eraldada spetsiaalseid node'e ceph storage'ile. Saame sama taseme talitlushĂ€irete taluvuse, kuna SDS broneerib andmed soovitud broneerimise tasemega. Kuid hĂŒperkonvergente node'id on alati kompromiss, kuna storage node ei lihtsalt „sooja Ă”hku” nagu esmapilgul tundub (kuna sellel ei ole virtuaalmasinaid) — see kulutab CPU ressursse SDS hooldamiseks (tegelikult teeb ta taustal kĂ”ik replikatsioonid, taastumised node’ide ja ketaste riketest jne). See tĂ€hendab, et kaotate osaliselt compute node'i vĂ”imsuse, kui kombineerite selle storage'iga.

Kogu selle heaoluga peab kuidagi toime tulema — vajame midagi, mille kaudu saame luua masina, vĂ”rgu, virtuaalse marsruuteri jne. Selleks lisame kontrollnodile teenuse, mis tĂ€idab dashboard'i rolli — klient saab sellele portaalile http/https kaudu juurde pÀÀseda ja teha kĂ”ike, mida ta vajab (peaaegu).

KokkuvĂ”ttes on meil nĂŒĂŒd kĂ”rgelt kergesti juurutatav sĂŒsteem. KĂ”iki selle infrastruktuuri komponente tuleb kuidagi hallata. Varem on mainitud, et Openstack on projektide kogum, millest igaĂŒhel on oma spetsiifiline funktsioon. Nagu nĂ€eme, on elemente, mida tuleb konfigureerida ja kontrollida, piisavalt. TĂ€na rÀÀgime vĂ”rguosast.

Neutrone arhitektuur

OpenStackis vastutab Neutron virtuaalmasinate portide ĂŒhendamise eest ĂŒhise L2 vĂ”rgu kaudu, tagades liikluse marsruutimise erinevates L2 vĂ”rkudes asuvate VM-ide vahel ning tagapool marsruutimise, pakkudes selliseid teenuseid nagu NAT, Floating IP, DHCP jne.

VÔrguteenuse kÔrgema taseme töö (pÔhiosa) saab kirjeldada jÀrgmiselt.

Virtuaalmasina kÀivitamisel vÔrguteenusega:

  1. Loo port selle VM-i jaoks (vÔi portide jaoks) ja teata sellest DHCP teenusele;
  2. Loo uus virtuaalne vÔrgu seadmed (libvirt'i kaudu);
  3. VM ĂŒhendatakse 1. sammus loodud portidega;

Kuid ĂŒllatavalt, Neutrone toimimise pĂ”hielemendid pĂ”hinevad standardsetel mehhanismidel, mis on tuttavad kĂ”igile, kes on kunagi Linuxiga kokku puutunud — need on nimelt nimed, iptables, Linuxi sillad, openvswitch, conntrack jne.

On tuleb kohe mÀrkida, et Neutron ei ole SDN kontroller.

Neutron koosneb mitmest omavahel seotud komponendist:

Sissejuhatus pilveinfrastruktuuri vÔrku

Openstack-neutron-server on demon, mis töötleb API kaudu kasutaja pÀringuid. See demon ei kirjuta mingisuguseid vÔrgukonfiguratsioone, vaid edastab vajaliku teabe oma pluginatele, mis seejÀrel konfigureerivad vajaliku vÔrguelemendi. Neutron-agentid OpenStacki sÔlmedes registreeruvad Neutron-serveris.

Neutron-server on tegelikult rakendus, mis on kirjutatud pythonis ja koosneb kahest osast:

  • REST teenus
  • Neutron Plugin (core/service)

REST teenus on mÔeldud API kutsungite vastuvÔtmiseks teistelt komponentidelt (nÀiteks mingi teabe edastamise pÀring jne).

Pluginaid on sisseehitatud tarkvarakomponendid/moduulid, mis kutsutakse vĂ€lja API pĂ€ringute ajal – see tĂ€hendab, et mingi teenuse lisamine toimub nende kaudu. Pluginaid jagatakse kaheks: teenuse ja pĂ”hijagu. Reeglina vastutab pĂ”hijagu peamiselt aadressiruumi haldamise ja L2 ĂŒhenduste eest VMide vahel, samas kui teenuse pluginaid pakuvad tĂ€iendavaid funktsioone, nĂ€iteks VPN vĂ”i FW.

Saadaval olevate pluginade nimekirja saab vaadata nÀiteks siin

Teenuse pluginaid vĂ”ib olla mitmeid, kuid peamine plugin on ainult ĂŒks.

Openstack-neutron-ml2 on Openstacki standardne juurpugli. See plugin omab modulaarset arhitektuuri (erinevalt oma eelkĂ€ijast) ning konfigureerib vĂ”rgu teenuseid, kasutades oma kĂŒlge ĂŒhendatavaid draivereid. Selle plugina kohta rÀÀgime hiljem, kuna just tema pakub OpenStacki vĂ”rguosas vajalikku paindlikkust. Juurpugli vĂ”ib asendada (nĂ€iteks Contrail Networking teeb sellise asenduse).

RPC teenus (rabbitmq-server) on teenus, mis haldab jÀrjekordi ning suhtleb teiste OpenStacki teenustega ning ka vÔrguteenuse agentidega.

VÔrguagendid on agendid, mis asuvad igas sÔlmes, lÀbi mille konfigureeritakse vÔrgu teenuseid.

Agente on mitut tĂŒĂŒpi.

Peamine agent on L2 agent. Need not be written on the hypervisors including and controlling nodes (more precisely, on all nodes that provide any services for tenants) and their main function is to connect virtual machines to a common L2 network, as well as generate alerts when any events occur (for example, port disconnections/connections).

The next, equally important agent is L3 agent. By default, this agent runs exclusively on the network node (often the network node is combined with the control node) and provides routing between tenant networks (both between its networks and the networks of other tenants, as well as access to the outside world, providing NAT and DHCP service). However, when using DVR (distributed router), there is a need for the L3 plugin even on compute nodes.

The L3 agent uses Linux namespaces to provide each tenant with a set of their own isolated networks and the functionality of virtual routers that route traffic and provide gateway services for Layer 2 networks.

Andmebaas — a database of identifiers for networks, subnets, ports, pools, etc.

Tegelikult Neutron vÔtab API pÀringud vÔrguelementide loomiseks, autentib pÀringu ja edastab arendajatele (kas lÀbi pluginate vÔi agentide) vajalikud juhised, et korraldada soovitud teenust, kasutades RPC-d (kui suheldakse plugina vÔi agendiga) vÔi REST API-d (kui suheldakse SDN-iga).

NĂŒĂŒd vaatame testinstallatsiooni (milline see on ja mis osad on seal, vaatame hiljem praktikas) ning uurime, kus asub iga komponent:

(overcloud) [stack@undercloud ~]$ openstack network agent list  
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host                                | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| 10495de9-ba4b-41fe-b30a-b90ec3f8728b | Open vSwitch agent | overcloud-novacompute-1.localdomain | None              | :-)   | UP    | neutron-openvswitch-agent |
| 1515ad4a-5972-46c3-af5f-e5446dff7ac7 | L3 agent           | overcloud-controller-0.localdomain  | nova              | :-)   | UP    | neutron-l3-agent          |
| 322e62ca-1e5a-479e-9a96-4f26d09abdd7 | DHCP agent         | overcloud-controller-0.localdomain  | nova              | :-)   | UP    | neutron-dhcp-agent        |
| 9c1de2f9-bac5-400e-998d-4360f04fc533 | Open vSwitch agent | overcloud-novacompute-0.localdomain | None              | :-)   | UP    | neutron-openvswitch-agent |
| d99c5657-851e-4d3c-bef6-f1e3bb1acfb0 | Open vSwitch agent | overcloud-controller-0.localdomain  | None              | :-)   | UP    | neutron-openvswitch-agent |
| ff85fae6-5543-45fb-a301-19c57b62d836 | Metadata agent     | overcloud-controller-0.localdomain  | None              | :-)   | UP    | neutron-metadata-agent    |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
(overcloud) [stack@undercloud ~]$ 

Sissejuhatus pilveinfrastruktuuri vÔrku

Ja, see on kogu Neutroni struktuur. NĂŒĂŒd tasub veidi aega ML2 plugina peale mĂ”elda.

Modulaarne Kiht 2

Nagu juba eespool mainitud, on pistikprogramm OpenStacki standardne juurpistikprogramm, mis omab modulaarset arhitektuuri.

ML2 pistikprogrammi eelkĂ€ijal oli monoliitne struktuur, mis ei vĂ”imaldanud nĂ€iteks kasutada mitut tehnoloogiat ĂŒhes installatsioonis. NĂ€iteks ei saanud te kasutada nii openvswitch'i kui ka linuxbridge'i samaaegselt — kas esimest vĂ”i teist. SellepĂ€rast loodi ML2 pistikprogramm koos oma arhitektuuriga.

ML2-l on kaks koostisosad — kaks tĂŒĂŒpi draivereid: Type drivers ja Mechanism drivers.

Type drivers mÀÀratlevad tehnoloogiad, mida kasutatakse vĂ”rguĂŒhenduste korraldamiseks, nagu VxLAN, VLAN, GRE. Samas vĂ”imaldab draiver kasutada erinevaid tehnoloogiaid. Standardtehnoloogia on VxLAN-i kapseldamine overlay-vĂ”rkude jaoks ja vlan vĂ€liste vĂ”rkude jaoks.

Type drivers alla kuuluvad jĂ€rgmised vĂ”rgu tĂŒĂŒbid:

Flat — vĂ”rk ilma tĂ€hiseta
VLAN — tĂ€histatud vĂ”rk
Lokaalne — eriline vĂ”rk, mis on mĂ”eldud all-in-one tĂŒĂŒpi installatsioonide jaoks (sellised installatsioonid on vajalikud kas arendajatele vĂ”i koolituseks)
GRE — overlay-vĂ”rk, mis kasutab GRE tunnelit
VxLAN — overlay-vĂ”rk, mis kasutab VxLAN tunnelit

Mechanism drivers mÀÀravad vahendid, mis tagavad tooted, mis on kokku lepitud type driver tehnoloogiate osas — nĂ€iteks openvswitch, sr-iov, opendaylight, OVN jne.

SĂ”ltuvalt konkreetse draiveri teostusest kasutatakse kas Neutroni haldatavaid agente vĂ”i luuakse ĂŒhendusi vĂ€list SDN kontrolleriga, mis vĂ”tab enda peale kĂ”ik L2 vĂ”rkude korraldamise, suunamise jne kĂŒsimused.

NĂ€iteks, kui kasutame ML2 koos OVS-iga, installitakse igasse arvutusnode'sse L2 agent, mis haldab OVS-i. Kuid kui kasutame nĂ€iteks OVN-i vĂ”i OpenDayLight'i, siis OVS-i haldamine lĂ€heb nende jurisdiktsiooni — Neutron annab aukplugin'i kaudu kĂ€sklusi kontrollerile, ja see teeb siis, mida tal on kĂ€stud.

Kordame ĂŒle Open vSwitch

Praeguseks on ĂŒks OpenStacki peamisi komponente Open vSwitch.
OpenStacki installimise korral ilma igasuguste lisavendorite SDN lahendusteta nagu Juniper Contrail vÔi Nokia Nuage on OVS peamine vÔrgu komponent pilvevÔrgus. Koos iptables, conntrack ja namespaces'iga vÔimaldab see luua tÀisfunktsionaalset ovareksemist ja multitenantsust. Loomulikult vÔib seda komponenti asendada, nÀiteks kolmandate osapoolte privaatsed (vendor) SDN lahendustega.

OVS on avatud lĂ€htekoodiga tarkvaral pĂ”hinev lĂŒliti, mis on mĂ”eldud kasutamiseks virtualiseeritud keskkondades kui virtuaalne liikluse edastaja.

Praegu on OVS-l vÀga tugev funktsionaalsus, kuhu kuuluvad sellised tehnoloogiad nagu QoS, LACP, VLAN, VxLAN, GENEVE, OpenFlow, DPDK jne.

MÀrkus: algselt ei olnud OVS mÔeldud kÔrgkoormuslike telekomifunktsioonide jaoks programmikommutaatorina, vaid pigem vÀhem nÔudlikeks IT-funktsioonideks nagu veebiserver vÔi meiliserver. Siiski on OVS-i arendatud ja praegused rakendused on oluliselt parandanud selle jÔudlust ja vÔimalusi, mis vÔimaldab operaatoritel kasutada seda kÔrgkoormuslike funktsioonide puhul; nÀiteks on olemas OVS-i rakendus, mis toetab DPDK kiirendust.

On kolm olulist OVS-i komponenti, millest tuleb teada:

  • Kernel module — komponent, mis asub kernel space'is ja teostab liikluse töötlemist vastavalt juhtseadmest saadud reeglitele;
  • vSwitch daemon (ovs-vswitchd) — see on user space'is töötav protsess, mis vastutab kernel-mooduli programmeerimise eest — see esindab otseselt kommutaatori töö loogikat.
  • Database server — lokaalne andmebaas, mis asub igas hostis, kus OVS töötab, ja kus hoitakse konfiguratsiooni. Selle mooduli kaudu saavad SDN-kontrollerid omavahel kommunikatsiooni pidada OVSDB protokolli kaudu.

Selle kÔigega kaasneb ka komplekt diagnostikast ja haldustööriistu, nagu ovs-vsctl, ovs-appctl, ovs-ofctl jne.

Praegu kasutatakse OpenStacki laialdaselt telekommunikatsioonifirmade poolt, et migreerida vĂ”rgu funktsioone nagu EPC, SBC, HLR jne. MĂ”ned funktsioonid saavad probleemideta töötada OVS-i olemasolevas vormis, kuid nĂ€iteks EPC töötleb abonentide liiklust – see tĂ€hendab, et see laseb lĂ€bi tohutul hulgal liiklust (praeguseks ulatub liiklusmaht mitme sajani gigabitini sekundis). Loomulikult ei ole parim idee suunata sellist liiklust kernel'sse (kuna vaike seadistuse kohaselt asub edastaja seal). SeetĂ”ttu paigutatakse OVS sageli tĂ€ielikult kasutaja ruumi, rakendades DPDK tehnoloogiat, et suunata liiklus NIC-ist kasutaja ruumi mööda kernel'it.

MĂ€rkus: pilves, mis on ĂŒles seatud telekommunikatsioonifunktsioonide jaoks, on vĂ”imalik suunata liiklust compute noodist mööda OVS-i otse kommutatsiooniseadmetesse. Selleks kasutatakse SR-IOV ja Passthrough mehhanisme.

Kuidas see töötab reaalsetes makettides?

NĂŒĂŒd liikume praktilise osa juurde ja vaatame, kuidas see kĂ”ik praktikas töötab.

Alustuseks loome lihtsa OpenStack'i paigalduse. Kuna mul ei ole eksperimentide jaoks kĂ€epĂ€rast serverite komplekti, siis kogume maketi ĂŒhe fĂŒĂŒsilise serveri peale virtuaalmasinatest. Jah, loomulikult ei sobi selline lahendus Ă€rilistel eesmĂ€rkidel, kuid et nĂ€ha, kuidas OpenStack'is vĂ”rgu töötab, piisab sellisest paigaldusest. Selline paigaldus on isegi Ă”ppimise eesmĂ€rgil huvitavam — sest saa jĂ€lgida liiklust ja nii edasi.

Kuna peame nĂ€gema vaid pĂ”hiosad, siis ei pea me kasutama mitut vĂ”rku, vaid saame kĂ”ik ĂŒles tĂ”sta kaht vĂ”rku kasutades, kusjuures teine vĂ”rgu sel maketil on jĂ€rgnevalt mĂ”eldud ainult undercloud ja DNS serverile ligipÀÀsuks. VĂ€liseid vĂ”rke me hetkel puudutame — see on teema eraldi suure artikli jaoks.

Nii et, alustame jĂ€rjekorras. Esmalt veidi teooriat. Paigaldame OpenStacki TripleO abil (OpenStack OpenStacki peal). TripleO mĂ”te on, et me installime OpenStacki all-in-one (st ĂŒhele sĂ”lmele), mida nimetatakse undercloudiks, ja seejĂ€rel kasutame loodud OpenStacki vĂ”imalusi, et paigaldada tootmiseks mĂ”eldud OpenStack, mida nimetatakse overcloudiks. Undercloud kasutab oma sisse ehitatud vĂ”imet hallata fĂŒĂŒsilisi servereid (bare metal) — projekt Ironic — hĂŒperviisorite varustamiseks, mis tĂ€idavad compute, control ja storage sĂ”lme rolle. Seega, me ei kasuta OpenStacki kĂ€ivitamiseks mingeid kolmandate osapoolte vahendeid — paigaldame OpenStacki OpenStacki enda jĂ”ududega. Edasi minnes muutub see palju arusaadavamaks, seega ei peatu sel teemal, vaid liigume edasi.

MĂ€rkus: KĂ€esolevas artiklis lihtsustamise eesmĂ€rgil ei kasutanud ma OpenStacki siseteenuste vĂ”rgu isoleerimist, vaid kĂ”ik on seadistatud ainult ĂŒhe vĂ”rgu kasutamisega. Siiski ei mĂ”juta vĂ”rgu isoleerimise olemasolu vĂ”i puudumine lahenduse pĂ”hifunktsionaalsust - kĂ”ik töötab tĂ€pselt nii, nagu vĂ”rgus on isoleerimine, kuid liiklus liigub ĂŒhes vĂ”rgus. Kaubandusliku paigaldamise puhul on loomulikult vajalik kasutada erinevaid VLAN-e ja liideseid isoleerimise jaoks. NĂ€iteks haldamise liiklus Ceph salvestamisse ja andmete liiklus (nt masinate juurdepÀÀs kettale jne) kasutavad isoleerimise korral erinevaid alamvĂ”rke (Storage management ja Storage), mis muudab lahenduse paindlikumaks, jagades seda liiklust nĂ€iteks erinevate portide kaudu vĂ”i kasutades erinevaid QoS-profiile erineva liikluse jaoks, et andmeliiklus ei segaks juhtimisliiklust. Meie juhul kulgevad need siiski ĂŒhes ja samas vĂ”rgus ning see ei piira meid mingil moel.

MÀrkus: Kuna plaanime kÀivitada virtuaalmasinaid virtuaalses keskkonnas, mis pÔhineb virtuaalmasinatel, tuleb esmalt lubada pesad (nested) virtualiseerimist.

Kontrollimiseks, kas pesad virtualiseerimine on lubatud vÔi mitte, saate teha jÀrgmist:


[root@hp-gen9 bormoglotx]# cat /sys/module/kvm_intel/parameters/nested
N
[root@hp-gen9 bormoglotx]# 

Kui nÀete tÀhte N, siis lubage pesade virtualiseerimise tugi igasuguste juhendite jÀrgi, mida leidsite veebis, nÀiteks selline .

Peame koguma jÀrgmise skeemi virtuaalmasinatest:

Sissejuhatus pilveinfrastruktuuri vÔrku

Minu puhul, et saavutada virtuaalmasinate ĂŒhenduvus, mis kuuluvad tulevasse installatsiooni (olen nende koguarvuks saanud 7, kuid kui teil pole palju ressursse, piisab ka 4) kasutasin OpenvSwitch'i. Loodasin ĂŒhe ovs sillaga ja ĂŒhendasin sellele virtuaalmasinad lĂ€bi port-gruppide. Selleks lĂ”in jĂ€rgmise vorminguga xml faili:


[root@hp-gen9 ~]# virsh net-dumpxml ovs-network-1        

  ovs-network-1
  7a2e7de7-fc16-4e00-b1ed-4d190133af67

Siin on kolm portgruppi — kaks access ja ĂŒks trunk (viimane oli vajalik DNS-serveri jaoks, kuid selle saab ka vahele jĂ€tta vĂ”i kĂ€ivitada selle hostmasinas — kuidas soovite). Edasi mÀÀrame selle ĆĄablooni abil oma vĂ”rgu virsh net-define kaudu:


virsh net-define ovs-network-1.xml 
virsh net-start ovs-network-1 
virsh net-autostart ovs-network-1 

NĂŒĂŒd muudame hĂŒperviisori portide konfiguratsioone:


[root@hp-gen9 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens1f0   
TYPE=Ethernet
NAME=ens1f0
DEVICE=ens1f0
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=ovs-br1
ONBOOT=yes
OVS_OPTIONS="trunk=100,101,102"
[root@hp-gen9 ~]
[root@hp-gen9 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ovs-br1 
DEVICE=ovs-br1
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.255.200
PREFIX=24
[root@hp-gen9 ~]# 

MÀrkus: antud stsenaariumis ei ole aadress porti ovs-br1 saadaval, kuna sel ei ole VLAN-i sildi. Selle parandamiseks tuleb anda kÀsk sudo ovs-vsctl set port ovs-br1 tag=100. Kuid pÀrast taaskÀivitamist kaob see silt (kui keegi teab, kuidas seda sÀilitada, oleksin vÀga tÀnulik). Kuid see ei ole nii oluline, kuna see aadress on vajalik ainult installatsiooni ajal ja pole vajalik, kui OpenStack on tÀielikult paigaldatud.

JĂ€rgmiseks loome undercloud masina:


virt-install  -n undercloud --description "undercloud"  --os-type=Linux  --os-variant=centos7.0  --ram=8192  --vcpus=8  --disk path=/var/lib/libvirt/images/undercloud.qcow2,bus=virtio,size=40,format=qcow2 --network network:ovs-network-1,model=virtio,portgroup=access-100 --network network:ovs-network-1,model=virtio,portgroup=access-101 --graphics none  --location /var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-2003.iso --extra-args console=ttyS0

Paigaldamise kÀigus seadistage kÔik vajalikud parameetrid, nagu masina nimi, paroolid, kasutajad, ntp-serverid jne, portsid saab ka kohe seadistada, kuid mulle isiklikult on pÀrast paigaldamist lihtsalt mugavam masinasse konsooli kaudu sisse logida ja vajalikud failid korda teha. Kui teil on juba valmis pilt, vÔite seda kasutada vÔi kÀituda nagu mina - laadige alla minimaalne CentOS 7 pilt ja kasutage seda VM paigaldamiseks.

PĂ€rast edukat paigaldamist peaks teil olema virtuaalne masin, kuhu saab installida undercloud.


[root@hp-gen9 bormoglotx]# virsh list
 Id    Name                           State
----------------------------------------------------
 6     dns-server                     jooksvalt
 62    undercloud                     jooksvalt

Esmalt paigaldame vajalikud tööriistad installatsiooni protsessi jaoks:

sudo yum update -y
sudo yum install -y net-tools
sudo yum install -y wget
sudo yum install -y ipmitool

Undercloudi paigaldamine

Loome kasutaja stack, mÀÀrame parooli, lisame selle sudoerisse ja anname talle Ôiguse tÀita root-kÀske sudo kaudu ilma parooli sissetoomiseta:


useradd stack
passwd stack

echo "stack ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/stack
chmod 0440 /etc/sudoers.d/stack

NĂŒĂŒd mÀÀrame hosts-failis undercloudi tĂ€isnime:


vi /etc/hosts

127.0.0.1   undercloud.openstack.rnd localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

SeejĂ€rel lisame àŠ°àŠżàŠȘáƒáƒ–áƒ˜áƒąà„‹oriumid ja paigaldame vajaliku tarkvara:


sudo yum install -y https://trunk.rdoproject.org/centos7/current/python2-tripleo-repos-0.0.1-0.20200409224957.8bac392.el7.noarch.rpm
sudo -E tripleo-repos -b queens current
sudo -E tripleo-repos -b queens current ceph
sudo yum install -y python-tripleoclient
sudo yum install -y ceph-ansible

MÀrkusele: kui te ei plaani ceph'i installimist, siis ceph'iga seotud kÀsud pole vajalikud. Kasutasin versiooni Queens, kuid vÔite valida mÔne muu, mis teile meeldib.

SeejÀrel kopeerime undercloudi konfiguratsioonifaili kasutaja stack koduÔigusesse:


cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf

NĂŒĂŒd on vajalik seda faili kohandada vastavalt meie installatsioonile.

Faili algusesse tuleb lisada jÀrgmised read:

vi undercloud.conf
[DEFAULT]
undercloud_hostname = undercloud.openstack.rnd
local_ip = 192.168.255.1/24
network_gateway = 192.168.255.1
undercloud_public_host = 192.168.255.2
undercloud_admin_host = 192.168.255.3
undercloud_nameservers = 192.168.255.253
generate_service_certificate = false
local_interface = eth0
local_mtu = 1450
network_cidr = 192.168.255.0/24
masquerade = true
masquerade_network = 192.168.255.0/24
dhcp_start = 192.168.255.11
dhcp_end = 192.168.255.50
inspection_iprange = 192.168.255.51,192.168.255.100
scheduler_max_attempts = 10

Nii et, vaatame seadistusi:

undercloud_hostname — undercloud serveri tĂ€ielik nimi, see peab vastama DNS serveris olevale rekordile

local_ip — undercloud'i kohalik aadress proviisorvĂ”rgu suunas

network_gateway — see sama kohalik aadress, mis toimib vĂ€ravana vĂ€lismaailma juurdepÀÀsuks overcloudi node'ide paigaldamise ajal, peab samuti olema sama, mis kohalik ip

undercloud_public_host — vĂ€line API aadress, mÀÀratud olek vĂ”rgu proviisorilt vaba aadress

undercloud_admin_host sisemise API aadress, mÀÀratud olek vÔrgu proviisorilt vaba aadress

undercloud_nameservers — DNS server

generate_service_certificate — see rida on praeguses nĂ€ites vĂ€ga oluline, kuna kui seda ei seadistata vÀÀrtusele false, siis tekib teil installimise ajal viga, probleem on kirjas Red Hat'i viga jĂ€lgimisregister

local_interface proviseerimise vĂ”rgu liides. See liides konfigureeritakse ĂŒmber undercloudi paigaldamise ajal, seega peab undercloudil olema kaks liidest — ĂŒks selle juurde pÀÀsemiseks, teine proviisorimiseks

local_mtu — MTU. Kuna meil on testlabor ja MTU on 1500 OVS lĂŒliti portides, siis peab olema seadistatud vÀÀrtusele 1450, et VxLAN pakettidesse pĂŒĂŒtud pakettidest aru saada

network_cidr — proviseeringuvĂ”rk

masquerade — NAT kasutamine juurdepÀÀsuks vĂ€lisseele

masquerade_network — vĂ”rk, mille parameetreid NAT-itatakse

dhcp_start — algne aadressipool, millest mÀÀratakse aadressid node'idele overcloud'i paigaldamise ajal

dhcp_end — lĂ”ppaadressipool, millest mÀÀratakse aadressid node'idele overcloud'i paigaldamise ajal

inspection_iprange — IP-aadresside vahemik, mida on vaja introspektsiooniks (ei tohi kattuda ĂŒlaltoodud vahemikuga)

scheduler_max_attempts — maksimaalne katsete arv overcloudi seadistamiseks (peab olema suurem vĂ”i vĂ€hemalt vĂ”rdne nodede arvuga)

PÀrast faili kirjeldamist saab anda kÀsu undercloudi paigaldamiseks:


openstack undercloud install

Protsess kestab 10 kuni 30 minutit, sÔltuvalt teie riistvarast. LÔpuks peaksite nÀgema sellist vÀljundit:

vi undercloud.conf
2020-08-13 23:13:12,668 INFO: 
#############################################################################
Undercloud install complete.

The file containing this installation's passwords is at
/home/stack/undercloud-passwords.conf.

There is also a stackrc file at /home/stack/stackrc.

These files are needed to interact with the OpenStack services, and should be
secured.

#############################################################################

See vĂ€ljund nĂ€itab, et olete edukalt installinud undercloudi ning nĂŒĂŒd saab kontrollida undercloudi olekut ja jĂ€tkata overcloudi seadistamist.

Kui vaatate vÀljundit ifconfig, nÀete, et on ilmunud uus sildliides.

[stack@undercloud ~]$ ifconfig
br-ctlplane: flags=4163  mtu 1450
        inet 192.168.255.1  netmask 255.255.255.0  broadcast 192.168.255.255
        inet6 fe80::5054:ff:fe2c:89e  prefixlen 64  scopeid 0x20
        ether 52:54:00:2c:08:9e  txqueuelen 1000  (Ethernet)
        RX packets 14  bytes 1095 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20  bytes 1292 (1.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Selle liidese kaudu toimub nĂŒĂŒd ĂŒle pilve ĂŒlesehitamine.

Allpool olevast vĂ€ljundist on nĂ€ha, et kĂ”ik teenused on ĂŒhel sĂ”lmel:

(undercloud) [stack@undercloud ~]$ openstack host list
+--------------------------+-----------+----------+
| Host Name                | Service   | Zone     |
+--------------------------+-----------+----------+
| undercloud.openstack.rnd | conductor | internal |
| undercloud.openstack.rnd | scheduler | internal |
| undercloud.openstack.rnd | compute   | nova     |
+--------------------------+-----------+----------+

Allpool on nÀidatud undercloudi vÔrgu konfiguratsioon:


(undercloud) [stack@undercloud ~]$ python -m json.tool /etc/os-net-config/config.json 
{
    "network_config": [
        {
            "addresses": [
                {
                    "ip_netmask": "192.168.255.1/24"
                }
            ],
            "members": [
                {
                    "dns_servers": [
                        "192.168.255.253"
                    ],
                    "mtu": 1450,
                    "name": "eth0",
                    "primary": "true",
                    "type": "interface"
                }
            ],
            "mtu": 1450,
            "name": "br-ctlplane",
            "ovs_extra": [
                "br-set-external-id br-ctlplane bridge-id br-ctlplane"
            ],
            "routes": [],
            "type": "ovs_bridge"
        }
    ]
}
(undercloud) [stack@undercloud ~]$

Overcloudi installimine

Praegu on meil ainult undercloud ja meil puuduvad nodid, millest overcloud koosneb. SeetĂ”ttu alustame virtuaalmasinate kĂ€ivitamisest, mis on vajalikud. Undercloud paigaldab operatsioonisĂŒsteemi ja vajaliku tarkvara overcloudi masinatele – meil ei ole vaja tĂ€ielikult masinat kĂ€ivitada, vaid lihtsalt luua sellele ketas (vĂ”i kettad) ja mÀÀrata selle parameetrid – sisuliselt saame aluse serveri, millel operatsioonisĂŒsteem ei ole paigaldatud.

Liigume virtuaalmasinate ketaste kausta ja loome vajaliku mahuga kettad:


cd /var/lib/libvirt/images/
qemu-img create -f qcow2 -o preallocation=metadata control-1.qcow2 60G
qemu-img create -f qcow2 -o preallocation=metadata compute-1.qcow2 60G
qemu-img create -f qcow2 -o preallocation=metadata compute-2.qcow2 60G
qemu-img create -f qcow2 -o preallocation=metadata storage-1.qcow2 160G
qemu-img create -f qcow2 -o preallocation=metadata storage-2.qcow2 160G

Kuna tegutseme rootina, peame muutma nende ketaste omaniku, et vÀltida Ôiguste probleeme:


[root@hp-gen9 images]# ls -lh
total 5.8G
drwxr-xr-x. 2 qemu qemu 4.0K Aug 13 16:15 backups
-rw-r--r--. 1 root root  61G Aug 14 03:07 compute-1.qcow2
-rw-r--r--. 1 root root  61G Aug 14 03:07 compute-2.qcow2
-rw-r--r--. 1 root root  61G Aug 14 03:07 control-1.qcow2
-rw-------. 1 qemu qemu  41G Aug 14 03:03 dns-server.qcow2
-rw-r--r--. 1 root root 161G Aug 14 03:07 storage-1.qcow2
-rw-r--r--. 1 root root 161G Aug 14 03:07 storage-2.qcow2
-rw-------. 1 qemu qemu  41G Aug 14 03:07 undercloud.qcow2
[root@hp-gen9 images]# 
[root@hp-gen9 images]# 
[root@hp-gen9 images]# chown qemu:qemu /var/lib/libvirt/images/*qcow2
[root@hp-gen9 images]# ls -lh
total 5.8G
drwxr-xr-x. 2 qemu qemu 4.0K Aug 13 16:15 backups
-rw-r--r--. 1 qemu qemu  61G Aug 14 03:07 compute-1.qcow2
-rw-r--r--. 1 qemu qemu  61G Aug 14 03:07 compute-2.qcow2
-rw-r--r--. 1 qemu qemu  61G Aug 14 03:07 control-1.qcow2
-rw-------. 1 qemu qemu  41G Aug 14 03:03 dns-server.qcow2
-rw-r--r--. 1 qemu qemu 161G Aug 14 03:07 storage-1.qcow2
-rw-r--r--. 1 qemu qemu 161G Aug 14 03:07 storage-2.qcow2
-rw-------. 1 qemu qemu  41G Aug 14 03:08 undercloud.qcow2
[root@hp-gen9 images]# 

MĂ€rkus: kui te ei plaani Ceph'i Ă”ppimise eesmĂ€rgil installida, siis Ă€rge looge vĂ€hemalt kolme node'iga, millest igaĂŒhel on vĂ€hemalt kaks ketast. Templis mĂ€rkige, et kasutatakse virtuaalseid kettaid vda, vdb jne.

SuurepĂ€rane, nĂŒĂŒd peame kĂ”ik need masinad mÀÀrama:


virt-install --name control-1 --ram 32768 --vcpus 8 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/control-1.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --network network:ovs-network-1,model=virtio,portgroup=trunk-1 --dry-run --print-xml > /tmp/control-1.xml  

virt-install --name storage-1 --ram 16384 --vcpus 4 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/storage-1.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > /tmp/storage-1.xml  

virt-install --name storage-2 --ram 16384 --vcpus 4 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/storage-2.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > /tmp/storage-2.xml  

virt-install --name compute-1 --ram 32768 --vcpus 12 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/compute-1.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > /tmp/compute-1.xml  

virt-install --name compute-2 --ram 32768 --vcpus 12 --os-variant centos7.0 --disk path=/var/lib/libvirt/images/compute-2.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc  --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > /tmp/compute-2.xml 

LĂ”pus on kĂ€sk —print-xml > /tmp/storage-1.xml, mis loob xml-faili iga masina kirjeldusega kaustas /tmp/, kui seda ei lisata, siis ei saa te virtuaalseid masinaid mÀÀratleda.

NĂŒĂŒd peame kĂ”ik need masinad virshis mÀÀratlema:


virsh define --file /tmp/control-1.xml
virsh define --file /tmp/compute-1.xml
virsh define --file /tmp/compute-2.xml
virsh define --file /tmp/storage-1.xml
virsh define --file /tmp/storage-2.xml

[root@hp-gen9 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 6     dns-server                     running
 64    undercloud                     running
 -     compute-1                      shut off
 -     compute-2                      shut off
 -     control-1                      shut off
 -     storage-1                      shut off
 -     storage-2                      shut off

[root@hp-gen9 ~]#

NĂŒĂŒd on vĂ€ikene nĂŒanss — tripleO kasutab serverite haldamiseks paigaldamise ja introspektsiooni ajal IPMI-d.

Introspektsioon on riistvara inspektsiooni protsess, et saada vajalikud parameetrid edasiseks node-ide varustamiseks. Introspektsiooni teostab ironic — teenus, mis on mĂ”eldud bare metal serveritega töötamiseks.

Aga siin on probleem – kui fĂŒĂŒsilistel serveritel on IPMI jaoks eraldi port (vĂ”i jagatud port, aga see ei ole oluline), siis virtuaalmasinatel selliseid porte ei ole. Siin tuleb meile appi lahendus nimega vbmc – tööriist, mis vĂ”imaldab IPMI porti emuleerida. Sellele nĂŒansile tasub tĂ€helepanu pöörata eriti neil, kes tahavad sellist laboratooriumi kĂ€ivitada ESXi hĂŒperviisoril – ma ei tea, kas seal on vbmc analooge, seega tasub sellele kĂŒsimusele mĂ”elda, enne kui kĂ”ik ĂŒles seada.

Paigaldame vbmc:


yum install python2-virtualbmc

Kui teie operatsioonisĂŒsteem ei leia paketti, lisage hoidla:

yum install -y https://www.rdoproject.org/repos/rdo-release.rpm

NĂŒĂŒd seadistame tööriista. Siin on kĂ”ik tĂ”eliselt lihtne. Hetkel on loogiline, et vbmc nimekirjas ei ole mingeid servereid.


[root@hp-gen9 ~]# vbmc list

[root@hp-gen9 ~]# 

Kuna need ilmuksid, tuleb need kÀsitsi nÀiteks nii registreerida:


[root@hp-gen9 ~]# vbmc add control-1 --port 7001 --username admin --password admin
[root@hp-gen9 ~]# vbmc add storage-1 --port 7002 --username admin --password admin
[root@hp-gen9 ~]# vbmc add storage-2 --port 7003 --username admin --password admin
[root@hp-gen9 ~]# vbmc add compute-1 --port 7004 --username admin --password admin
[root@hp-gen9 ~]# vbmc add compute-2 --port 7005 --username admin --password admin
[root@hp-gen9 ~]#
[root@hp-gen9 ~]# vbmc list
+-------------+--------+---------+------+
| Domain name | Status | Address | Port |
+-------------+--------+---------+------+
| compute-1   | down   | ::      | 7004 |
| compute-2   | down   | ::      | 7005 |
| control-1   | down   | ::      | 7001 |
| storage-1   | down   | ::      | 7002 |
| storage-2   | down   | ::      | 7003 |
+-------------+--------+---------+------+
[root@hp-gen9 ~]#

Arvan, et kĂ€su sĂŒntaks on arusaadav ka ilma selgitusteta. Siiski on praegu kĂ”ik meie seansid seisundis DOWN. Et need muutuksid UP-iks, tuleb need sisse lĂŒlitada:


[root@hp-gen9 ~]# vbmc start control-1
2020-08-14 03:15:57,826.826 13149 INFO VirtualBMC [-] Started vBMC instance for domain control-1
[root@hp-gen9 ~]# vbmc start storage-1 
2020-08-14 03:15:58,316.316 13149 INFO VirtualBMC [-] Started vBMC instance for domain storage-1
[root@hp-gen9 ~]# vbmc start storage-2
2020-08-14 03:15:58,851.851 13149 INFO VirtualBMC [-] Started vBMC instance for domain storage-2
[root@hp-gen9 ~]# vbmc start compute-1
2020-08-14 03:15:59,307.307 13149 INFO VirtualBMC [-] Started vBMC instance for domain compute-1
[root@hp-gen9 ~]# vbmc start compute-2
2020-08-14 03:15:59,712.712 13149 INFO VirtualBMC [-] Started vBMC instance for domain compute-2
[root@hp-gen9 ~]# 
[root@hp-gen9 ~]# 
[root@hp-gen9 ~]# vbmc list
+-------------+---------+---------+------+
| Domain name | Status  | Address | Port |
+-------------+---------+---------+------+
| compute-1   | running | ::      | 7004 |
| compute-2   | running | ::      | 7005 |
| control-1   | running | ::      | 7001 |
| storage-1   | running | ::      | 7002 |
| storage-2   | running | ::      | 7003 |
+-------------+---------+---------+------+
[root@hp-gen9 ~]#

Viimane samm — tuleks kohandada tulemĂŒĂŒrireegleid (vĂ”i vajadusel tĂ€iesti vĂ€lja lĂŒlitada):


firewall-cmd --zone=public --add-port=7001/udp --permanent
firewall-cmd --zone=public --add-port=7002/udp --permanent
firewall-cmd --zone=public --add-port=7003/udp --permanent
firewall-cmd --zone=public --add-port=7004/udp --permanent
firewall-cmd --zone=public --add-port=7005/udp --permanent
firewall-cmd --reload

NĂŒĂŒd siseneme undercloudi ja kontrollime, kas kĂ”ik töötab. Peremeesmasina aadress on 192.168.255.200, undercloudis oleme installinud vajaliku paketi ipmitool enne juurutamise ettevalmistamist:


[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power status          
Korpus on
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power on
Korpus Power Control: Üles/KĂ€ib
[stack@undercloud ~]$ 

[root@hp-gen9 ~]# virsh list 
 Id    Nimi                           Oleku
----------------------------------------------------
 6     dns-server                     töötab
 64    undercloud                     töötab
 65    control-1                      töötab

Nagu nĂ€ete, oleme edukalt kĂ€ivitanud kontrollnoodi lĂ€bi vbmc. NĂŒĂŒd lĂŒlitame selle vĂ€lja ja lĂ€heme edasi:


[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power off
Korpus Power Control: Alla/VĂ€ljas
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power status
Korpus on
[stack@undercloud ~]$ 

[root@hp-gen9 ~]# virsh list --all
 Id    Nimi                           Oleku
----------------------------------------------------
 6     dns-server                     töötab
 64    undercloud                     töötab
 -     compute-1                      vĂ€lja lĂŒlitatud
 -     compute-2                      vĂ€lja lĂŒlitatud
 -     control-1                      vĂ€lja lĂŒlitatud
 -     storage-1                      vĂ€lja lĂŒlitatud
 -     storage-2                      vĂ€lja lĂŒlitatud

[root@hp-gen9 ~]#

JÀrgmine samm on node'ide introspektsioon, kuhu overcloud paigaldatakse. Selleks peame ette valmistama json-faili, mis sisaldab kirjeldust meie node'dest. Pange tÀhele, et erinevalt puhaste serverite paigaldamisest sisaldab fail iga masina vbmc kÀivitamiseks vajalikku porti.


[root@hp-gen9 ~]# virsh domiflist --domain control-1 
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:20:a2:2f
-          network    ovs-network-1 virtio      52:54:00:3f:87:9f

[root@hp-gen9 ~]# virsh domiflist --domain compute-1
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:98:e9:d6

[root@hp-gen9 ~]# virsh domiflist --domain compute-2
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:6a:ea:be

[root@hp-gen9 ~]# virsh domiflist --domain storage-1
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:79:0b:cb

[root@hp-gen9 ~]# virsh domiflist --domain storage-2
Interface  Type       Source     Model       MAC
-------------------------------------------------------
-          network    ovs-network-1 virtio      52:54:00:a7:fe:27

MĂ€rkus: kontrollnĂ”l on kaks liidest, kuid antud juhul ei ole see oluline, selle paigalduse jaoks piisab meile ĂŒhest.

NĂŒĂŒd valmistame json faili. Peame nĂ€itama porti MAC-aadressi, mille kaudu toimub provisjoneerimine, node'ide parameetrid, andma neile nimed ja mÀÀrama, kuidas pÀÀseda ipmi-le:


{
    "nodes":[
        {
            "mac":[
                "52:54:00:20:a2:2f"
            ],
            "cpu":"8",
            "memory":"32768",
            "disk":"60",
            "arch":"x86_64",
            "name":"control-1",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7001"
        },
        {
            "mac":[
                "52:54:00:79:0b:cb"
            ],
            "cpu":"4",
            "memory":"16384",
            "disk":"160",
            "arch":"x86_64",
            "name":"storage-1",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7002"
        },
        {
            "mac":[
                "52:54:00:a7:fe:27"
            ],
            "cpu":"4",
            "memory":"16384",
            "disk":"160",
            "arch":"x86_64",
            "name":"storage-2",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7003"
        },
        {
            "mac":[
                "52:54:00:98:e9:d6"
            ],
            "cpu":"12",
            "memory":"32768",
            "disk":"60",
            "arch":"x86_64",
            "name":"compute-1",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7004"
        },
        {
            "mac":[
                "52:54:00:6a:ea:be"
            ],
            "cpu":"12",
            "memory":"32768",
            "disk":"60",
            "arch":"x86_64",
            "name":"compute-2",
            "pm_type":"pxe_ipmitool",
            "pm_user":"admin",
            "pm_password":"admin",
            "pm_addr":"192.168.255.200",
            "pm_port":"7005"
        }
    ]
}

NĂŒĂŒd peame valmistama ette pildid ironic jaoks. Selleks laeme need alla wget kaudu ja installime:

(undercloud) [stack@undercloud ~]$ sudo wget https://images.rdoproject.org/queens/delorean/current-tripleo-rdo/overcloud-full.tar --no-check-certificate
(undercloud) [stack@undercloud ~]$ sudo wget https://images.rdoproject.org/queens/delorean/current-tripleo-rdo/ironic-python-agent.tar --no-check-certificate
(undercloud) [stack@undercloud ~]$ ls -lh
total 1.9G
-rw-r--r--. 1 stack stack 447M Aug 14 10:26 ironic-python-agent.tar
-rw-r--r--. 1 stack stack 1.5G Aug 14 10:26 overcloud-full.tar
-rw-------. 1 stack stack  916 Aug 13 23:10 stackrc
-rw-r--r--. 1 stack stack  15K Aug 13 22:50 undercloud.conf
-rw-------. 1 stack stack 2.0K Aug 13 22:50 undercloud-passwords.conf
(undercloud) [stack@undercloud ~]$ mkdir images/
(undercloud) [stack@undercloud ~]$ tar -xpvf ironic-python-agent.tar -C ~/images/
ironic-python-agent.initramfs
ironic-python-agent.kernel
(undercloud) [stack@undercloud ~]$ tar -xpvf overcloud-full.tar -C ~/images/
overcloud-full.qcow2
overcloud-full.initrd
overcloud-full.vmlinuz
(undercloud) [stack@undercloud ~]$ 
(undercloud) [stack@undercloud ~]$ ls -lh images/
total 1.9G
-rw-rw-r--. 1 stack stack 441M Aug 12 17:24 ironic-python-agent.initramfs
-rwxr-xr-x. 1 stack stack 6.5M Aug 12 17:24 ironic-python-agent.kernel
-rw-r--r--. 1 stack stack  53M Aug 12 17:14 overcloud-full.initrd
-rw-r--r--. 1 stack stack 1.4G Aug 12 17:18 overcloud-full.qcow2
-rwxr-xr-x. 1 stack stack 6.5M Aug 12 17:14 overcloud-full.vmlinuz
(undercloud) [stack@undercloud ~]$

Laeme pildid undercloudi:

(undercloud) [stack@undercloud ~]$ openstack overcloud image upload --image-path ~/images/
Pilt "overcloud-full-vmlinuz" on ĂŒles laaditud.
+--------------------------------------+------------------------+-------------+---------+--------+
|                  ID                  |          Nimi          | Ketta formaat |   Suurus  | Staatus |
+--------------------------------------+------------------------+-------------+---------+--------+
| c2553770-3e0f-4750-b46b-138855b5c385 | overcloud-full-vmlinuz |     aki     | 6761064 | aktiivne |
+--------------------------------------+------------------------+-------------+---------+--------+
Pilt "overcloud-full-initrd" on ĂŒles laaditud.
+--------------------------------------+-----------------------+-------------+----------+--------+
|                  ID                  |          Nimi         | Ketta formaat |   Suurus   | Staatus |
+--------------------------------------+-----------------------+-------------+----------+--------+
| 949984e0-4932-4e71-af43-d67a38c3dc89 | overcloud-full-initrd |     ari     | 55183045 | aktiivne |
+--------------------------------------+-----------------------+-------------+----------+--------+
Pilt "overcloud-full" on ĂŒles laaditud.
+--------------------------------------+----------------+-------------+------------+--------+
|                  ID                  |      Nimi      | Ketta formaat |    Suurus    | Staatus |
+--------------------------------------+----------------+-------------+------------+--------+
| a2f2096d-c9d7-429a-b866-c7543c02a380 | overcloud-full |    qcow2    | 1487475712 | aktiivne |
+--------------------------------------+----------------+-------------+------------+--------+
Pilt "bm-deploy-kernel" on ĂŒles laaditud.
+--------------------------------------+------------------+-------------+---------+--------+
|                  ID                  |       Nimi       | Ketta formaat |   Suurus  | Staatus |
+--------------------------------------+------------------+-------------+---------+--------+
| e413aa78-e38f-404c-bbaf-93e582a8e67f | bm-deploy-kernel |     aki     | 6761064 | aktiivne |
+--------------------------------------+------------------+-------------+---------+--------+
Pilt "bm-deploy-ramdisk" on ĂŒles laaditud.
+--------------------------------------+-------------------+-------------+-----------+--------+
|                  ID                  |        Nimi       | Ketta formaat |    Suurus   | Staatus |
+--------------------------------------+-------------------+-------------+-----------+--------+
| 5cf3aba4-0e50-45d3-929f-27f025dd6ce3 | bm-deploy-ramdisk |     ari     | 461759376 | aktiivne |
+--------------------------------------+-------------------+-------------+-----------+--------+
(undercloud) [stack@undercloud ~]$

Kontrollime, et kÔik pildid on laaditud


(undercloud) [stack@undercloud ~]$  openstack image list
+--------------------------------------+------------------------+--------+
| ID                                   | Name                   | Status |
+--------------------------------------+------------------------+--------+
| e413aa78-e38f-404c-bbaf-93e582a8e67f | bm-deploy-kernel       | active |
| 5cf3aba4-0e50-45d3-929f-27f025dd6ce3 | bm-deploy-ramdisk      | active |
| a2f2096d-c9d7-429a-b866-c7543c02a380 | overcloud-full         | active |
| 949984e0-4932-4e71-af43-d67a38c3dc89 | overcloud-full-initrd  | active |
| c2553770-3e0f-4750-b46b-138855b5c385 | overcloud-full-vmlinuz | active |
+--------------------------------------+------------------------+--------+
(undercloud) [stack@undercloud ~]$

Veel ĂŒks detail — tuleb lisada DNS-server:


(undercloud) [stack@undercloud ~]$ openstack subnet list
+--------------------------------------+-----------------+--------------------------------------+------------------+
| ID                                   | Nimi            | VÔrk                                 | AlamvÔrk        |
+--------------------------------------+-----------------+--------------------------------------+------------------+
| f45dea46-4066-42aa-a3c4-6f84b8120cab | ctlplane-subnet | 6ca013dc-41c2-42d8-9d69-542afad53392 | 192.168.255.0/24 |
+--------------------------------------+-----------------+--------------------------------------+------------------+
(undercloud) [stack@undercloud ~]$ openstack subnet show f45dea46-4066-42aa-a3c4-6f84b8120cab
+-------------------+-----------------------------------------------------------+
| VÀlja             | VÀÀrtus                                                   |
+-------------------+-----------------------------------------------------------+
| allocation_pools  | 192.168.255.11-192.168.255.50                             |
| cidr              | 192.168.255.0/24                                          |
| created_at        | 2020-08-13T20:10:37Z                                      |
| description       |                                                           |
| dns_nameservers   |                                                           |
| enable_dhcp       | True                                                      |
| gateway_ip        | 192.168.255.1                                             |
| host_routes       | sihtkoht='169.254.169.254/32', vÀrav='192.168.255.1'     |
| id                | f45dea46-4066-42aa-a3c4-6f84b8120cab                      |
| ip_version        | 4                                                         |
| ipv6_address_mode | None                                                      |
| ipv6_ra_mode      | None                                                      |
| name              | ctlplane-subnet                                           |
| network_id        | 6ca013dc-41c2-42d8-9d69-542afad53392                      |
| prefix_length     | None                                                      |
| project_id        | a844ccfcdb2745b198dde3e1b28c40a3                          |
| revision_number   | 0                                                         |
| segment_id        | None                                                      |
| service_types     |                                                           |
| subnetpool_id     | None                                                      |
| tags              |                                                           |
| updated_at        | 2020-08-13T20:10:37Z                                      |
+-------------------+-----------------------------------------------------------+
(undercloud) [stack@undercloud ~]$ 
(undercloud) [stack@undercloud ~]$ neutron subnet-update f45dea46-4066-42aa-a3c4-6f84b8120cab --dns-nameserver 192.168.255.253                                    
neutron CLI on keelatakse ja see eemaldatakse tulevikus. Kasutage selle asemel openstack CLI-d.
Uuendatud alamvÔrk: f45dea46-4066-42aa-a3c4-6f84b8120cab
(undercloud) [stack@undercloud ~]$

NĂŒĂŒd saame anda kĂ€su introspektsiooniks:

(undercloud) [stack@undercloud ~]$ openstack overcloud node import --introspect --provide inspection.json 
Alustati Mistral töövoogu tripleo.baremetal.v1.register_or_update. TÀitmise ID: d57456a3-d8ed-479c-9a90-dff7c752d0ec
Ootame sÔnumeid jÀrjekorras 'tripleo' ilma aegumise ajata.


5 sÔlme on edukalt asetatud "hallatavale" olekule.
SÔlme UUID b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 on edukalt registreeritud
SÔlme UUID b89a72a3-6bb7-429a-93bc-48393d225838 on edukalt registreeritud
SÔlme UUID 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e on edukalt registreeritud
SÔlme UUID bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 on edukalt registreeritud
SÔlme UUID 766ab623-464c-423d-a529-d9afb69d1167 on edukalt registreeritud
Ootame introspektsiooni lÔpetamist...
Alustati Mistral töövoogu tripleo.baremetal.v1.introspect. TÀitmise ID: 6b4d08ae-94c3-4a10-ab63-7634ec198a79
Ootame sÔnumeid jÀrjekorras 'tripleo' ilma aegumise ajata.
SÔlme b89a72a3-6bb7-429a-93bc-48393d225838 introspektsioon on lÔpule viidud. Oleku: EDUKAS. Vead: Puuduvad
SÔlme 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e introspektsioon on lÔppenud. Oleku: EDUKAS. Vead: Puuduvad
SÔlme bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 introspektsioon on lÔppenud. Oleku: EDUKAS. Vead: Puuduvad
SÔlme 766ab623-464c-423d-a529-d9afb69d1167 introspektsioon on lÔppenud. Oleku: EDUKAS. Vead: Puuduvad
SÔlme b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 introspektsioon on lÔppenud. Oleku: EDUKAS. Vead: Puuduvad
5 sÔlme on edukalt introspektsioonitud.
Alustati Mistral töövoogu tripleo.baremetal.v1.provide. TÀitmise ID: f5594736-edcf-4927-a8a0-2a7bf806a59a
Ootame sÔnumeid jÀrjekorras 'tripleo' ilma aegumise ajata.
5 sÔlme on edukalt asetatud "saadaval" olekule.
(undercloud) [stack@undercloud ~]$

Kuidas nÀha, on kÔik lÀinud ilma vigadeta. Kontrollime, et kÔik sÔlmed oleksid seisundis saadaval:


(undercloud) [stack@undercloud ~]$ openstack baremetal node list
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
| UUID                                 | Name      | Instance UUID | Power State | Provisioning State | Maintenance |
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | control-1 | None          | power off   | available          | False       |
| b89a72a3-6bb7-429a-93bc-48393d225838 | storage-1 | None          | power off   | available          | False       |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | storage-2 | None          | power off   | available          | False       |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | compute-1 | None          | power off   | available          | False       |
| 766ab623-464c-423d-a529-d9afb69d1167 | compute-2 | None          | power off   | available          | False       |
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
(undercloud) [stack@undercloud ~]$ 

Kui node'id on mÔnes muus, enamasti hallatav, olekus, siis on midagi valesti ning tuleb vaadata logi, et selgitada vÀlja, miks see nii on. Pidage meeles, et selles stsenaariumis kasutame virtualiseerimist ja vÔivad olla vead, mis on seotud virtuaalmasinate vÔi vbmc kasutamisega.

SeejĂ€rel peame nĂ€itama, milline node millist funktsiooni tĂ€idab — see tĂ€hendab profiili mÀÀramist, millega node paigaldatakse:


(undercloud) [stack@undercloud ~]$ openstack overcloud profiles list
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| Node UUID                            | Node Name | Provision State | Current Profile | Possible Profiles |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | control-1 | saadaval        | Puudub          |                   |
| b89a72a3-6bb7-429a-93bc-48393d225838 | storage-1 | saadaval        | Puudub          |                   |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | storage-2 | saadaval        | Puudub          |                   |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | compute-1 | saadaval        | Puudub          |                   |
| 766ab623-464c-423d-a529-d9afb69d1167 | compute-2 | saadaval        | Puudub          |                   |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
(undercloud) [stack@undercloud ~]$ openstack flavor list
+--------------------------------------+---------------+------+------+-----------+-------+-----------+
| ID                                   | Name          |  RAM | Disk | Ephemeral | VCPUs | Is Public |
+--------------------------------------+---------------+------+------+-----------+-------+-----------+
| 168af640-7f40-42c7-91b2-989abc5c5d8f | swift-storage | 4096 |   40 |         0 |     1 | TÔsi      |
| 52148d1b-492e-48b4-b5fc-772849dd1b78 | baremetal     | 4096 |   40 |         0 |     1 | TÔsi      |
| 56e66542-ae60-416d-863e-0cb192d01b09 | control       | 4096 |   40 |         0 |     1 | TÔsi      |
| af6796e1-d0c4-4bfe-898c-532be194f7ac | block-storage | 4096 |   40 |         0 |     1 | TÔsi      |
| e4d50fdd-0034-446b-b72c-9da19b16c2df | compute       | 4096 |   40 |         0 |     1 | TÔsi      |
| fc2e3acf-7fca-4901-9eee-4a4d6ef0265d | ceph-storage  | 4096 |   40 |         0 |     1 | TÔsi      |
+--------------------------------------+---------------+------+------+-----------+-------+-----------+
(undercloud) [stack@undercloud ~]$

MÀÀrame iga sÔlme profiili:


openstack baremetal node set --property capabilities='profile:control,boot_option:local' b4b2cf4a-b7ca-4095-af13-cc83be21c4f5
openstack baremetal node set --property capabilities='profile:ceph-storage,boot_option:local' b89a72a3-6bb7-429a-93bc-48393d225838
openstack baremetal node set --property capabilities='profile:ceph-storage,boot_option:local' 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e
openstack baremetal node set --property capabilities='profile:compute,boot_option:local' bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8
openstack baremetal node set --property capabilities='profile:compute,boot_option:local' 766ab623-464c-423d-a529-d9afb69d1167

Kontrollime, et kÔik on Ôigesti tehtud:


(undercloud) [stack@undercloud ~]$ openstack overcloud profiles list
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| Node UUID                            | Node Name | Provision State | Current Profile | Possible Profiles |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | control-1 | available       | control         |                   |
| b89a72a3-6bb7-429a-93bc-48393d225838 | storage-1 | available       | ceph-storage    |                   |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | storage-2 | available       | ceph-storage    |                   |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | compute-1 | available       | compute         |                   |
| 766ab623-464c-423d-a529-d9afb69d1167 | compute-2 | available       | compute         |                   |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
(undercloud) [stack@undercloud ~]$

Kui kÔik on korrektne, anname kÀsu overcloudi deployimiseks:

openstack overcloud deploy --templates --control-scale 1 --compute-scale 2  --ceph-storage-scale 2 --control-flavor control --compute-flavor compute  --ceph-storage-flavor ceph-storage --libvirt-type qemu

TÔelises installatsioonis kasutatakse loomulikult kohandatud malli, kuid meie puhul muudab see protsessi oluliselt keerulisemaks, kuna tuleb selgitada iga muudatust ƥablonis. Nagu eelnevalt mainitud, piisab isegi lihtsast installatsioonist, et nÀha, kuidas see töötab.

MÀrkus: muutuja --libvirt-type qemu on antud juhul vajalik, kuna kasutame pesakonnasisest virtualiseerimist. Vastasel juhul ei kÀivitu teie virtuaalsed masinad.

NĂŒĂŒd on teil umbes tund vĂ”i isegi rohkem (sĂ”ltub riistvara vĂ”imetest) ja teil jÀÀb vaid loota, et selle aja möödudes nĂ€ete sellist teadet:


2020-08-14 08:39:21Z [overcloud]: CREATE_COMPLETE  Stack CREATE completed successfully

 Stack overcloud CREATE_COMPLETE 

Host 192.168.255.21 not found in /home/stack/.ssh/known_hosts
Started Mistral Workflow tripleo.deployment.v1.get_horizon_url. Execution ID: fcb996cd-6a19-482b-b755-2ca0c08069a9
Overcloud Endpoint: http://192.168.255.21:5000/
Overcloud Horizon Dashboard URL: http://192.168.255.21:80/dashboard
Overcloud rc file: /home/stack/overcloudrc
Overcloud Deployed
(undercloud) [stack@undercloud ~]$

NĂŒĂŒd on teil peaaegu tĂ€ielik OpenStack'i versioon, millega saate Ă”ppida, katsetada jne.

Kontrollime, et kĂ”ik toimib korralikult. Kasutaja stack kodukaustas on kaks faili – ĂŒks on stackrc (undercloud'i haldamiseks) ja teine overcloudrc (overcloud'i haldamiseks). Need failid tuleb mÀÀrata source'ina, kuna need sisaldavad vajalikku autentimiseks vajalikku teavet.


(undercloud) [stack@undercloud ~]$ openstack server list
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
| ID                                   | Name                    | Status | Networks                | Image          | Flavor       |
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
| fd7d36f4-ce87-4b9a-93b0-add2957792de | overcloud-controller-0  | ACTIVE | ctlplane=192.168.255.15 | overcloud-full | control      |
| edc77778-8972-475e-a541-ff40eb944197 | overcloud-novacompute-1 | ACTIVE | ctlplane=192.168.255.26 | overcloud-full | compute      |
| 5448ce01-f05f-47ca-950a-ced14892c0d4 | overcloud-cephstorage-1 | ACTIVE | ctlplane=192.168.255.34 | overcloud-full | ceph-storage |
| ce6d862f-4bdf-4ba3-b711-7217915364d7 | overcloud-novacompute-0 | ACTIVE | ctlplane=192.168.255.19 | overcloud-full | compute      |
| e4507bd5-6f96-4b12-9cc0-6924709da59e | overcloud-cephstorage-0 | ACTIVE | ctlplane=192.168.255.44 | overcloud-full | ceph-storage |
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
(undercloud) [stack@undercloud ~]$ 


(undercloud) [stack@undercloud ~]$ source overcloudrc 
(overcloud) [stack@undercloud ~]$ 
(overcloud) [stack@undercloud ~]$ openstack project list
+----------------------------------+---------+
| ID                               | Name    |
+----------------------------------+---------+
| 4eed7d0f06544625857d51cd77c5bd4c | admin   |
| ee1c68758bde41eaa9912c81dc67dad8 | service |
+----------------------------------+---------+
(overcloud) [stack@undercloud ~]$ 
(overcloud) [stack@undercloud ~]$ 
(overcloud) [stack@undercloud ~]$ openstack network agent list  
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host                                | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| 10495de9-ba4b-41fe-b30a-b90ec3f8728b | Open vSwitch agent | overcloud-novacompute-1.localdomain | None              | :-)   | UP    | neutron-openvswitch-agent |
| 1515ad4a-5972-46c3-af5f-e5446dff7ac7 | L3 agent           | overcloud-controller-0.localdomain  | nova              | :-)   | UP    | neutron-l3-agent          |
| 322e62ca-1e5a-479e-9a96-4f26d09abdd7 | DHCP agent         | overcloud-controller-0.localdomain  | nova              | :-)   | UP    | neutron-dhcp-agent        |
| 9c1de2f9-bac5-400e-998d-4360f04fc533 | Open vSwitch agent | overcloud-novacompute-0.localdomain | None              | :-)   | UP    | neutron-openvswitch-agent |
| d99c5657-851e-4d3c-bef6-f1e3bb1acfb0 | Open vSwitch agent | overcloud-controller-0.localdomain  | None              | :-)   | UP    | neutron-openvswitch-agent |
| ff85fae6-5543-45fb-a301-19c57b62d836 | Metadata agent     | overcloud-controller-0.localdomain  | None              | :-)   | UP    | neutron-metadata-agent    |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
(overcloud) [stack@undercloud ~]$

Minu paigalduses on veel ĂŒks vĂ€ike detail, milleks on marsruudi lisamine kontrolleris, kuna masin, millega töötan, asub teises vĂ”rgus. Selleks logime sisse control-1 kasutajanimega heat-admin ja lisame marsruudi.


(undercloud) [stack@undercloud ~]$ ssh heat-admin@192.168.255.15         
Viimane sisselogimine: Reede Aug 14 09:47:40 2020, masinat 192.168.255.1
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$ sudo ip route add 10.169.0.0/16 via 192.168.255.254

NĂŒĂŒd saate minna horisontaali. KĂ”ik vajalikud andmed — aadressid, sisselogimine ja parool — asuvad failis /home/stack/overcloudrc. LĂ”plik skeem nĂ€eb vĂ€lja jĂ€rgmiselt:

Sissejuhatus pilveinfrastruktuuri vÔrku

Muide, meie paigalduses anti masinatele aadresse DHCP kaudu ja nagu nĂ€ete, antakse neid „kuidas juhtub“. Kui soovite, saate ĆĄabloonis kindlalt mÀÀrata, milline aadress millisele masinale tuleks juurutamise ajal kinnitada.

Kuidas liigub liiklus virtuaalsete masinate vahel?

Selles artiklis vaatame kolme varianti liikluse edastamiseks

  • Kaks masinat ĂŒhel hĂŒperviisoril ĂŒhes L2 vĂ”rgus
  • Kaks masinat erinevates hĂŒperviisorites ĂŒhes L2 vĂ”rgus
  • Kaks masinat erinevates vĂ”rkudes (marsruutimine vĂ”rkude vahel)

JĂ€rgmises osas vaatame juhtumeid, kus ĂŒhendus vĂ€lismaailmaga toimub external vĂ”rgu kaudu, kasutades ujuvaid aadresse ja paremat marsruutimist. Praegu keskendume sisetrafikule.

Kontrollimiseks kogume sellise skeemi:

Sissejuhatus pilveinfrastruktuuri vÔrku

Meil on loodud 4 virtuaalset masinat — 3 ĂŒhises L2 vĂ”rgus — net-1, ja veel 1 vĂ”rgus net-2

(overcloud) [stack@undercloud ~]$ nova list --tenant 5e18ce8ec9594e00b155485f19895e6c             
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
| ID                                   | Name | Tenant ID                        | Status | Task State | Power State | Networks        |
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
| f53b37b5-2204-46cc-aef0-dba84bf970c0 | vm-1 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | -          | Running     | net-1=10.0.1.85 |
| fc8b6722-0231-49b0-b2fa-041115bef34a | vm-2 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | -          | Running     | net-1=10.0.1.88 |
| 3cd74455-b9b7-467a-abe3-bd6ff765c83c | vm-3 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | -          | Running     | net-1=10.0.1.90 |
| 7e836338-6772-46b0-9950-f7f06dbe91a8 | vm-4 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | -          | Running     | net-2=10.0.2.8  |
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
(overcloud) [stack@undercloud ~]$ 

Vaatame, millistel hĂŒpervisoritel loodud masinad asuvad:

(overcloud) [stack@undercloud ~]$ nova show f53b37b5-2204-46cc-aef0-dba84bf970c0 | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname             | vm-1                                                     |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | overcloud-novacompute-0.localdomain                      |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000001                                        |
(overcloud) [stack@undercloud ~]$ nova show fc8b6722-0231-49b0-b2fa-041115bef34a | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname             | vm-2                                                     |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | overcloud-novacompute-1.localdomain                      |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000002                                        |
(overcloud) [stack@undercloud ~]$ nova show 3cd74455-b9b7-467a-abe3-bd6ff765c83c | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname             | vm-3                                                     |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | overcloud-novacompute-0.localdomain                      |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000003                                        |
(overcloud) [stack@undercloud ~]$ nova show 7e836338-6772-46b0-9950-f7f06dbe91a8 | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname             | vm-4                                                     |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | overcloud-novacompute-1.localdomain                      |
| OS-EXT-SRV-ATTR:instance_name        | instance-00000004                                        |

(overcloud) [stack@undercloud ~]$
Masinad vm-1 ja vm-3 asuvad compute-0-l, masinad vm-2 ja vm-4 asuvad nodis compute-1.

Lisaks on loodud virtuaalne ruuter, et vÔimaldada marsruutimist toodud vÔrkude vahel:

(overcloud) [stack@undercloud ~]$ openstack router list  --project 5e18ce8ec9594e00b155485f19895e6c
+--------------------------------------+----------+--------+-------+-------------+-------+----------------------------------+
| ID                                   | Name     | Status | State | Distributed | HA    | Project                          |
+--------------------------------------+----------+--------+-------+-------------+-------+----------------------------------+
| 0a4d2420-4b9c-46bd-aec1-86a1ef299abe | router-1 | ACTIVE | UP    | False       | False | 5e18ce8ec9594e00b155485f19895e6c |
+--------------------------------------+----------+--------+-------+-------------+-------+----------------------------------+
(overcloud) [stack@undercloud ~]$ 

Ruuteril on kaks virtuaalset porti, mis toimivad vÀravatena vÔrkudele:

(overcloud) [stack@undercloud ~]$ openstack router show 0a4d2420-4b9c-46bd-aec1-86a1ef299abe | grep interface
| interfaces_info         | [{"subnet_id": "2529ad1a-6b97-49cd-8515-cbdcbe5e3daa", "ip_address": "10.0.1.254", "port_id": "0c52b15f-8fcc-4801-bf52-7dacc72a5201"}, {"subnet_id": "335552dd-b35b-456b-9df0-5aac36a3ca13", "ip_address": "10.0.2.254", "port_id": "92fa49b5-5406-499f-ab8d-ddf28cc1a76c"}] |
(overcloud) [stack@undercloud ~]$ 

Kuid enne, kui vaatame, kuidas liiklus toimub, vaatame, mida me hetkel kontrollnodos (mis on samas ka vÔrgunode) ja arvutusnodes omame. Alustame arvutusnodest.


[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-vsctl show
[heat-admin@overcloud-novacompute-0 ~]$ sudo sudo ovs-appctl dpif/show
system@ovs-system: hit:3 missed:3
  br-ex:
    br-ex 65534/1: (internal)
    phy-br-ex 1/none: (patch: peer=int-br-ex)
  br-int:
    br-int 65534/2: (internal)
    int-br-ex 1/none: (patch: peer=phy-br-ex)
    patch-tun 2/none: (patch: peer=patch-int)
  br-tun:
    br-tun 65534/3: (internal)
    patch-int 1/none: (patch: peer=patch-tun)
    vxlan-c0a8ff0f 3/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.15)
    vxlan-c0a8ff1a 2/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.26)
[heat-admin@overcloud-novacompute-0 ~]$

Praegu node'il on kolm OVS silda — br-int, br-tun ja br-ex. Nende vahel, nagu me nĂ€eme, on erinevad liidesed. Lihtsuse huvides joonistame kĂ”ik need liidesed skeemile ja vaatame, mis vĂ€lja tuleb.

Sissejuhatus pilveinfrastruktuuri vÔrku

VxLAN tunnelite aadresside pĂ”hjal nĂ€eme, et ĂŒks tunnel on seadistatud compute-1 (192.168.255.26) ja teine tunnel vaatab control-1 (192.168.255.15). Kuid kĂ”ige huvitavam on see, et br-ex-l ei ole fĂŒĂŒsilisi liideseid, ja kui vaadata, millised voogud on seadistatud, siis on selge, et see sild suudab hetkel vaid liiklust blokeerida.


[heat-admin@overcloud-novacompute-0 ~]$ ifconfig eth0
eth0: flags=4163  mtu 1450
        inet 192.168.255.19  netmask 255.255.255.0  broadcast 192.168.255.255
        inet6 fe80::5054:ff:fe6a:eabe  prefixlen 64  scopeid 0x20
        ether 52:54:00:6a:ea:be  txqueuelen 1000  (Ethernet)
        RX packets 2909669  bytes 4608201000 (4.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1821057  bytes 349198520 (333.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[heat-admin@overcloud-novacompute-0 ~]$ 

Kohas, nĂ€htub, et aadress on otse fĂŒĂŒsilisele portile kinnitatud, mitte virtuaalse sildliidesele.


[heat-admin@overcloud-novacompute-0 ~]$  sudo ovs-appctl fdb/show br-ex
 port  VLAN  MAC                Age
[heat-admin@overcloud-novacompute-0 ~]$  sudo ovs-ofctl dump-flows br-ex
 cookie=0x9169eae8f7fe5bb2, duration=216686.864s, table=0, n_packets=303, n_bytes=26035, priority=2,in_port="phy-br-ex" actions=drop
 cookie=0x9169eae8f7fe5bb2, duration=216686.887s, table=0, n_packets=0, n_bytes=0, priority=0 actions=NORMAL
[heat-admin@overcloud-novacompute-0 ~]$ 

Esimese reegli kohaselt tuleb kÔik, mis tuli porti phy-br-ex, kÔrvaldada.
Selles sillas ei saa praegu muud liiklust tekkida kui antud liidese kaudu (ĂŒhendus br-int'iga), ja arvestades sillale tulevat BUM liiklust, tundub, et see on juba olnud.

See, from this node, the traffic can only exit via a VxLAN tunnel and no other way. However, if DVR is enabled, the situation will change, but we will deal with that another time. When using network isolation, for example with VLANs, you will have more than one L3 interface in the 0 VLAN, but VxLAN traffic will still exit from the node in the same way, encapsulated within a dedicated VLAN.

Now that we've dealt with the compute node, let's move on to the control node.


[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl dpif/show
system@ovs-system: hit:930491 missed:825
  br-ex:
    br-ex 65534/1: (internal)
    eth0 1/2: (system)
    phy-br-ex 2/none: (patch: peer=int-br-ex)
  br-int:
    br-int 65534/3: (internal)
    int-br-ex 1/none: (patch: peer=phy-br-ex)
    patch-tun 2/none: (patch: peer=patch-int)
  br-tun:
    br-tun 65534/4: (internal)
    patch-int 1/none: (patch: peer=patch-tun)
    vxlan-c0a8ff13 3/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.19)
    vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$

In fact, it can be said that everything is the same, however, the IP address is no longer on the physical interface but on a virtual bridge. This is because this port is the one through which the traffic will exit to the outside world.


[heat-admin@overcloud-controller-0 ~]$ ifconfig br-ex
br-ex: flags=4163  mtu 1450
        inet 192.168.255.15  netmask 255.255.255.0  broadcast 192.168.255.255
        inet6 fe80::5054:ff:fe20:a22f  prefixlen 64  scopeid 0x20
        ether 52:54:00:20:a2:2f  txqueuelen 1000  (Ethernet)
        RX packets 803859  bytes 1732616116 (1.6 GiB)
        RX errors 0  dropped 63  overruns 0  frame 0
        TX packets 808475  bytes 121652156 (116.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl fdb/show br-ex
 port  VLAN  MAC                Age
    3   100  28:c0:da:00:4d:d3   35
    1     0  28:c0:da:00:4d:d3   35
    1     0  52:54:00:98:e9:d6    0
LOCAL     0  52:54:00:20:a2:2f    0
    1     0  52:54:00:2c:08:9e    0
    3   100  52:54:00:20:a2:2f    0
    1     0  52:54:00:6a:ea:be    0
[heat-admin@overcloud-controller-0 ~]$ 

See port is connected to bridge br-ex and since there are no VLAN tags on it, this port is a trunk port where all VLANs are allowed; currently, traffic is leaving without a tag, indicated by the vlan-id 0 in the output above.

Sissejuhatus pilveinfrastruktuuri vÔrku

Everything else at this moment is similar to the compute node — the same bridges, the same tunnels going to the two compute nodes.

SĂ€ilitusnode me ei kĂ€sitle selles artiklis, kuid arusaamiseks on vajalik öelda, et nende node'ide vĂ”rguosa on ĂŒlimalt lihtne. Meie puhul on seal ainult ĂŒks fĂŒĂŒsiline port (eth0) koos sellele mÀÀratud IP-aadressiga ja kĂ”ik. Seal ei ole mingeid VxLAN tunnelite, tunnelibridge'e jms — seal pole ĂŒldse ovs, kuna see pole mĂ”ttekas. VĂ”rkude eraldamise kasutamisel on sellel node'il kaks liidest (fĂŒĂŒsilised portid, bodny vĂ”i lihtsalt kaks VLAN-i — see pole oluline — sĂ”ltub sellest, mida soovite) — ĂŒks halduseks, teine liikluseks (VM-i kettale kirjutamine, ketaselt lugemine jne).

Selgitasime, mida meil on node'ides, ilma igasuguste teenusteta. NĂŒĂŒd kĂ€ivitame 4 virtuaalset masinat ja vaatame, kuidas ĂŒlaltoodud skeem muutub — meil peavad ilmuma pordid, virtuaalsed ruuterid jne.

Praegu nÀeb meie vÔrgu struktuur vÀlja jÀrgmine:

Sissejuhatus pilveinfrastruktuuri vÔrku

Meil on igas computernode'is kaks virtuaalset masinat. Vaata nĂ€ite pĂ”hjal compute-0, kuidas kĂ”ik on ĂŒhendatud.


[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh list 
 Id    Name                           State
----------------------------------------------------
 1     instance-00000001              running
 3     instance-00000003              running

[heat-admin@overcloud-novacompute-0 ~]$ 

Masinal on ainult ĂŒks virtuaalne liides — tap95d96a75-a0:

[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
Liides  TĂŒĂŒp       Allikas     Modell       MAC
-------------------------------------------------------
tap95d96a75-a0 sild       qbr95d96a75-a0 virtio      fa:16:3e:44:98:20

[heat-admin@overcloud-novacompute-0 ~]$ 

See liides vaatab Linux silda:

[heat-admin@overcloud-novacompute-0 ~]$ sudo brctl show
silla nimi     silla id               STP lubatud     liidesed
docker0         8000.0242904c92a8       ei
qbr5bd37136-47          8000.5e4e05841423       ei              qvb5bd37136-47
                                                        tap5bd37136-47
qbr95d96a75-a0          8000.de076cb850f6       ei              qvb95d96a75-a0
                                                        tap95d96a75-a0
[heat-admin@overcloud-novacompute-0 ~]$ 

Nagu on vĂ€lja toodud sillast, on seal kokku kaks liidest — tap95d96a75-a0 ja qvb95d96a75-a0.

Siin tasub peatuda OpenStackis kasutatavate virtuaalsete vĂ”rgu seadmete tĂŒĂŒpide juures:
vtap — virtuaalne liides, mis on seotud instantsiga (VM)
qbr — Linux sild
qvb ja qvo — vEth paar, mis on ĂŒhendatud Linux silla ja Open vSwitch silla juurde
br-int, br-tun, br-vlan — Open vSwitch sillad
patch-, int-br-, phy-br- — Open vSwitchi patch-liidesed, mis ĂŒhendavad sildu
qg, qr, ha, fg, sg — Open vSwitchi pordid, mida virtuaalsed seadmed kasutavad OVS-iga ĂŒhendamiseks

Kuidas te mĂ”istate, kui meie brĂŒgges on qvb95d96a75-a0 port, mis on vEth paar, siis kusagil peab olema selle vastaspool, mida loogiliselt tuleks nimetada qvo95d96a75-a0. Vaadake, millised pordid on OVS-il.


[heat-admin@overcloud-novacompute-0 ~]$ sudo sudo ovs-appctl dpif/show
system@ovs-system: hit:526 missed:91
  br-ex:
    br-ex 65534/1: (internal)
    phy-br-ex 1/none: (patch: peer=int-br-ex)
  br-int:
    br-int 65534/2: (internal)
    int-br-ex 1/none: (patch: peer=phy-br-ex)
    patch-tun 2/none: (patch: peer=patch-int)
    qvo5bd37136-47 6/6: (system)
    qvo95d96a75-a0 3/5: (system)
  br-tun:
    br-tun 65534/3: (internal)
    patch-int 1/none: (patch: peer=patch-tun)
    vxlan-c0a8ff0f 3/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.15)
    vxlan-c0a8ff1a 2/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.26)
[heat-admin@overcloud-novacompute-0 ~]$ 

Kuidas me nĂ€eme, et port asub br-int. Br-int tĂ€idab funktsiooni, toimides virtuaalmasinate portide terminaatorina. Lisaks qvo95d96a75-a0 on vĂ€ljundis nĂ€htaval port qvo5bd37136-47. LĂ”puks nĂ€eb meie skeem nĂŒĂŒd vĂ€lja jĂ€rgmine:

Sissejuhatus pilveinfrastruktuuri vÔrku

KĂŒsimus, mis peaks kohe köitma tĂ€helepanelikku lugejat — miks on vajalik Linuxi sild virtuaalmasina ja OVS-i porta vahel? Asi on selles, et masina kaitsmiseks kasutatakse turvagrupe, mis ei ole midagi muud kui iptables. OVS ei toimi iptablesiga, seega on selline "konditsioneer" leiutatud. Kuid see on oma aja Ă€ra elanud — uutes versioonides asendab seda conntrack.

Seega nÀeb skeem kokkuvÔttes vÀlja nii:

Sissejuhatus pilveinfrastruktuuri vÔrku

Kaks masinat ĂŒhel hĂŒperviisoril ĂŒhes L2 vĂ”rgus

Kuna need kaks VM-i asuvad samas L2 vĂ”rgus ja samas hĂŒperviisoril, siis liiklus nende vahel liigub loogiliselt kohalikult lĂ€bi br-int, kuna mĂ”lemad masinad on samas VLAN-is:


[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tap95d96a75-a0 bridge     qbr95d96a75-a0 virtio      fa:16:3e:44:98:20

[heat-admin@overcloud-novacompute-0 ~]$ 
[heat-admin@overcloud-novacompute-0 ~]$ 
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000003
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tap5bd37136-47 bridge     qbr5bd37136-47 virtio      fa:16:3e:83:ad:a4

[heat-admin@overcloud-novacompute-0 ~]$ 
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl fdb/show br-int 
 port  VLAN  MAC                Age
    6     1  fa:16:3e:83:ad:a4    0
    3     1  fa:16:3e:44:98:20    0
[heat-admin@overcloud-novacompute-0 ~]$ 

Kaks masinat erinevates hĂŒperviisorites ĂŒhes L2 vĂ”rgus

Vaadake nĂŒĂŒd, kuidas lĂ€heb liiklus kahe masina vahel ĂŒhes L2 vĂ”rgus, kuid erinevatel hĂŒpervideerijatel. Kui olla aus, siis ei muutu eriti midagi, lihtsalt liiklus hĂŒpervideerijate vahel lĂ€heb vxlan tunnelite kaudu. Vaadake nĂ€idet.

Virtuaalsete masinate aadressid, mille vahel liiklust vaatame:

[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
Liides  TĂŒĂŒp       Allikas     Modell       MAC
-------------------------------------------------------
tap95d96a75-a0 sild       qbr95d96a75-a0 virtio      fa:16:3e:44:98:20

[heat-admin@overcloud-novacompute-0 ~]$ 


[heat-admin@overcloud-novacompute-1 ~]$ sudo virsh domiflist instance-00000002
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tape7e23f1b-07 bridge     qbre7e23f1b-07 virtio      fa:16:3e:72:ad:53

[heat-admin@overcloud-novacompute-1 ~]$ 

Vaadake edastustabelit br-int-s compute-0-s:

[heat-admin@overcloud-novacompute-0 ~]$  sudo ovs-appctl fdb/show br-int | grep fa:16:3e:72:ad:53
    2     1  fa:16:3e:72:ad:53    1
[heat-admin@overcloud-novacompute-0 ~]

Liiklus peaks minema pessa 2 — vaatame, mis see pesa on:

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl show br-int | grep addr
 1(int-br-ex): addr:7e:7f:28:1f:bd:54
 2(patch-tun): addr:0a:bd:07:69:58:d9
 3(qvo95d96a75-a0): addr:ea:50:9a:3d:69:58
 6(qvo5bd37136-47): addr:9a:d1:03:50:3d:96
 LOCAL(br-int): addr:1a:0f:53:97:b1:49
[heat-admin@overcloud-novacompute-0 ~]$

See on patch-tun — ehk siis liides br-tun-is. Vaadake, mis toimub paketiga br-tun-is:

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl dump-flows br-tun | grep fa:16:3e:72:ad:53
 cookie=0x8759a56536b67a8e, duration=1387.959s, table=20, n_packets=1460, n_bytes=138880, hard_timeout=300, idle_age=0, hard_age=0, priority=1,vlan_tci=0x0001/0x0fff,dl_dst=fa:16:3e:72:ad:53 actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:2
[heat-admin@overcloud-novacompute-0 ~]$ 

Pakett pakitakse VxLAN-i ja saadetakse porti 2. Vaatame, kuhu port 2 viib:

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl show br-tun | grep addr   
 1(patch-int): addr:b2:d1:f8:21:96:66
 2(vxlan-c0a8ff1a): addr:be:64:1f:75:78:a7
 3(vxlan-c0a8ff0f): addr:76:6f:b9:3c:3f:1c
 LOCAL(br-tun): addr:a2:5b:6d:4f:94:47
[heat-admin@overcloud-novacompute-0 ~]$

See on vxlan tunnel compute-1-l.

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl dpif/show | egrep vxlan-c0a8ff1a
    vxlan-c0a8ff1a 2/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.26)
[heat-admin@overcloud-novacompute-0 ~]$

Liigume compute-1 ja vaatame, mis juhtuda vÔib paketiga:

[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-appctl fdb/show br-int | egrep fa:16:3e:44:98:20
    2     1  fa:16:3e:44:98:20    1
[heat-admin@overcloud-novacompute-1 ~]$ 

Maks on olemas br-int-i edastus tabelis compute-1, ja nagu nĂ€ha ĂŒlaltoodud vĂ€ljundist, on ta nĂ€htav lĂ€bi port 2, mis on br-tun-i suunas:

[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-ofctl show br-int | grep addr   
 1(int-br-ex): addr:8a:d7:f9:ad:8c:1d
 2(patch-tun): addr:46:cc:40:bd:20:da
 3(qvoe7e23f1b-07): addr:12:78:2e:34:6a:c7
 4(qvo3210e8ec-c0): addr:7a:5f:59:75:40:85
 LOCAL(br-int): addr:e2:27:b2:ed:14:46

Ja jÀtkame ja vaatame, et br-int-i peal compute-1-s on sihtkoht:

[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-appctl fdb/show br-int | egrep fa:16:3e:72:ad:53
    3     1  fa:16:3e:72:ad:53    0
[heat-admin@overcloud-novacompute-1 ~]$ 

See tÀhendab, et saadetud pakett lÀheb porti 3, mille taga on juba virtuaalne masin instance-00000003.

OpenStacki juurutamise suurim eelis virtuaalses infrastuktuuris on see, et saame probleemideta jĂ€lgida hĂŒperviisorite vahel liikuvat liiklust ja vaadata, mis temaga juhtub. TĂ€pselt seda me praegu teeme, kĂ€ivitame tcpdump vnet porti peal suunaga compute-0:


[root@hp-gen9 bormoglotx]# tcpdump -vvv -i vnet3
tcpdump: kuulamine vnet3, link-tĂŒĂŒp EN10MB (Ethernet), haaramissuurus 262144 bait

*****************omitted*******************

04:39:04.583459 IP (tos 0x0, ttl 64, id 16868, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.19.39096 > 192.168.255.26.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 8012, offset 0, flags [DF], proto ICMP (1), length 84)
    10.0.1.85 > 10.0.1.88: ICMP echo request, id 5634, seq 16, length 64
04:39:04.584449 IP (tos 0x0, ttl 64, id 35181, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.26.speedtrace-disc > 192.168.255.19.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 59124, offset 0, flags [none], proto ICMP (1), length 84)
    10.0.1.88 > 10.0.1.85: ICMP echo reply, id 5634, seq 16, length 64
	
*****************omitted*******************

Esimene rida nÀitab, et pakett, mille aadress on 10.0.1.85, suundub aadressile 10.0.1.88 (ICMP liiklus), olles samas pakitud VxLAN paketti, mille vni on 22, ja pakett tuleb hostilt 192.168.255.19 (compute-0) hostile 192.168.255.26 (compute-1). Saame kontrollida, et VNI vastab sellele, mis on nÀidatud ovs-is.

Naaseme selle rea juurde actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:2. 0x16 on vni 16-sĂŒsteemis. Muudame selle numbri kĂŒmnendsĂŒsteemi:


16 = 6*16^0+1*16^1 = 6+16 = 22

See tÀhendab, et vni vastab tÔele.

Teine rida nÀitab vastupidist liiklust, aga selle selgitamisel pole mÔtet, seal on nii selge.

Kaks masinat erinevates vÔrkudes (marsruutimine vÔrkude vahel)

Viimane juhtum tĂ€na — see on marsruutimine vĂ”rkude vahel ĂŒhe projekti raames virtuaalse marsruuteri kasutamine. Vaadeldav juhtum on ilma DVR-ita (keda kĂ€sitleme teises artiklis), seega toimub marsruutimine network node'is. Meie juhul ei ole network node eraldi entiteedina vĂ€lja toodud ja asub control node'is.

Esmalt vaatame, et marsruutimine töötab:

$ ping 10.0.2.8
PING 10.0.2.8 (10.0.2.8): 56 andmeid
64 baiti aadressilt 10.0.2.8: seq=0 ttl=63 aeg=7.727 ms
64 baiti aadressilt 10.0.2.8: seq=1 ttl=63 aeg=3.832 ms
^C
--- 10.0.2.8 ping statistika ---
2 paketti saadetud, 2 paketti vastu vÔetud, 0% paketi kadu
ring-reis min/avg/max = 3.832/5.779/7.727 ms

Kuna antud juhul peab paket minema vÀravasse ja seal marsruuditama, peame vÀlja selgitama vÀrava MAC-aadressi, selleks vaatame ARP tabelit instantsis:

$ arp
host-10-0-1-254.openstacklocal (10.0.1.254) at fa:16:3e:c4:64:70 [ether]  eth0-l
host-10-0-1-1.openstacklocal (10.0.1.1) at fa:16:3e:e6:2c:5c [ether]  eth0-l
host-10-0-1-90.openstacklocal (10.0.1.90) at fa:16:3e:83:ad:a4 [ether]  eth0-l
host-10-0-1-88.openstacklocal (10.0.1.88) at fa:16:3e:72:ad:53 [ether]  eth0-l

NĂŒĂŒd vaatame, kuhu peaks liiklus suunatakse (10.0.1.254) fa:16:3e:c4:64:70:

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl fdb/show br-int | egrep fa:16:3e:c4:64:70
    2     1  fa:16:3e:c4:64:70    0
[heat-admin@overcloud-novacompute-0 ~]$ 

Vaatame, kuhu viib port 2:

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl show br-int | grep addr
 1(int-br-ex): addr:7e:7f:28:1f:bd:54
 2(patch-tun): addr:0a:bd:07:69:58:d9
 3(qvo95d96a75-a0): addr:ea:50:9a:3d:69:58
 6(qvo5bd37136-47): addr:9a:d1:03:50:3d:96
 LOCAL(br-int): addr:1a:0f:53:97:b1:49
[heat-admin@overcloud-novacompute-0 ~]$ 

KĂ”ik on loogiline, liiklus suundub br-tun'i. Vaatame, millises vxlan tunnelis see ĂŒmber suunatakse:

[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl dump-flows br-tun | grep fa:16:3e:c4:64:70
 cookie=0x8759a56536b67a8e, duration=3514.566s, table=20, n_packets=3368, n_bytes=317072, hard_timeout=300, idle_age=0, hard_age=0, priority=1,vlan_tci=0x0001/0x0fff,dl_dst=fa:16:3e:c4:64:70 actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:3
[heat-admin@overcloud-novacompute-0 ~]$ 

Kolmas port on vxlan tunnel:

[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-tun | grep addr
 1(patch-int): addr:a2:69:00:c5:fa:ba
 2(vxlan-c0a8ff1a): addr:86:f0:ce:d0:e8:ea
 3(vxlan-c0a8ff13): addr:72:aa:73:2c:2e:5b
 LOCAL(br-tun): addr:a6:cb:cd:72:1c:45
[heat-admin@overcloud-controller-0 ~]$ 

Mis vaatab control node'i:

[heat-admin@overcloud-controller-0 ~]$ sudo sudo ovs-appctl dpif/show | grep vxlan-c0a8ff1a
    vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$ 

Trafik jĂ”udis control node'i, seega peame sellele ĂŒle minema ja vaatama, kuidas marsruutimine toimub.

Kuidas te mĂ€letate, nĂ€gi control node vĂ€lja tĂ€pselt sama nagu compute node — kolm sama silda, kuid br-ex'il oli fĂŒĂŒsiline port, mille kaudu node sai suunata liiklust vĂ€lja. Instantside loomine muutis compute node'ide konfiguratsiooni — lisandusid linux bridge, iptables ja liidesed node'idesse. VĂ”rkude ja virtuaalse marsruuteri loomine jĂ€ttis samuti jĂ€lje control node'i konfiguratsioonile.

Nii et on ilmne, et gateway MAC-aadress peaks olema br-int'i edasiandmis tabelis control node'is. Kontrollime, kas see seal on ja kuhu see vaatab:

[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:c4:64:70
    5     1  fa:16:3e:c4:64:70    1
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$  sudo ovs-ofctl show br-int | grep addr
 1(int-br-ex): addr:2e:58:b6:db:d5:de
 2(patch-tun): addr:06:41:90:f0:9e:56
 3(tapca25a97e-64): addr:fa:16:3e:e6:2c:5c
 4(tap22015e46-0b): addr:fa:16:3e:76:c2:11
 5(qr-0c52b15f-8f): addr:fa:16:3e:c4:64:70
 6(qr-92fa49b5-54): addr:fa:16:3e:80:13:72
 LOCAL(br-int): addr:06:de:5d:ed:44:44
[heat-admin@overcloud-controller-0 ~]$ 

Mac on nĂ€htav qr-0c52b15f-8f pordist. Kui naasta tagasi Openstackis virtuaalportide loendisse, siis kasutatakse seda tĂŒĂŒpi porti OVS-i erinevate virtuaalsete seadmete ĂŒhendamiseks. TĂ€psemalt, qr on port virtuaalsesse marsruuterisse, mis esindab enda namespace'i.

Vaadakem, millised namespace'id serveris on:

[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns
qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe (id: 2)
qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 (id: 1)
qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 (id: 0)
[heat-admin@overcloud-controller-0 ~]$ 

Kokku on kolm instantsi. Kuid nimedest vĂ”ib jĂ€reldada igaĂŒhe mÀÀratlust. Instantsidega, mille ID on 0 ja 1, pöördume tagasi hiljem, praegu huvitab meid namespace qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe:


[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns exec qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe ip route
10.0.1.0/24 dev qr-0c52b15f-8f proto kernel scope link src 10.0.1.254 
10.0.2.0/24 dev qr-92fa49b5-54 proto kernel scope link src 10.0.2.254 
[heat-admin@overcloud-controller-0 ~]$ 

Selles namespace'is on kaks sisemist, mis loodi varem. MĂ”lemad virtuaalsed portid on lisatud br-int. Kontrollime porta аЎрДса qr-0c52b15f-8f, kuna liiklus, nagu nĂ€ha sihtaadressi MAC-aadressist, suundus just sellele liidesele.

[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns exec qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe ifconfig qr-0c52b15f-8f
qr-0c52b15f-8f: flags=4163  mtu 1450
        inet 10.0.1.254  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::f816:3eff:fec4:6470  prefixlen 64  scopeid 0x20
        ether fa:16:3e:c4:64:70  txqueuelen 1000  (Ethernet)
        RX packets 5356  bytes 427305 (417.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5195  bytes 490603 (479.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[heat-admin@overcloud-controller-0 ~]$ 

Seega kÀitub kÔik antud juhul tavalise marsruutimise seadustega. Kuna liiklus on suunatud hostile 10.0.2.8, peab see vÀljuma lÀbi teise liidese qr-92fa49b5-54 ja liikuma lÀbi vxlan tunnel'i compute sÔlme:


[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns exec qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe arp
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.1.88                ether   fa:16:3e:72:ad:53   C                     qr-0c52b15f-8f
10.0.1.90                ether   fa:16:3e:83:ad:a4   C                     qr-0c52b15f-8f
10.0.2.8                 ether   fa:16:3e:6c:ad:9c   C                     qr-92fa49b5-54
10.0.2.42                ether   fa:16:3e:f5:0b:29   C                     qr-92fa49b5-54
10.0.1.85                ether   fa:16:3e:44:98:20   C                     qr-0c52b15f-8f
[heat-admin@overcloud-controller-0 ~]$ 

KĂ”ik on loogiline, ĂŒllatusi ei ole. Vaatame, kust on nĂ€htav hosti MAC-aadress 10.0.2.8 br-int-s:

[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:6c:ad:9c
    2     2  fa:16:3e:6c:ad:9c    1
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-int | grep addr
 1(int-br-ex): addr:2e:58:b6:db:d5:de
 2(patch-tun): addr:06:41:90:f0:9e:56
 3(tapca25a97e-64): addr:fa:16:3e:e6:2c:5c
 4(tap22015e46-0b): addr:fa:16:3e:76:c2:11
 5(qr-0c52b15f-8f): addr:fa:16:3e:c4:64:70
 6(qr-92fa49b5-54): addr:fa:16:3e:80:13:72
 LOCAL(br-int): addr:06:de:5d:ed:44:44
[heat-admin@overcloud-controller-0 ~]$ 

Nagu ette nÀhtud, liiklus lÀheb br-tun-i, vaatame, millises tunnelis liiklus edasi lÀheb:

[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl dump-flows br-tun | grep fa:16:3e:6c:ad:9c
 cookie=0x2ab04bf27114410e, duration=5346.829s, table=20, n_packets=5248, n_bytes=498512, hard_timeout=300, idle_age=0, hard_age=0, priority=1,vlan_tci=0x0002/0x0fff,dl_dst=fa:16:3e:6c:ad:9c actions=load:0->NXM_OF_VLAN_TCI[],load:0x63->NXM_NX_TUN_ID[],output:2
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-tun | grep addr
 1(patch-int): addr:a2:69:00:c5:fa:ba
 2(vxlan-c0a8ff1a): addr:86:f0:ce:d0:e8:ea
 3(vxlan-c0a8ff13): addr:72:aa:73:2c:2e:5b
 LOCAL(br-tun): addr:a6:cb:cd:72:1c:45
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-controller-0 ~]$ sudo sudo ovs-appctl dpif/show | grep vxlan-c0a8ff1a
    vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$ 

Liiklus suundub tunnelisse kuni compute-1. Ja compute-1-s on kĂ”ik lihtne — br-tunist jĂ”uab pakk br-int-i ja sealt edasi virtuaalmasina liidesesse:

[heat-admin@overcloud-controller-0 ~]$ sudo sudo ovs-appctl dpif/show | grep vxlan-c0a8ff1a
    vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$ 
[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:6c:ad:9c
    4     2  fa:16:3e:6c:ad:9c    1
[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-ofctl show br-int | grep addr                  
 1(int-br-ex): addr:8a:d7:f9:ad:8c:1d
 2(patch-tun): addr:46:cc:40:bd:20:da
 3(qvoe7e23f1b-07): addr:12:78:2e:34:6a:c7
 4(qvo3210e8ec-c0): addr:7a:5f:59:75:40:85
 LOCAL(br-int): addr:e2:27:b2:ed:14:46
[heat-admin@overcloud-novacompute-1 ~]$ 

Kontrollime, kas see on tÔepoolest Ôige liides:

[heat-admin@overcloud-novacompute-1 ~]$ brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.02429c001e1c       no
qbr3210e8ec-c0          8000.ea27f45358be       no              qvb3210e8ec-c0
                                                        tap3210e8ec-c0
qbre7e23f1b-07          8000.b26ac0eded8a       no              qvbe7e23f1b-07
                                                        tape7e23f1b-07
[heat-admin@overcloud-novacompute-1 ~]$
[heat-admin@overcloud-novacompute-1 ~]$ sudo virsh domiflist instance-00000004
Interface  Type       Source     Model       MAC
-------------------------------------------------------
tap3210e8ec-c0 bridge     qbr3210e8ec-c0 virtio      fa:16:3e:6c:ad:9c

[heat-admin@overcloud-novacompute-1 ~]$

Nii, me oleme lĂ€binud kogu paketi teekonna. Arvan, et olete juba mĂ€rganud, et liiklus liikus erinevate vxlan tunnelite kaudu ja vĂ€ljumine toimus erinevate VNI-dega. Vaadakem, millised need VNI-d on, seejĂ€rel kogume dumi kontrollsĂ”lme pordilt ja veendume, et liiklus liigub just nii, nagu ĂŒlal kirjeldatud.
Seega, tunnel compute-0-ks on jĂ€rgmised actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:3. TĂ”lgime 0x16 kĂŒmnendsĂŒsteemi:


0x16 = 6*16^0+1*16^1 = 6+16 = 22

Tunnel compute-1-ks on jĂ€rgmine VNI: actions=load:0->NXM_OF_VLAN_TCI[],load:0x63->NXM_NX_TUN_ID[],output:2. TĂ”lgime 0x63 kĂŒmnendsĂŒsteemi:


0x63 = 3*16^0+6*16^1 = 3+96 = 99

NĂŒĂŒd vaatame dumi:

[root@hp-gen9 bormoglotx]# tcpdump -vvv -i vnet4 
tcpdump: listening on vnet4, link-type EN10MB (Ethernet), capture size 262144 bytes

*****************omitted*******************

04:35:18.709949 IP (tos 0x0, ttl 64, id 48650, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.19.41591 > 192.168.255.15.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 49042, offset 0, flags [DF], proto ICMP (1), length 84)
    10.0.1.85 > 10.0.2.8: ICMP echo request, id 5378, seq 9, length 64
04:35:18.710159 IP (tos 0x0, ttl 64, id 23360, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.15.38983 > 192.168.255.26.4789: [no cksum] VXLAN, flags [I] (0x08), vni 99
IP (tos 0x0, ttl 63, id 49042, offset 0, flags [DF], proto ICMP (1), length 84)
    10.0.1.85 > 10.0.2.8: ICMP echo request, id 5378, seq 9, length 64
04:35:18.711292 IP (tos 0x0, ttl 64, id 43596, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.26.42588 > 192.168.255.15.4789: [no cksum] VXLAN, flags [I] (0x08), vni 99
IP (tos 0x0, ttl 64, id 55103, offset 0, flags [none], proto ICMP (1), length 84)
    10.0.2.8 > 10.0.1.85: ICMP echo reply, id 5378, seq 9, length 64
04:35:18.711531 IP (tos 0x0, ttl 64, id 8555, offset 0, flags [DF], proto UDP (17), length 134)
    192.168.255.15.38983 > 192.168.255.19.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 63, id 55103, offset 0, flags [none], proto ICMP (1), length 84)
    10.0.2.8 > 10.0.1.85: ICMP echo reply, id 5378, seq 9, length 64
	
*****************omitted*******************

Esimene pakk on vxlan pakk, mis saadetakse hostilt 192.168.255.19 (compute-0) hostile 192.168.255.15 (control-1) vni 22, mille sees on ICMP pakk hostilt 10.0.1.85 hostile 10.0.2.8. Nagu me eelnevalt arvestasime, vastab vni sellele, mida me vÀljundites nÀgime.

Teine pakett on vxlan pakett hostilt 192.168.255.15 (control-1) hostile 192.168.255.26 (compute-1) vni 99, mille sees on ICMP pakett hostilt 10.0.1.85 hostile 10.0.2.8. Nagu me eelnevalt arvestasime, vastab vni sellele, mida nÀgime vÀljundites.

Kaks jÀrgmist paketti on tagasivool 10.0.2.8-sse mitte 10.0.1.85-sse.

Seega on meil lÔpuks tekkinud selline skeem control noodist:

Sissejuhatus pilveinfrastruktuuri vÔrku

Paistab, et kÔik on korras? Unustasime kaks namespace'i:

[heat-admin@overcloud-controller-0 ~]$ sudo  ip netns
qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe (id: 2)
qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 (id: 1)
qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 (id: 0)
[heat-admin@overcloud-controller-0 ~]$ 

Nagu me rÀÀkisime pilveplatvormi arhitektuurist — oleks hea, kui masinad saaksid automaatselt aadresse DHCP serverilt. Need on kaks DHCP serverit meie kahel vĂ”rgul 10.0.1.0/24 ja 10.0.2.0/24.

Kontrollime, kas see on tĂ”si. Antud namespace'is on ainult ĂŒks aadress — 10.0.1.1 — DHCP serveri enda aadress, ja see on samuti br-int-sse kaasatud:

[heat-admin@overcloud-controller-0 ~]$ sudo ip netns exec qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 ifconfig
lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1  bytes 28 (28.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1  bytes 28 (28.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tapca25a97e-64: flags=4163  mtu 1450
        inet 10.0.1.1  netmask 255.255.255.0  broadcast 10.0.1.255
        inet6 fe80::f816:3eff:fee6:2c5c  prefixlen 64  scopeid 0x20
        ether fa:16:3e:e6:2c:5c  txqueuelen 1000  (Ethernet)
        RX packets 129  bytes 9372 (9.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 49  bytes 6154 (6.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Vaatame, kas protsessid, mille nimedes on qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 control moodulis:


[heat-admin@overcloud-controller-0 ~]$ ps -aux | egrep qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 
root      640420  0.0  0.0   4220   348 ?        Ss   11:31   0:00 dumb-init --single-child -- ip netns exec qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 /usr/sbin/dnsmasq -k --no-hosts --no-resolv --pid-file=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/host --addn-hosts=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/addn_hosts --dhcp-optsfile=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/opts --dhcp-leasefile=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/leases --dhcp-match=set:ipxe,175 --local-service --bind-dynamic --dhcp-range=set:subnet-335552dd-b35b-456b-9df0-5aac36a3ca13,10.0.2.0,static,255.255.255.0,86400s --dhcp-option-force=option:mtu,1450 --dhcp-lease-max=256 --conf-file= --domain=openstacklocal
heat-ad+  951620  0.0  0.0 112944   980 pts/0    S+   18:50   0:00 grep -E --color=auto qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638
[heat-admin@overcloud-controller-0 ~]$ 

Sellest protsessist lĂ€htuvalt ja ĂŒlaltoodud vĂ€ljundi pĂ”hjal saame nĂ€iteks vaadata, mis meil praegu ĂŒĂŒritakse:

[heat-admin@overcloud-controller-0 ~]$ cat /var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/leases
1597492111 fa:16:3e:6c:ad:9c 10.0.2.8 host-10-0-2-8 01:fa:16:3e:6c:ad:9c
1597491115 fa:16:3e:76:c2:11 10.0.2.1 host-10-0-2-1 *
[heat-admin@overcloud-controller-0 ~]$

KokkuvÔtteks saame sellise teenuste komplekti kontrollimoodulis:

Sissejuhatus pilveinfrastruktuuri vÔrku

Pea meeles, et see on vaid 4 masinat, 2 sisevĂ”rku ja ĂŒks virtuaalne ruuter
 Meil ei ole praegu vĂ€liseid vĂ”rke, erinevaid projekte, igaĂŒhel oma (ristuva) vĂ”rguga, ja meil on vĂ€ljalĂŒlitatud hajutatud ruuter, jah, lĂ”puks oli testkeskkonnas vaid ĂŒks juhtnodo (klienditeenindus peab koosnema kolmest nodost, et tagada töökindlus). On loogiline, et kaubanduses on kĂ”ik “veidi” keerulisem, kuid selle lihtsa nĂ€ite kaudu mĂ”istame, kuidas see peaks toimima — olgu teil 3 vĂ”i 300 nimiruumi, on selle sĂŒsteemi töö seisukohalt erilisi muutusi
 tĂ”si, kuni te ei kasuta mingit mĂŒĂŒgipartneri SDN-i. Kuid see on juba hoopis teine lugu.

Loodan, et oli huvitav. Kui teil on mĂ€rkusi / tĂ€iendusi vĂ”i kui ma kuskil avatud maneeriga eksisin (ma olen inimene ja minu arvamus on alati subjektiivne) — kirjutage, mida peaks parandama / lisama — kĂ”ik parandame / lisame.

KokkuvĂ”ttes tahaksin öelda paar sĂ”na OpenStacki (nii puhta kui ka edasimĂŒĂŒja versioonide) ja VMWare'ilt pĂ€rit pilvelahenduse vĂ”rdlemisest — viimase paar aasta jooksul on mitmed inimesed seda kĂŒsimust minult kĂŒsinud ja ausalt öeldes olen sellest juba vĂ€sinud, aga siiski. Minu arvates on nende kahe lahenduse vĂ”rdlemine vĂ€ga keeruline, kuid ĂŒhes on kindel — mĂ”lemas lahenduses on omad miinused ning valides ĂŒhe vĂ”i teise tuleb hoolikalt kaaluda kĂ”iki plusse ja miinuseid.

Kui OpenStack on kogukonna juhitud lahendus, siis VMWare'il on Ă”igus teha ainult seda, mida nad soovivad (loe — mida neile kasulik) ja see on loogiline — nad on kommertsfirma, mis on harjunud teenima oma klientidelt raha. Kuid siin on ĂŒks suur ja rasvane "KUID" — te saate nĂ€iteks Nokia OpenStackist lahti, liikuda vĂ€hese vaevaga Juniperi (Contrail Cloud) lahendusele, kuid VMWare'lt lahti saada on teil tĂ”enĂ€oliselt keeruline. Minu silmis nĂ€evad need kaks lahendust vĂ€lja nii — OpenStack (edasimĂŒĂŒja versioon) on lihtne puuri, kuhu teid suletakse, kuid teil on vĂ”ti ja te saate igal ajal vĂ€lja minna. VMWare on aga kuldne puuri, mille vĂ”ti kuulub peremeestele ja see maksab teile vĂ€ga kalliks.

Ma ei toeta ei esimest toodet ega teist — valite ise, mis teile sobib. Kuid kui ma peaksin sellist valikut tegema, valiksin ma mĂ”lemad lahendused — VMWare IT pilve jaoks (madalad koormused, mugav haldamine) ja OpenStack mĂ”nelt tarnijalt (Nokia ja Juniper pakuvad vĂ€ga head vĂ”tmed-kĂ€tte lahendust) Telekomi pilve jaoks. Ma ei kasutaks OpenStacki puhtas IT-s — see on nagu pĂŒssist sĂ”nade tulistamine, kuid vastunĂ€idustusi selle kasutamiseks, vĂ€lja arvatud liig, ma ei nĂ€e. Kuid VMWare kasutamine telekomis — nagu peenel Ford Raptoril kruusa vedamine, ilus vaadata, aga juhil tuleb teha 10 reisi ĂŒhe asemel.

Minu arvates on VMWare kĂ”ige suurem puudus selle tĂ€ielik suletus — ettevĂ”te ei jagada teile mingit teavet selle kohta, kuidas nĂ€iteks vSAN vĂ”i hĂŒperviisori sĂŒda töötab — see pole neile lihtsalt kasulik — see tĂ€hendab, et te ei saa kunagi VMWare ekspertiks — ilma tootja toeta olete hukule mÀÀratud (vĂ€ga sageli kohtan eksperte VMWare, keda hĂ€mmastavad juba kĂ”ige lihtsamad kĂŒsimused). Minu jaoks on VMWare nagu auto ostmine kinnise kapotiga — jah, vĂ”ib-olla on teil spetsialiste, kes saavad vahetada hammasrihma, kuid kapoti avada suudab ainult see, kes teile selle lahenduse mĂŒĂŒs. Isiklikult ei meeldi mulle lahendused, kuhu ma ei saa sisse vaadata. Te ĂŒtlete, et vĂ”ib-olla ei pea te kapoti alla ronima. Jah, see on vĂ”imalik, kuid ma vaatan teid, kui peate pilootima suure funktsiooni 20-30 virtuaalmasinaga pilves, 40-50 vĂ”rguga, millest pooled tahavad vĂ€lja pÀÀseda ja teine pool palub SR-IOV kiirendust, vastasel juhul peate hankima veel paar tosinat sellist masinat — vastasel juhul ei piisa jĂ”udlusest.

On neid ka teisi arvamusi, seega on see ainult teie otsus, mida valida, ja kĂ”ige tĂ€htsam — te vastutate oma valikute eest. See on lihtsalt minu arvamus — inimese oma, kes on kogenud ja kĂ€ega katsunud vĂ€hemalt nelja toodet — Nokia, Juniper, Red Hat ja VMWare. Seega on mul millegiga vĂ”rrelda.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster