- Mikroservisi omogućuju razvoj modularnih i skalabilnih aplikacija, gdje je svaki servis autonoman i može se samostalno implementirati.
- Docker olakšava izradu laganih, prenosivih kontejnera koji pakiraju svaki mikroservis sa svim njegovim ovisnostima.
- Kubernetes orkestrira kontejnere, upravljajući implementacijom, skaliranjem, umrežavanjem i automatskim oporavkom mikroservisa u klasteru.
- Primjena dobrih praksi sigurnosti, nadzora i automatizacije ključna je za uspješno korištenje mikroservisa u produkciji.

Posljednjih godina, kombinacija mikroservisa, Dockera i Kubernetesa Postao je de facto standard za implementaciju modernih, skalabilnih i jednostavnih za održavanje aplikacija. Sve više tvrtki napušta monolitne aplikacije u korist distribuiranih arhitektura koje su bolje prilagođene promjenjivim okruženjima i DevOps strategijama.
Ako se pitate Kako u praksi implementirati mikroservise s Dockerom i KubernetesomOvaj sadržaj će biti savršen za vas: pregledat ćemo ključne koncepte, prednosti i izazove, kako stvoriti kontejnere, kako ih orkestrirati u klasteru i koje korake treba slijediti za njihovu instalaciju. Windows y Linuxkao i niz savjeta za njihovo mudro korištenje u stvarnim okruženjima.
Što je mikroservisna arhitektura i kako se razlikuje od monolita?
Arhitektura mikroservisa temelji se na podijeliti aplikaciju na više malih, autonomnih i neovisno raspoređivanih uslugasvaki se usredotočio na određenu funkcionalnost (korisnici, plaćanja, katalog, narudžbe itd.), koji komuniciraju uglavnom putem laganih API-ja (HTTP/REST, gRPC, razmjena poruka itd.).
S druge strane, u monolitnoj primjeni, Sva poslovna logika, prezentacijski sloj i pristup podacima su zapakirani u jedan blok implementacije.Svaka promjena zahtijeva ponovno kompiliranje, testiranje i implementaciju cijelog sustava, što komplicira evoluciju i povećava rizik od uvođenja pogrešaka u produkciju.
Kod mikroservisa, svaki servis ima svoj vlastiti životni ciklus: Može se razvijati, testirati, implementirati, skalirati i verzionirati neovisno.To omogućuje paralelni rad više timova, pojednostavljuje usvajanje novih tehnologija i olakšava integraciju s CI/CD praksama.
Nadalje, ova arhitektura uvodi koncept skalabilnost neovisna o komponentamaUmjesto skaliranja cijele monolitne aplikacije kako bi se podržalo veće opterećenje određenog modula, skaliraju se samo mikroservisi kojima je to stvarno potrebno, što bolje optimizira infrastrukturne resurse.
Prave prednosti i izazovi mikroservisa
Prelazak na mikroservise nije samo prolazni hir: Pruža opipljive prednosti u skalabilnosti, otpornosti i brzini implementacije.Ali to također uvodi operativnu složenost kojom se mora upravljati.
Među najznačajnijim prednostima je neovisna skalabilnost svake uslugeAko, na primjer, modul za plaćanja prima više prometa od modula za administraciju, možete povećati samo broj replika mikroservisa za plaćanja, bez diranja ostatka aplikacije ili rasipanja resursa.
Također puno dobivate u kontinuirano raspoređivanje i česte isporukeIzolacijom svake usluge moguće je postupno objavljivati nove verzije, bez potrebe za zaustavljanjem ili ponovnim postavljanjem cijele aplikacije, smanjujući vrijeme održavanja i poboljšavajući vrijeme izlaska na tržište.
Još jedna ključna točka je otpornost i tolerancija na greškeKada je ispravno dizajniran, kvar jednog mikroservisa ne bi trebao srušiti cijeli sustav. S obrascima poput isteka vremena, ponovnih pokušaja i prekida strujnog kruga, ostali servisi mogu nastaviti reagirati, ograničavajući utjecaj kvarova.
Nadalje, mikroservisi omogućuju tehnološka fleksibilnostSvaki tim može odabrati jezik, okvir ili bazu podataka koji su najprikladniji za njihovu uslugu, sve dok poštuju komunikacijske ugovore i globalne politike platforme.
S druge strane medalje nalazimo operativna i uočljiva složenostUpravljanje desecima ili stotinama usluga uključuje rad s distribuiranim mrežama, međuservisnim tragovima, centraliziranim zapisivanjem, sigurnošću, verzijama API-ja i konzistentnošću podataka, što zahtijeva napredne alate i zrele procese.
Također se komplicira upravljanje komunikacijom između uslugaBitno je pažljivo osmisliti način razmjene podataka, način rukovanja greškama, upravljanje latencijom i način sprječavanja da spora ovisnost povuče ostatak sustava nizbrdo. Testiranje i otklanjanje pogrešaka prestaju biti trivijalni, jer Ne testira se jedan blok, već skup međusobno povezanih usluga..

Kontejneri: temelj za pokretanje mikroservisa u izolaciji
Tehnologija kontejnera postala je idealna podrška za mikroservise jer Omogućuje vam pakiranje aplikacije i svih njezinih ovisnosti u standardiziranu i prenosivu jedinicu.Umjesto instaliranja biblioteka, runtime okruženja i alata na svaki poslužitelj, sve putuje unutar kontejnera.
Kontejner je, u biti, lagani oblik virtualizacije na razini operacijskog sustava: dijeli kernel hosta, ali pokreće procese u izoliranim imenskim prostorima i s resursima ograničenim cgrupama, što im omogućuje brzo pokretanje i manju potrošnju od virtualnog stroja.
Među njegovim ključnim svojstvima su izolacija, prenosivost, lakoća i modularnostSvaki mikroservis koji se izvodi u vlastitom kontejneru postaje lakši za implementaciju, zaustavljanje, ažuriranje ili repliciranje, što se savršeno uklapa u principe distribuiranih arhitektura.
U usporedbi s virtualni strojevi za produkcijukontejneri Ne im je potreban potpuni operativni sustav po instanci.već radije dijelite hostove. To drastično smanjuje veličinu slika i el tiempo de čizmašto vam omogućuje podizanje ili uništavanje kontejnera u sekundama.
Docker: referentna platforma za kontejnerizaciju mikroservisa
Docker je najpopularniji alat za rad s kontejnerima, jer Olakšava stvaranje, pakiranje, distribuciju i izvršavanje kontejneriziranih aplikacija kako u razvojnim okruženjima tako i u testiranju i produkciji.
Njihova središnja ideja je pakirati softver u Docker slikeTo su nepromjenjivi artefakti koji uključuju kod aplikacije, biblioteke koje su joj potrebne, sistemske alate i osnovne konfiguracije. Aplikacije se stvaraju iz tih slika. kontejneri u pogonu, koji su izolirani primjeri temeljeni na toj slici.
Konstrukcija slike definirana je u dockerfile, tekstualna datoteka koja specificira upute kao što su osnovna slika, radni direktorij, koje datoteke kopirati, koje ovisnosti instalirati, koje portove otkriti i koju naredbu pokrenuti prilikom pokretanja kontejnera.
Zamislite da imate API napisan u Node.js-u. Možete stvoriti Dockerfile sličan sljedećem, gdje Počevši sa službenom Node slikom, datoteke se kopiraju, ovisnosti se instaliraju i definira se naredba za pokretanje.:
FROM node:14
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD
Ova datoteka označava da će se aplikacija izvršavati u direktoriju /aplikacija unutar kontejnera, da će se ovisnosti instalirati s npm-om, da će port 3000 biti izložen i da će se, nakon pokretanja kontejnera, izvršiti npm početak.
Za izradu i pokretanje tog kontejnera, jednostavno pokrenite naredbu iz mape projekta. docker build i poslije vožnja dvoranommapiranje portova kako bi se omogućio pristup s hosta ili za korištenje u aplikacijama s više kontejnera doker-nove poruke:
docker build -t mi-app .
docker run -p 3000:3000 mi-app
Zahvaljujući ovom modelu, Klasični problem "radi na mom računalu" sveden je na minimum.Jer okruženje za izvođenje putuje s aplikacijom. Nadalje, Docker se besprijekorno integrira sa CI/CD sustavima, privatnim registrima i alatima za orkestraciju poput Kubernetesa.
Ključne komponente u Dockeru i njihova uloga u mikroservisima
U tipičnom raspoređivanju govorimo o Docker Hostkoji je sustav (fizički ili virtualni) na kojem je instaliran Docker; on se pokreće na njemu. Docker motor, demon koji upravlja slikama, mrežama, volumenima i životnim ciklusom kontejnera.
Kontejneri sadrže aplikacija i njezine ovisnosti zapakirane u slikuTo omogućuje bilo kojem poslužitelju s Dockerom da dosljedno pokreće tu sliku. Ova dosljednost je ključna kada imate mnogo mikroservisa raspoređenih u različitim okruženjima (razvoj, osiguranje kvalitete, produkcija itd.).
Među najzanimljivijim prednostima Dockera su prenosivost između okruženja, automatizacija implementacije, modularnost procesa i podrška za slojevitost i kontrolu verzija u slikamašto olakšava poništavanje promjena i optimizaciju skladištenje.
Kubernetes: orkestrator za upravljanje stotinama kontejnera
Kada prijeđete s nekoliko kontejnera na desetke ili stotine njih, Ručno upravljanje njima postaje ludostTu nastupa Kubernetes, platforma otvorenog koda dizajnirana za orkestriranje kontejnera u velikim razmjerima.
Kubernetes automatizira kritične zadatke kao što su implementacija, skaliranje, oporavak od grešaka, konfiguracija mreže i pohrana kontejneriziranih aplikacija. Dizajniran je za rad u javnim oblacima, privatnim oblacima, hibridnim okruženjima, pa čak i na lokaciji.
Fokus je na upravljanju klasterima sastavljenim od nekoliko čvorova (strojeva) na kojima se kontejneri izvode. Cilj je osigurati da aplikacije su uvijek u željenom stanju: broj replika, implementirane verzije, dodijeljeni resursi i povezanost između usluga.
Temeljni elementi Kubernetesa
Najmanja jedinica u Kubernetesu je MahunaPod predstavlja jednu ili više instanci kontejnera koje se moraju pokretati zajedno (na primjer, kontejner aplikacije i bočni kontejner za bilježenje). Podovi su kratkotrajni. Oni se stvaraju, uništavaju i zamjenjuju prema potrebama klastera..
Za otkrivanje vaših Podova, Kubernetes nudi resurs Serviskoji djeluje kao sloj apstrakcije mreže. Usluga grupira skup Podova i Pruža stabilnu IP adresu, DNS ime i interno uravnoteženje opterećenja.tako da kupci ne moraju znati detalje svakog Poda.
Resurs razvoj Koristi se za definiranje načina implementacije i ažuriranja Podova: koliko replika, koju sliku koristiti, koje oznake primijeniti i koju strategiju ažuriranja slijediti. Kubernetes se time bavi. uvijek održavajte željeni broj pokrenutih Podova i za izvođenje pomičnih ažuriranja ili vraćanja na prethodna stanja kada promijenite konfiguraciju.
Postoje i resursi kao što su ConfigMap i SecretOve značajke omogućuju vam eksternalizaciju konfiguracije i pohranu osjetljivih podataka (lozinki, tokena, API ključeva) bez potrebe za njihovim pakiranjem unutar slika. To uvelike pojednostavljuje sigurno upravljanje konfiguracijom u različitim okruženjima.
Kako organizirati Kubernetes klaster
"Glava" klastera je Kubernetesov plan kontrolekoji objedinjuje nekoliko komponenti odgovornih za orkestriranje cijelog sustava. Među njima je i API poslužiteljšto je ulaz za upravljanje klasterom; svaka radnja (stvaranje implementacije, popis Podova, izmjena usluge) prolazi kroz ovaj API.
El Raspored Odgovoran je za odlučivanje na kojem čvoru se pokreće svaki Pod, uzimajući u obzir dostupne resurse, afinitete i ograničenja; dok Upravitelj kontrolera Pratite status klastera i poduzmite mjere kako biste osigurali da se stvarnost podudara s onim što ste naveli u manifestima (na primjer, stvorite nove Podove ako ih ima manje nego što ste tražili).
Državna pohrana je delegirana na itdDistribuirana baza podataka pohranjuje konfiguraciju i informacije za sve resurse klastera. Osim toga, na svakom radnom čvoru izvode se procesi poput sljedećih: kubelet (agent koji komunicira čvor s API poslužiteljem), kube-proxy (koji upravlja mrežnim prometom i uravnoteženjem opterećenja) i vrijeme izvođenja kontejnera (Docker, kontejner, CRI-O, itd.).
Implementacija mikroservisa u Kubernetesu s YAML datotekama
Za implementaciju mikroservisa u Kubernetesu, uobičajeno ga je opisati s YAML manifest, gdje definirate Raspoređivanje (predložak Poda, sliku, portove, broj replika, oznake) i odgovarajuću Uslugu za njegovo izlaganje unutar ili izvan klastera.
Osnovni primjer implementacije za aplikaciju pod nazivom „my-app“ mogao bi izgledati ovako, gdje Definirane su tri replike i port 3000 kao kontejnerska luka:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-app
spec:
replicas: 3
selector:
matchLabels:
app: mi-app
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: mi-app
image: mi-app:latest
ports:
- containerPort: 3000
Ovaj manifest ukazuje na to da klaster mora održavati tri Poda u funkciji Slikom „my-app:latest“ svi su označeni s app=my-app, tako da ih usluga može locirati i distribuirati promet među njima. Kubernetes automatski obrađuje logiku skaliranja, ažuriranja i zamjene Podova u slučaju kvara.
Uz implementacije, uobičajeno je definirati usluge tipa IP klastera, NodePort ili LoadBalancerOvisno o tome treba li mikroservis biti dostupan samo unutar klastera, s čvorova ili s interneta, sva ta konfiguracija je verzionirana u repozitorijima, besprijekorno se integrirajući s CI/CD cjevovodima.
Skaliranje, nadogradnje i samoobnavljanje u Kubernetesu
Jedan od glavnih razloga za korištenje Kubernetesa je njegova sposobnost da skaliranje i ažuriranje mikroservisa bez zaustavljanja aplikacijeBroj replika možete promijeniti u manifestu (ili pomoću naredbe kubectl) i klaster će se pobrinuti za stvaranje ili uklanjanje Podova dok se ne postigne željena vrijednost.
Ovo skaliranje može biti ručno ili automatsko, koristeći resurse kao što su Horizontalni automatski skalator podova (HPA)Ova značajka dinamički prilagođava replike na temelju metrika kao što su CPU ili memorija. Tako se kapacitet povećava tijekom razdoblja velike potražnje, a resursi se oslobađaju kada se opterećenje smanji.
Što se tiče ažuriranja, Kubernetes implementira tekuća ažuriranja Prema zadanim postavkama: stvara Podove s novom verzijom i postupno briše one iz prethodne verzije, bez naglog rezanja. Ako nešto pođe po zlu, povrat na staro Omogućuje vam brz oporavak prethodne verzije.
Druga kritična funkcionalnost je samopopravakAko kontejner ili Pod prestane raditi, Kubernetes ga automatski ponovno stvara; ako čvor prestane reagirati, pogođeni Podovi se preraspoređuju na druge dostupne čvorove, održavajući aplikaciju operativnom.
Praćenje i uočljivost mikroservisa u Kubernetesu
Za ispravno funkcioniranje mikroservisnog okruženja nije dovoljno samo implementirati i skalirati: Trebate uvid u performanse i status usluga u stvarnom vremenuU Kubernetesu je vrlo uobičajeno integrirati alate poput Prometheusa za prikupljanje metrika i Grafane za njihovu vizualizaciju.
Prometheus se bavi "struganjem" metrika iz Podova, čvorova i komponenti klastera, pohranjujući ih i omogućujući vam definiranje upozorenja o njima; u kombinaciji s Grafanom možete stvoriti nadzorne ploče gdje Prati korištenje CPU-a, memoriju, HTTP pogreške, latenciju, broj replika ili status čvora vrlo jasno.
Osim toga, kubectl nudi naredbe Za pregled statusa implementacija, usluga, podova i ostalih resursa, pogledajte drvaTo uključuje opisivanje događaja ili pristup kontejnerima za otklanjanje pogrešaka. Sve je to dio strategije promatranja koja u mikroservisima, Nije opcionalno ako želite mirno spavati..
Odnos između mikroservisa, Dockera i Kubernetesa
Mikroservisi, Docker i Kubernetes se uklapaju kao dijelovi iste slagalice: Arhitektura mikroservisa definira kako dizajnirate aplikaciju, Docker se bavi pakiranjem i pokretanjem svake usluge, a Kubernetes orkestrira sve te kontejnere. u klasteru.
Svaki mikroservis je enkapsuliran u Docker slika koja uključuje njegov kod i ovisnostiTo osigurava da se ponaša na isti način na prijenosnom računalu programera, u testnom okruženju ili u produkciji u oblaku. Ovo dosljedno pakiranje ključno je za DevOps filozofiju.
Sa svoje strane, Kubernetes djeluje kao orkestrator kontejneraOdlučuje koliko instanci svakog mikroservisa treba biti pokrenuto, gdje se nalaze, kako se promet prema njima balansira, kako se oporavljaju od kvarova i kako se skaliraju kada se potražnja poveća ili smanji.
U aplikaciji za e-trgovinu, na primjer, možete imati mikroservise za autentifikaciju, katalog, košaricu za kupnju i plaćanja, svaki sa svojom Docker slikom i Kubernetes implementacijom. Na taj način, Možete skalirati katalog u masovnim kampanjama ili plaćanjima u kritičnim trenucima bez utjecaja na ostaloi orkestrirati cijeli njegov životni ciklus od CI/CD cjevovoda do postprodukcijskog praćenja.
Instaliranje Dockera i Kubernetesa na Windowsima
Ako radite s Windowsima, najlakši način za početak je instalacija Docker radna površinašto uključuje Docker engine i dodatne alate, pa čak i opcije za omogućavanje integracije Kubernetesa u vaše računalo.
Tipičan proces uključuje Preuzmite Docker Desktop sa službene web stranicePokrenite instalacijski program (Docker Desktop Installer.exe) i slijedite čarobnjaka. Tijekom instalacije možete birati između korištenja Hyper-V-a ili WSL 2 kao tehnologija virtualizacije; ako je dostupna samo jedna, ta će se koristiti.
Nakon ponovnog pokretanja sustava, otvaranje Docker Desktopa inicijalizira okruženje kontejnera; ako virtualizacija nije bila omogućena, sam instalacijski program obično nudi omogući automatskiOdatle možete pokretati kontejnere, na primjer, Nginx ili vlastite aplikacije.
Za korištenje Kubernetesa na Windowsima, prvo morate omogućiti Docker i mogućnosti virtualizacije. Zatim možete omogućiti Kubernetes s Docker Desktopa ili instalirajte i konfigurirajte kubectl za upravljanje vanjskim klasterima i, ako je prikladno, implementaciju Kubernetes nadzorne ploče putem udaljenog manifesta.
Nakon konfiguracije, moći ćete pristupiti nadzornoj ploči putem lokalnog proxyja, koristeći autentifikacijski token generiran pomoću kubectl-a i koji upućuje, na primjer, na konfiguracijsku datoteku. .kube/config za upravljanje pristupom klasteru iz preglednika.
Instaliranje Dockera i Kubernetesa na Linuxu
Na Linux sustavima, kao što je Ubuntu, instaliranje Dockera je obično prilično jednostavno: Paketi se ažuriraju, Docker engine se instalira i provjerava se ispravnost okruženja. pokretanje testnog kontejnera.
Tipični koraci uključuju ažuriranje sustava s apt-get ažuriranje i apt-get nadogradnjaUklonite sve prethodne verzije Docker Desktopa, ako ih ima, a zatim instalirajte docker-ce, docker-ce-cli, containerd.io i dodatak docker-compose iz službenih repozitorija ili navođenjem željene verzije.
Kako bi se provjerilo je li sve u redu, obično se pokreće kontejner "hello-world". Preuzima minimalnu sliku i pokreće je.Ako se poruka ispravno prikaže, Docker je pokrenut i spreman za kontejnerizaciju mikroservisa.
Što se tiče Kubernetesa, na Linuxu se može instalirati pomoću alata kao što su kubeadmTipičan tijek rada uključuje dodavanje ključa Kubernetes repozitorija, konfiguriranje datoteke s popisom paketa, instaliranje kubeadm-a i provjeru njegove verzije.
Klaster se zatim inicijalizira na glavnom čvoru s kubeadm init (određivanjem mrežnog raspona za Podove), dohvaća se naredba „join“ kako bi se radni čvorovi pridružili klasteru, a lokalni pristup se konfigurira stvaranjem direktorija $HOME/.kubekopiranjem datoteke admin.conf i podešavanjem dozvola.
S ovim ćete imati osnovni klaster spreman za implementirati kontejnerizirane mikroservise, instalirajte mrežu Podova (Flannel, Calico, itd.) i počnite raditi s Deploymentsima, Servicesima i ostalim Kubernetes resursima.
Najbolje prakse i preporuke za korištenje Dockera i Kubernetesa
Kako biste maksimalno iskoristili ova okruženja, preporučljivo je slijediti niz najboljih praksi s Dockerom, počevši s koristite službene ili pouzdane slike, bilo s Docker Huba ili iz provjerenih privatnih repozitorija, kako bi se smanjili sigurnosni rizici.
Toplo se preporučuje optimizirajte veličinu slike korištenje laganih osnovnih slika, višefaznih izrada i uklanjanja privremene datoteke ili nepotrebne artefakte. Manje slike se brže preuzimaju i ubrzavaju implementacije na Kubernetes.
Druga ključna stvar je korištenje volumeni za trajnost podatakaUmjesto pohranjivanja informacija unutar kontejnera, gubitak ili ponovno stvaranje kontejnera ne uključuje gubitak važnih podataka.
Ograničavanje resursa dodijeljenih svakom kontejneru (CPU, memorija, I/O) pomaže u spriječiti da jedna usluga monopolizira hosta i degradirati ostatak. Nadalje, kontejnere je potrebno pratiti alatima poput Docker Statsa ili naprednijim rješenjima kako bi se održala kontrola u produkciji.
S Kubernetesom je ključno razumjeti arhitekturu klastera i njegove komponente prije nego što se krene u produkciju. To smanjuje mnoge glavobolje.
To je također dobra ideja automatizirati koliko god je to mogućeKoristite kontrolere replikacije, automatske skalere i poslove za serijsko učitavanje; iskoristite prednosti ažuriranja i vraćanja prethodnih verzija; te definirajte deklarativne manifeste s verzijama u Git repozitorijima.
Sigurnost uvijek mora biti glavni prioritet: Ograničite pristup API poslužitelju, upravljajte vjerodajnicama pomoću tajni, šifrirajte podatke u prijenosu i u stanju mirovanjaRedovito primjenjivajte zakrpe i definirajte mrežne politike koje ograničavaju komunikaciju između servisa prema načelu najmanjih privilegija.
Konačno, bitno je imati dobri centralizirani sustavi za nadzor i evidentiranjekao i s predprodukcijskim okruženjima gdje se promjene mogu temeljito testirati prije nego što se unesu u produkcijski klaster, smanjujući rizike i neugodna iznenađenja.
Cijeli ovaj ekosustav mikroservisa, Docker kontejnera i Kubernetes orkestracije omogućuje vam izgradnju sustava koji su puno fleksibilniji, skalabilniji i otporniji od tradicionalnih monolita. Kombiniranjem dobro osmišljene arhitekture, odgovarajućih alata i najboljih DevOps praksi možete implementirati aplikacije koje se besprijekorno prilagođavaju promjenama u opterećenju, brzo se oporavljaju od kvarova i lakše se razvijaju tijekom vremena.
Strastveni pisac o svijetu bajtova i tehnologije općenito. Volim dijeliti svoje znanje pisanjem, a to je ono što ću učiniti na ovom blogu, pokazati vam sve najzanimljivije stvari o gadgetima, softveru, hardveru, tehnološkim trendovima i još mnogo toga. Moj cilj je pomoći vam da se snađete u digitalnom svijetu na jednostavan i zabavan način.
