Razgovor o automatizaciji u IT operacijama ne može proći bez spominjanja Ansible-a i Kubernetes-a. Iako su im namene različite, ova dva alata su iz temelja preobrazila tok razvoja softvera. Zato, hajde da detaljnije istražimo ove alate.
Šta je Ansible?
Ansible, izvorno zamisao Majkla DeHaa, trenutno zauzima visoko mesto na GitHub-u, svrstavajući se među 100 najpopularnijih projekata. Veliku popularnost duguje svojoj jednostavnosti upotrebe i jasnom jeziku. Danas je Ansible široko prihvaćen kao standard u domenu IT automatizacije.
Kao uspešan alat zajednice otvorenog koda, Ansible je prošao kroz značajan razvoj, nudeći rešenja operaterima, administratorima i donosiocima IT odluka u različitim tehnološkim okruženjima.
Ansible
Mnoge značajne organizacije, uključujući Twitter, eBay, Verizon, NASA, ILM, Rackspace i Electronic Arts, uveliko se oslanjaju na ovaj alat. Red Hat je prepoznao njegovu vrednost i kupio Ansible 2015. godine.
Ansible olakšava upravljanje konfiguracijom, primenu aplikacija i automatizaciju zadataka. U savremenim digitalnim okruženjima, DevOps stručnjaci ga često koriste za obezbeđivanje resursa kroz Infrastructure as Code (IaC) pristup, omogućavajući besprekornu isporuku softvera.
Evo nekoliko načina na koje se Ansible može koristiti:
- Upravljanje konfiguracijom: Sa Ansible-om, definisanje željenih konfiguracija za servere, mrežne uređaje i druge infrastrukturne komponente postaje jednostavno. Takođe omogućava automatsku i doslednu reprodukciju tih konfiguracija na više sistema, čime se obezbeđuje standardizovana struktura i usklađenost.
- Primena aplikacije: Ansible pojednostavljuje primenu aplikacija automatizacijom procesa u različitim okruženjima, od razvoja i testiranja do produkcije. Zadaci poput instaliranja softvera, konfigurisanja baza podataka i postavljanja mreže se obavljaju sa svega nekoliko komandi.
- Automatizacija zadataka: Zaboravite na ručne, ponavljajuće zadatke! Ansible omogućava IT timovima da automatizuju širok spektar operacija, kao što su primena zakrpa, upravljanje rezervnim kopijama, kreiranje korisničkih naloga i ponovno pokretanje usluga. To oslobađa vaše resurse da se fokusiraju na strateške inicijative.
- Obezbeđivanje infrastrukture: Dinamičko obezbeđivanje i konfigurisanje resursa, uključujući virtuelne mašine, instance u oblaku i mrežne uređaje, može biti naporno. Ansible tu ponovo uskače, efikasno omogućavajući skaliranje vaše infrastrukture po potrebi.
- Orkestracija: Ansible briljira u upravljanju složenim primenama koje obuhvataju više sistema. On koordinira komplikovane tokove posla za rukovanje zadacima poput primene višeslojnih aplikacija i uvođenja ažuriranja u distribuiranom okruženju, na taj način koordinirano upravljajući mrežnim uređajima.
Prednosti Ansible-a
- Jednostavan za učenje i korišćenje: Korišćenjem YAML-a u „playbook“-ovima, pisanje istih postaje prilično lako, omogućavajući i početnicima i ekspertima da ga lako koriste. Njegova jednostavna i intuitivna sintaksa olakšava brzo usvajanje i glatke tokove rada.
- Napisan u Python-u: Ovaj alat se fokusira na jednostavnost. Napisan je u Python-u, jednom od najpopularnijih i najjednostavnijih programskih jezika.
- Arhitektura bez agenata: Ansible je bez agenata. Može da kontroliše udaljene hostove preko SSH-a, bez potrebe za instaliranjem softvera na njima. Korišćenjem „playbook“-ova i uloga, Ansible olakšava definisanje idealne infrastrukture i automatizaciju puta do nje.
- Poboljšana bezbednost: Koristeći SSH, Ansible daje prioritet bezbednoj komunikaciji između sistema. Štiti aplikacije i infrastrukturu od potencijalnih pretnji.
- Integracija sa sistemima za upravljanje autentifikacijom: Ansible se integriše sa sistemima za upravljanje autentifikacijom, poput LDAP-a, Kerberosa i drugih, radi pravilne kontrole pristupa i poboljšane bezbednosti.
- Pouzdanost: IT infrastruktura zahteva stabilnost i pouzdanost. Ansible je dokazan u pružanju visokih performansi i pouzdanosti.
Ono što Ansible čini zaista zanimljivim jeste njegova jednostavnost upotrebe. Upravljanje lokalnom i infrastrukturom baziranom na oblaku je apsolutno, kako bi Šerlok rekao, „elementarno“ sa Ansible-om.
Kako Ansible funkcioniše?
Pre nego što detaljnije ispitamo kako Ansible funkcioniše, hajde da pogledamo njegove komponente:
Moduli: Ako je Ansible obrok, moduli bi bili glavni sastojak. To su unapred kreirani mali programi koji upravljaju gotovo svime – od aplikacija i paketa do datoteka na udaljenim sistemima. Ansible primenjuje definisana uputstva na spoljnim sistemima i istovremeno isporučuje module sa komandnog računara.
„Playbook“-ovi pokreću te povezane module i izvlače ih iz petlje kada se zadatak izvrši. Ansible ima više od 750 (i stalno raste) ugrađenih modula, što olakšava automatizaciju pomoću „playbook“-ova i zadataka!
Izvor slike: InterviewBit
„Playbook“-ovi: „Playbook“-ovi su korisnički orijentisana uputstva koja koriste YAML format za pojednostavljivanje automatizacije. Ta uputstva diktiraju tok rada i izvršavaju zadatke na organizovan način. „Playbook“-ovi mogu izvršavati sekvencijalne procedure, definisati okruženja i upravljati različitim fazama zadatka.
Dodaci: Ansible dodaci poboljšavaju ugrađenu i prilagođenu funkcionalnost platforme. Sistem može vršiti logovanje, prikaz događaja, keširanje i funkcije front-end kontrolera i izvršava ih pre modula na čvorovima.
Inventari: Ansible inventari sadrže spiskove hostova sa njihovim IP adresama, serverima i bazama podataka. SSH za UNIX, Linux ili mrežne uređaje, i WinRM za Windows sisteme pomažu u njihovom upravljanju.
Ostale Ansible komponente su API, Cloud, Host, Mreža i CMD (baza podataka za upravljanje konfiguracijom).
Evo kako Ansible izvodi svoju magiju:
Prvo, Ansible ima datoteku inventara sa spiskom hostova ili mašina. Korisnici mogu da izmene ovu datoteku dodavanjem servera koje žele da kontrolišu.
Sledeći korak je kreiranje „playbook“-a za definisanje idealne infrastrukture na upravljanim čvorovima. Pošto Ansible radi na kontrolnom čvoru koji pomaže u izvršavanju zadataka na udaljenom sistemu, on će uspostaviti SSH vezu sa tim drugim sistemom, omogućavajući bezbednu komunikaciju između čvorova.
Zatim šalje i izvršava module za obavljanje zadataka definisanih u „playbook“-ovima, dovodeći sisteme u željeno stanje.
Nakon završetka zadatka, Ansible uklanja module sa upravljanih čvorova kako bi sprečio zaostale module. Na kraju, daje izveštaje o statusu primene zadataka, omogućavajući korisnicima da prate napredak i rezultate zadataka automatizacije. Štaviše, Ansible može redovno da radi kako bi održavao i poboljšavao sistem tokom vremena.
Šta je Kubernetes?
Džo Beda, Brendan Berns i Kreg Maklaki su briljantni umovi iza Kubernetes-a. Radeći kao inženjeri u Google-u, stvorili su ovaj alat, koji je sada moćan za upravljanje kontejnerskim aplikacijama.
U početku, Google je razvio Kubernetes za upravljanje sopstvenim kontejnerskim aplikacijama u proizvodnji, a prvi put je objavljen kao projekat otvorenog koda 2014. godine.
U 2015. godini, Google je donirao Kubernetes Cloud Native Computing Foundation (CNCF), nezavisnoj od prodavaca, kako bi unapredio tehnologiju računarstva zasnovanu na oblaku.
Od tada, Kubernetes je postao jedan od vodećih projekata CNCF-a, sa širokom primenom u industriji, i etablirao se kao lider u orkestraciji kontejnera.
Prema Gartneru, oko 85% organizacija će koristiti Kubernetes do 2025. A zašto ne bi? Njegov robustan ekosistem dodataka, alata i usluga čini ga raznovrsnom platformom za upravljanje kontejnerskim aplikacijama.
Kubernetes je prošao kroz nekoliko važnih ažuriranja, donoseći nove funkcionalnosti, poboljšanja i ispravke grešaka sa svakim izdanjem. Neprestano se razvija i poboljšava, zahvaljujući strastvenoj zajednici koja stoji iza njega!
Prednosti Kubernetes-a
- Skalabilnost: Lako skalirajte aplikacije na osnovu potražnje.
- Prenosivost: Implementirajte i upravljajte aplikacijama dosledno u različitim okruženjima.
- Fleksibilnost: Podrška za različita vremena izvođenja kontejnera i formate.
- Automatizacija: Automatizujte postavljanje kontejnera, skaliranje, praćenje i oporavak.
- Otpornost: Ugrađena tolerancija grešaka i mogućnosti samoizlečenja.
- Omogućavanje DevOps-a: Promoviše saradnju između programera i operativnih timova.
- Proširivost: Prilagodljiva i proširiva arhitektura za integraciju sa drugim alatima.
- Zajednica i ekosistem: Velika zajednica i ekosistem za poboljšane mogućnosti.
Kako funkcioniše Kubernetes?
Pošto je Kubernetes platforma koja pomaže u orkestraciji kontejnera, prvi korak uključuje pakovanje aplikacije u kontejnere uz pomoć alata za kontejnerizaciju, kao što je Docker. Ovi kontejneri su sami sebi dovoljni, sa svim potrebnim softverom i zavisnostima za besprekoran rad u različitim okruženjima.
Zatim, pomoću YAML-a ili JSON-a, definiše se stanje aplikacija, uključujući slike kontejnera, zahteve za resursima, smernice za skaliranje, umrežavanje i konfiguracije skladištenja. Datoteke sa uputstvima se nazivaju manifesti.
U Kubernetes-u, klaster je poput tima računara, koji se nazivaju čvorovi, koji zajedno rade na pokretanju vaših aplikacija. Zamislite čvorove kao igrače u fudbalskom timu, a svaki igrač može pokrenuti više kontejnera, koji su poput opreme igrača potrebne za igru.
Kubernetes komponente
Najmanji gradivni blok u Kubernetes-u se zove Pod, koji je kao udoban mali dom za jedan ili više kontejnera. Podovi su poput svlačionica igrača, gde se druže i dele stvari poput mreže i resursa za skladištenje. Svaki Pod ima svoje jedinstveno ime i adresu, tako da se lako može identifikovati i komunicirati sa njim.
Razmeštanje je poput trenera koji upravlja timom. Oni govore Kubernetes-u koliko igrača (ili replika) svakog Pod-a treba da radi u bilo kom trenutku. Baš kao što trener upravlja igračima na terenu, Razmeštanje upravlja kreiranjem, skaliranjem i brisanjem Pod-ova kako bi se osiguralo da je vaša aplikacija uvek u željenom stanju.
Usluge su kao sudije koje pomažu igračima da komuniciraju jedni sa drugima. Oni pružaju stabilnu adresu, kao što je broj telefona, koju drugi mogu koristiti za pristup vašoj aplikaciji. Usluge biraju prave Pod-ove na osnovu oznaka, kao što je pozicija igrača, i ravnomerno raspoređuju saobraćaj između njih, osiguravajući da svi dobiju fer šansu da igraju.
Za rukovanje važnim informacijama kao što su lozinke ili API ključevi, Kubernetes obezbeđuje ConfigMap-ove i Secret-e. Oni su kao kutije za zaključavanje u koje možete bezbedno da skladištite te osetljive detalje, a zatim ih koristite u svojim Pod-ovima i Razmeštanjima da biste pristupili resursima bez izlaganja u običnom tekstu.
Konačno, Kubernetes API server je poput telefonske linije za trenere tima. Pruža jednostavan način za upravljanje stanjem tima pomoću RESTful API-ja, sa kojim možete komunicirati pomoću kubectl-a ili drugih Kubernetes alata. To je kao da imate direktnu liniju sa kancelarijom trenera da biste dali uputstva ili dobili ažurirane informacije o učinku tima.
Poređenje funkcija: Ansible u odnosu na Kubernetes
Funkcija | Ansible | Kubernetes |
Tip | Alat za upravljanje konfiguracijom i automatizaciju | Platforma za orkestraciju kontejnera |
Svrha | Automatizacija IT zadataka kao što su upravljanje konfiguracijom, implementacija aplikacija i obezbeđivanje sistema | Automatsko postavljanje, skaliranje i upravljanje kontejnerizovanim aplikacijama |
Arhitektura | Bez agenata, koristi SSH ili WinRM za komunikaciju sa ciljnim sistemima, koristeći deklarativni jezik. | Složenija arhitektura, koristi API za komunikaciju, kontejneri se povlače sa registara kontejnera. |
Skalabilnost | Podržava i male i velike infrastrukture. | Dizajniran za primenu velikih razmera. |
Visoka dostupnost | Zasniva se na „push“ principu, gde se promene konfiguracije šalju ciljnim sistemima. | Pruža ugrađene funkcije visoke dostupnosti sa automatskim reprogramiranjem kontejnera i funkcionalnim radom čvorova. |
Mreža | Koristi TLS za komunikaciju, obezbeđuje odgovarajuću autentifikaciju. | Pruža napredne mrežne funkcionalnosti kao što su otkrivanje usluga, balansiranje opterećenja i rutiranje zasnovano na DNS-u. |
Ažuriranja | Podržava ažuriranja uz minimalan zastoj. | Podržava ažuriranja koja se primenjuju postepeno, bez prekida rada aplikacija. |
Provere zdravlja | Pruža osnovne zdravstvene provere za ciljne sisteme. | Pruža napredne provere zdravlja za kontejnere i automatska ponovna pokretanja kontejnera. |
Bezbednost | Koristi SSH ili WinRM za komunikaciju, zahteva odgovarajuću autentifikaciju i autorizaciju. | Obezbeđuje ugrađenu izolaciju kontejnera i RBAC za kontrolu pristupa. |
Proširivost | Pruža prilagođene module za proširenje funkcionalnosti. | Pruža prilagođene resurse i operatore za proširenje funkcionalnosti. |
Kriva učenja | Umereno, zahteva poznavanje YAML-a i osnovnog skriptovanja. | Umereno do strmo, zahteva razumevanje koncepata kontejnerizacije, umrežavanja i distribuiranih sistema. |
Upotreba Kubernetes-a
Primena aplikacije
Upravljanje kompleksnim aplikacijama u proizvodnom okruženju zahteva besprekorno izvršavanje mnogobrojnih zadataka u kratkom vremenskom roku. Ako bi programeri ručno izvršavali te zadatke, trebalo bi im nedelje pre postavljanja aplikacije.
Međutim, korišćenjem Kubernetes-a i skladištenjem aplikacija u kontejnere, oni ne samo da mogu da ih implementiraju i upravljaju njima na klasteru mašina, već i da obezbede doslednost i ponovljivost. Oni mogu postići maksimalnu efikasnost automatizacijom zadataka kao što su zakazivanje, skaliranje i ažuriranja.
Skalabilnost i balansiranje opterećenja
Da bi aplikacija bila uspešna, ona mora da prihvati veći obim saobraćaja bez ugrožavanja performansi. Kubernetes-ove ugrađene karakteristike skalabilnosti i balansiranja opterećenja nude najbolje rešenje.
Raspoređuje radna opterećenja na grupu mašina i automatski se povećava ili smanjuje na osnovu potražnje, obezbeđujući visoku dostupnost. Štaviše, takođe pomaže u raspodeli dolaznog saobraćaja na više instanci.
Otkrivanje usluga i umrežavanje
Većina aplikacija ne može da radi samostalno. Moraju da se povežu sa drugim aplikacijama ili uslugama. Kubernetes nudi mrežne funkcije koje pomažu u uspostavljanju komunikacije između kontejnera unutar klastera. Aplikacije takođe mogu da otkriju i povežu se sa drugim uslugama koje rade u grupi preko DNS-baziranog servisnog alata.
Rolling Updates i Rollbacks
Uz Kubernetes, ažuriranje aplikacija ili vraćanje na starije verzije je jednostavno. Automatizuje proces i obezbeđuje besprekorna ažuriranja bez ometanja dostupnosti aplikacije, omogućavajući ažuriranje i vraćanje unazad uz malo zastoja.
Upravljanje infrastrukturom
Kubernetes koristi deklarativni pristup da pojednostavi upravljanje infrastrukturom. Omogućava korisnicima da definišu infrastrukturne resurse kao što su skladištenje, umrežavanje i računanje kao kod, koristeći YAML ili JSON manifeste. Ovi manifesti ili konfiguracioni fajlovi omogućavaju verzionisanje, automatizaciju, upravljanje IaC-om (Infrastruktura kao kod) i pojednostavljuju upravljanje složenim infrastrukturnim konfiguracijama.
Hibridna i multi-cloud implementacija
Kubernetes je ključan za organizacije koje traže prilagodljivost i agilnost u implementaciji. Korišćenjem konzistentnog sloja apstrakcije, postavljanje i upravljanje aplikacijama kod različitih provajdera oblaka ili u lokalnim centrima podataka postaje efikasno.
Omogućava korisnicima da usvoje hibridnu ili multi-cloud strategiju, koristeći fleksibilnost i prenosivost kontejnera za primenu i upravljanje aplikacijama u različitim okruženjima.
Ansible i Kubernetes – Životni ciklus razvoja softvera
Faza u SDLC | Ansible | Kubernetes |
Razvoj | Omogućava automatsko upravljanje konfiguracijom i primenu razvojnih okruženja, omogućava kontrolu verzija za konfiguracione datoteke i olakšava primenu koda. | N/A |
Testiranje | Obezbeđuje automatizovano obezbeđivanje i konfiguraciju okruženja za testiranje, omogućava laku replikaciju okruženja i podržava zadatke automatskog testiranja. | N/A |
Kontinuirana integracija/kontinuirana primena (CI/CD) | Olakšava automatizovanu primenu aplikacija i promene konfiguracije, omogućava kontrolu verzija za infrastrukturni kod i podržava kontinuiranu isporuku i procese primene. | Olakšava primenu u kontejnerima, skaliranje i upravljanje aplikacijama, podržava ažuriranja u toku i implementacije bez zastoja. |
Postavljanje/preprodukcija | Obezbeđuje automatizovano obezbeđivanje i konfiguraciju okruženja za pripremu, omogućava konzistentnost između okruženja za pripremu i proizvodnju i olakšava testiranje okruženja sličnih proizvodnji. | Olakšava primenu kontejnera i skaliranje aplikacija u preprodukcijskim okruženjima, omogućava testiranje kontejnerizovanih aplikacija u izolovanom okruženju. |
Proizvodnja | Olakšava automatizovano obezbeđivanje, konfigurisanje i upravljanje proizvodnim okruženjima, omogućava infrastrukturu kao kod (IaC) prakse i podržava primenu proizvodnje. | Omogućava primenu u kontejnerima, skaliranje i upravljanje proizvodnim aplikacijama, nudi ugrađene funkcije visoke dostupnosti i napredne mrežne funkcionalnosti. |
Operacije/održavanje | Automatizuje upravljanje promenom konfiguracije, kontinuirano praćenje i sprovođenje željenog stanja. Podržava pravljenje rezervnih kopija, nadogradnje i operativne zadatke. | Pojednostavljuje upravljanje aplikacijama, skaliranje, nadogradnje i operativne zadatke kao što su ažuriranja i automatsko ponovno pokretanje za aplikacije u kontejnerima. |
Rešavanje problema/otklanjanje grešaka | Omogućava vidljivost konfiguracije, rešavanje problema i vraćanje unazad za probleme. | Omogućava vidljivost aplikacija kontejnera, rešavanje problema, otklanjanje grešaka i evidencije/dijagnostiku. |
Ansible slučajevi upotrebe
IT operativni tim upravlja velikom infrastrukturom sa stotinama servera u više centara podataka. Sa Ansible-om, oni automatizuju dosledna i bezbedna podešavanja servera i procese kao što su upravljanje korisnicima, postavljanje zaštitnih zidova i sprovođenje bezbednosnih politika.
Serveri su grupisani prema ulogama i okruženjima, a redovno pokretanje „playbook“-a ih održava ažuriranim i usklađenim. Ansible pojednostavljuje upravljanje konfiguracijom, smanjuje ručni rad i poboljšava bezbednost.
Kubernetes slučajevi upotrebe
Razvojni tim pravi veb aplikaciju mikroservisa i primenjuje je pomoću Kubernetes-a, konfigurišući umrežavanje, skladištenje i kontejnere pomoću Docker-a i manifesta. Kubernetes upravlja skaliranjem, balansiranjem opterećenja, samoizlečenjem i ažuriranjima. Jednostavno se povećava ili smanjuje, i to garantuje toleranciju grešaka i visoku dostupnost.
Ovaj Kubernetes „Deployment“ resurs primenjuje veb aplikaciju sa 3 replike. Oznake označavaju da su instance aplikacije i konfiguracije kontejnera definisane u polju šablona. Kubernetes upravlja skaliranjem, balansiranjem opterećenja, samooporavljanjem i postepenim nadogradnjama za skalabilnu, otpornu na greške i visoko dostupnu aplikaciju.
Administracija je lakša sa kontejnerima i Kubernetes-om, obezbeđujući ujednačenu primenu i lako skaliranje. Više konfiguracija se može dodati po potrebi za umrežavanje, skladištenje i druge potrebe.
U zaključku
Iako su Ansible i Kubernetes alati za automatizaciju, njihovo direktno poređenje jedan sa drugim ne bi bilo sasvim fer. Ansible pomaže u upravljanju konfiguracijama i zadacima u širokom spektru sistema, dok je Kubernetes više o orkestraciji kontejnera.
Ako uzmemo u obzir tradicionalnu IT infrastrukturu, Ansible bi bio pravi izbor za rukovanje konfiguracijama i implementacijama. Međutim, Kubernetes je odličan za moderna okruženja koja su izvorna u oblaku i upravljanje kontejnerskim aplikacijama.
Takođe, oba alata imaju svoje prednosti i mogu u velikoj meri poboljšati IT automatizaciju i tokove rada u primeni u svojim oblastima stručnosti. Dakle, razumevanje njihove jedinstvene namene i njihovo korišćenje u skladu s tim može doneti ogromnu vrednost vašim operacijama.