ProHoster > Blog > uprava > Kako izgraditi hibridni oblak koristeći Kubernetes koji može zamijeniti DBaaS
Kako izgraditi hibridni oblak koristeći Kubernetes koji može zamijeniti DBaaS
Moje ime je Petr Zaitsev, ja sam CEO, osnivač percona i želim ti reći:
kako smo došli od rješenja otvorenog koda do baze podataka kao usluge;
koji pristupi postoje za postavljanje baza podataka u oblak;
kako Kubernetes može zamijeniti DBaaS, eliminirajući ovisnost o dobavljaču i održavajući jednostavnost DBMS-a kao usluge.
Članak su pripremili Mail.ru Cloud Solutions & Tarantool na temelju izvješća na @Databases Meetup. Ako ne želite čitati, možete pogledati:
Kako smo došli od otvorenog koda do baze podataka kao usluge u oblaku
Radim na otvorenom kodu od kasnih 90-ih. Prije dvadeset godina korištenje otvorenog koda, poput baza podataka, nije bilo tako lako. Trebalo je skinuti izvorni kod, zakrpati ga, prevesti i tek onda koristiti.
Otvoreni kod je zatim prošao kroz niz pojednostavljenja:
Tar.gz i INSTALL izvori koje je trebalo prevesti;
paketi s ovisnostima poput .deb i .rpm, gdje trebate instalirati samo skup paketa;
spremišta paketa poput APT i YUM, s kojima je instalacija automatska;
rješenja kao što su Docker i Snap, koja vam omogućuju primanje paketa instalacijom bez vanjskih ovisnosti.
Kao rezultat toga, postaje jednostavnije koristiti softver otvorenog koda i također se smanjuju prepreke za ulazak u razvoj takvih aplikacija.
U isto vrijeme, za razliku od situacije prije 20 godina, kada su svi bili stručnjaci za sklapanje, sada većina programera ne može izraditi alate koje koriste iz izvora.
Zapravo, ovo nije loše, jer:
Možemo koristiti složeniji, ali korisniku prilagođeniji softver. Na primjer, preglednik je prikladan za korištenje, ali uključuje mnoge komponente otvorenog koda i nezgodno ga je izgraditi od nule.
Više ljudi može postati programerima otvorenog koda i drugog softvera, više se softvera koristi u tvrtkama i potreba za njim je veća.
Loša strana je što je sljedeći korak u pojednostavljenju povezan s korištenjem cloud rješenja, a to dovodi do određenog vendor lock-ina, odnosno vezanja za jednog dobavljača. Mi koristimo jednostavna rješenja, a pružatelji koriste komponente otvorenog koda, ali oni su zapravo prikovani za jedan od velikih oblaka. To jest, najlakši i najbrži način za implementaciju otvorenog koda (i softvera kompatibilnog s njim) je u oblacima, korištenjem vlasničkog API-ja.
Kada je riječ o bazama podataka u oblaku, postoje dva pristupa:
Sastavite infrastrukturu baze podataka, kao u običnom podatkovnom centru. To jest, uzmite standardne građevne blokove: računanje, pohranu i tako dalje, instalirajte Linux i bazu podataka na njih te ih konfigurirajte.
Koristite bazu podataka kao uslugu, gdje pružatelj nudi gotovu bazu podataka unutar oblaka.
DBaaS je trenutačno brzo rastuće tržište jer programerima omogućuje izravan rad s bazama podataka i smanjuje rutinski rad. Davatelj se obvezuje osigurati visoku dostupnost i jednostavno skaliranje, krpanje baze podataka, sigurnosne kopije i podešavanje performansi.
Dvije vrste baze podataka kao usluge temeljene na otvorenom kodu i alternativa u obliku Kubernetesa
Postoje dvije vrste baze podataka kao usluge za otvorene baze podataka:
Standardni proizvod otvorenog koda upakiran u administrativnu pozadinu za jednostavnu implementaciju i upravljanje.
Napredno komercijalno rješenje s raznim dodacima, kompatibilno s otvorenim kodom.
Obje opcije smanjuju mogućnost migracije između oblaka i smanjuju prenosivost podataka i aplikacija. Na primjer, unatoč činjenici da različite vrste oblaka podržavaju u biti isti standardni MySQL, postoje značajne razlike između njih: u radu, performansama, sigurnosnom kopiranju i tako dalje. Migracija s jednog oblaka na drugi može biti izazovna, osobito za složene aplikacije.
I tu se postavlja pitanje - je li moguće dobiti pogodnost baze podataka kao usluge, ali kao jednostavnog rješenja otvorenog koda?
Loša vijest je da takvih rješenja, nažalost, još nema na tržištu. Dobra vijest je da postoji Kubernetes, koji vam omogućuje implementaciju takvih rješenja.
Kubernetes je operativni sustav za oblak ili podatkovni centar koji vam omogućuje implementaciju i upravljanje aplikacijom na više poslužitelja u klasteru umjesto na jednom hostu.
Sada je Kubernetes vodeći u kategoriji takvog softvera. Bilo je mnogo različitih rješenja za takve probleme, ali to je postalo standard. Mnoge tvrtke koje su se prije fokusirale na alternativna rješenja sada se fokusiraju na prilagodbu svojih proizvoda za podršku Kubernetesu.
Osim toga, Kubernetes je univerzalno rješenje koje je podržano u privatnim, javnim i hibridnim oblacima mnogih dobavljača, primjerice: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud rješenja.
Kako Kubernetes radi s bazama podataka
Kubernetes je izvorno dizajniran za aplikacije bez stanja koje obrađuju podatke, ali ne pohranjuju ništa, kao što su mikroservisi ili web aplikacije. Baze podataka su na drugom kraju spektra, to jest, one su aplikacije sa stanjem. A Kubernetes izvorno nije bio namijenjen takvim aplikacijama.
Međutim, nedavno su se u Kubernetesu pojavile značajke koje omogućuju korištenje baza podataka i drugih aplikacija s praćenjem stanja:
StatefulSet koncept je cijeli niz primitiva za obradu događaja o zaustavljanju rada podova i implementaciju Graceful Shutdown (predvidljivo gašenje aplikacije).
Trajni volumeni su spremišta podataka koja su povezana s podovima, Kubernetes objektima za upravljanje.
Operator Framework - to jest, sposobnost stvaranja komponenti za upravljanje bazama podataka i drugim aplikacijama s praćenjem stanja raspoređenih na mnogo čvorova.
Već sada u javnim oblacima postoje velike baze podataka kao usluga, čiji je backend Kubernetes, na primjer: CockroachCloud, InfluxDB, PlanetScale. Odnosno, baza podataka na Kubernetesu nije samo nešto što je teoretski moguće, već i nešto što funkcionira u praksi.
Percona ima dva rješenja otvorenog koda za Kubernetes:
Kubernetes Operator za Percona poslužitelj za MongoDB.
Kubernetes Operator for XtraDB CLUSTER je usluga koja je kompatibilna s MySQL-om i pruža visoku dostupnost i dosljednost. Također možete koristiti jedan čvor ako visoka dostupnost nije potrebna, na primjer za razvojnu bazu podataka.
Korisnici Kubernetesa mogu se podijeliti u dvije skupine. Neki ljudi izravno koriste Kubernetes Operators - to su uglavnom napredni korisnici koji dobro razumiju kako tehnologija funkcionira. Drugi ga pokreću na backendu - takve korisnike zanima nešto poput baze podataka kao usluge, ne žele ulaziti u nijanse Kubernetesa. Za drugu skupinu korisnika imamo još jedno open source rješenje - Percona DBaaS CLI Tool. Ovo je eksperimentalno rješenje za one koji žele dobiti DBaaS otvorenog koda temeljen na Kubernetesu bez dubljeg razumijevanja tehnologije.
Kako pokrenuti Perconin DBaaS na Google Kubernetes Engineu
Google Kubernetes Engine je, po mom mišljenju, jedna od najfunkcionalnijih implementacija Kubernetes tehnologije. Dostupan je u mnogim regijama svijeta i ima jednostavan i praktičan alat za naredbeni redak (SDK), koji vam omogućuje stvaranje skripti umjesto ručnog upravljanja platformom.
Da bi naš DBaaS radio, potrebne su nam sljedeće komponente:
Kubectl.
Google Cloud SDK.
Percona DBaaS CLI.
Instalirajte kubectl
Instaliramo paket za vaš operativni sustav, pogledat ćemo primjer Ubuntua. Više detalja ovdje.
Na isti način instaliramo programski paket. Više detalja ovdje.
# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg]
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk
Instaliranje Percona DBaaS CLI
Instalirajte iz repozitorija Percona. Percona DBaaS CLI Alat je još uvijek eksperimentalni proizvod, stoga se nalazi u eksperimentalnom repozitoriju, koji se mora zasebno omogućiti, čak i ako već imate instalirane Percona repozitorije.
Prvo se morate prijaviti na svoj Google račun. Nadalje, Google Cloud omogućuje jednom korisniku da ima mnogo neovisnih projekata, tako da trebate navesti radni projekt pomoću koda za ovaj projekt:
gcloud auth login
gcloud config set project hidden-brace-236921
Zatim stvaramo klaster. Za demo sam napravio Kubernetes klaster od samo tri čvora - ovo je minimum potreban za visoku dostupnost:
Zatim stvaramo prostor imena i činimo ga aktivnim. Prostor imena je, grubo rečeno, također poput projekta ili okruženja, ali već unutar Kubernetes klastera. Neovisan je o Google Cloud projektima:
Nakon što smo prošli kroz ovih nekoliko koraka, možemo pokrenuti klaster od tri čvora ovom jednostavnom naredbom:
# percona-dbaas mysql create-db example
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: Nt9YZquajW7nfVXTTrP
Status: ready
Kako se spojiti na klaster
Prema zadanim postavkama, dostupan je samo unutar Kubernetesa. To jest, nije mu moguće pristupiti s ovog poslužitelja s kojeg ste pokrenuli naredbu "Create". Da biste ga učinili dostupnim, na primjer, za testove s klijentom, morate proslijediti port kroz mapiranje porta:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Napredne naredbe za upravljanje klasterom
Baza podataka na javnom IP-u
Ako želite trajnije rješenje za dostupnost klastera, možete dobiti vanjsku IP adresu. U tom će slučaju baza podataka biti dostupna s bilo kojeg mjesta. Ovo je manje sigurno, ali često praktičnije. Za vanjski IP koristimo sljedeću naredbu:
# percona-dbaas mysql create-db exposed
--options="proxysql.serviceType=LoadBalancer"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: exposed
Resource Endpoint: 104.154.133.197
Port: 3306
User: root
Pass: k0QVxTr8EVfgyCLYse
Status: ready
To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse
Eksplicitno postavite lozinku
Umjesto da sustav nasumično generira lozinku, možete eksplicitno postaviti lozinku:
Ovo je rješenje za zadatke testiranja kako biste pokrenuli MySQL što je brže i lakše moguće, testirali ga, a zatim isključili ili upotrijebili za razvoj.
Alat Percona DBaaS CLI pomaže vam da postignete rješenje slično DBaaS-u na Kubernetesu. Istovremeno nastavljamo raditi na njegovoj funkcionalnosti i upotrebljivosti.