Kako napraviti hibridni oblak koristeći Kubernetes koji može zamijeniti DBaaS

Moje ime je Petr Zaitsev, ja sam izvršni direktor, osnivač percona i želim da ti kažem:

  • kako smo od rješenja otvorenog koda došli do baze podataka kao usluge;
  • koji pristupi postoje za implementaciju baza podataka u oblaku;
  • kako Kubernetes može zamijeniti DBaaS, eliminirajući ovisnost o dobavljačima i održavajući jednostavnost DBMS-a kao usluge.

Članak je pripremljen na osnovu izvještaja na @Databases Meetup od strane Mail.ru Cloud Solutions & Tarantool. Ako ne želite čitati, možete pogledati:


Kako smo došli od otvorenog koda do baze podataka kao usluge u oblaku

Radim u otvorenom kodu od kasnih 90-ih. Prije dvadeset godina korištenje otvorenog koda, kao što su baze podataka, nije bilo tako lako. Bilo je potrebno preuzeti izvorni kod, zakrpati ga, kompajlirati i tek onda koristiti.

Otvoreni kod je zatim prošao kroz niz pojednostavljenja:

  • Tar.gz i INSTALL izvore koje je trebalo kompajlirati;
  • paketi sa zavisnostima kao što su .deb i .rpm, gde je potrebno samo da instalirate skup paketa;
  • spremišta paketa poput APT i YUM, sa kojima je instalacija automatska;
  • rješenja kao što su Docker i Snap, koja vam omogućavaju primanje paketa instalacijom bez vanjskih ovisnosti.

Kao rezultat toga, postaje lakše koristiti softver otvorenog koda i također smanjuje barijeru za ulazak u razvoj takvih aplikacija.

Istovremeno, za razliku od situacije prije 20 godina, kada su svi bili stručnjaci za montažu, sada većina programera ne može izgraditi alate koje koriste iz izvora.

U stvari, ovo nije loše, jer:

  1. Možemo koristiti složeniji, ali jednostavniji softver. Na primjer, pretraživač je zgodan za korištenje, ali uključuje mnoge komponente otvorenog koda i nezgodno ga je graditi od nule.
  2. Više ljudi može postati programeri otvorenog koda i drugog softvera, više softvera koriste kompanije, a potreba za njim je veća.

Nedostatak je što je sljedeći korak u pojednostavljivanju povezan s korištenjem rješenja u oblaku, a to dovodi do određenog zaključavanja dobavljača, odnosno vezivanja za jednog dobavljača. Koristimo jednostavna rješenja, a dobavljači koriste komponente otvorenog koda, ali su u stvari prikovane za jedan od velikih oblaka. Odnosno, najlakši i najbrži način za implementaciju otvorenog koda (i softvera kompatibilnog s njim) je u oblacima, koristeći vlasnički API.

Kada su u pitanju baze podataka u oblaku, postoje dva pristupa:

  1. Sastavite infrastrukturu baze podataka, kao u običnom data centru. Odnosno, uzmite standardne građevne blokove: računanje, skladištenje i tako dalje, instalirajte Linux i bazu podataka na njih i konfigurirajte ih.
  2. Koristite bazu podataka kao uslugu, gdje provajder nudi gotovu bazu podataka unutar oblaka.

DBaaS je tržište koje brzo raste jer omogućava programerima da rade direktno sa bazama podataka i minimizira rutinski rad. Provajder se obavezuje da će osigurati visoku dostupnost i jednostavno skaliranje, zakrpe baze podataka, sigurnosne kopije i podešavanje performansi.

Dvije vrste baze podataka kao usluge zasnovane na otvorenom kodu i alternativa u obliku Kubernetesa

Postoje dvije vrste baze podataka kao servisa za otvorene baze podataka:

  1. Standardni proizvod otvorenog koda upakovan u pozadinu administracije za jednostavnu implementaciju i upravljanje.
  2. 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, uprkos činjenici da različite vrste oblaka podržavaju u suštini isti standardni MySQL, postoje značajne razlike između njih: u radu, performansama, sigurnosnom kopiranju i tako dalje. Migracija iz jednog oblaka u drugi može biti izazovna, posebno za složene aplikacije.

I tu se postavlja pitanje - da li je moguće dobiti pogodnost baze podataka kao servisa, ali kao jednostavno rješenje otvorenog koda?

Loša vijest je da, nažalost, takvih rješenja još nema na tržištu. Dobra vijest je da postoji Kubernetes, koji vam omogućava implementaciju takvih rješenja.

Kubernetes je operativni sistem za oblak ili data centar koji vam omogućava da implementirate i upravljate aplikacijom na više servera u klasteru, a ne na jednom hostu.

Sada je Kubernetes lider u kategoriji takvog softvera. Bilo je mnogo različitih rješenja za takve probleme, ali je postalo standard. Mnoge kompanije koje su se nekada fokusirale na alternativna rešenja sada se fokusiraju na prilagođavanje svojih proizvoda da podrže Kubernetes.

Osim toga, Kubernetes je univerzalno rješenje koje je podržano u privatnim, javnim i hibridnim oblacima mnogih proizvođača, na primjer: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud rješenja.

Kako Kubernetes radi sa bazama podataka

Kubernetes je prvobitno dizajniran za aplikacije bez stanja koje obrađuju podatke, ali ne pohranjuju ništa, kao što su mikroservise ili web aplikacije. Baze podataka su na drugom kraju spektra, to jest, one su aplikacije sa stanjem. A Kubernetes nije prvobitno bio namijenjen za takve aplikacije.

Međutim, postoje funkcije koje su se nedavno pojavile u Kubernetes-u koje omogućavaju korištenje baza podataka i drugih aplikacija s podacima o stanju:

  1. StatefulSet koncept je čitav niz primitiva za obradu događaja o zaustavljanju rada podova i implementaciji Graceful Shutdown (predvidivo gašenje aplikacije).
  2. Trajni volumeni su skladišta podataka koja su povezana sa podovima, Kubernetes objektima upravljanja.
  3. Operator Framework - to jest, mogućnost kreiranja komponenti za upravljanje bazama podataka i drugim aplikacijama sa stanjem raspoređenim 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 funkcioniše u praksi.

Percona ima dva open source rješenja za Kubernetes:

  1. Kubernetes Operator za Percona server za MongoDB.
  2. Kubernetes Operator za XtraDB CLUSTER je usluga koja je kompatibilna sa MySQL-om i pruža visoku dostupnost i konzistentnost. Također možete koristiti jedan čvor ako visoka dostupnost nije potrebna, na primjer za dev bazu podataka.

Korisnici Kubernetesa mogu se podijeliti u dvije grupe. Neki ljudi direktno koriste Kubernetes Operatore - to su uglavnom napredni korisnici koji dobro razumiju kako tehnologija funkcionira. Drugi ga pokreću na backend-u - takve korisnike zanima nešto poput baze podataka kao usluge, ne žele da se upuštaju u nijanse Kubernetesa. Za drugu grupu korisnika imamo još jedno open source rješenje - Percona DBaaS CLI Tool. Ovo je eksperimentalno rješenje za one koji žele dobiti open source DBaaS baziran na Kubernetesu bez dubokog 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 komandne linije (SDK), koji vam omogućava da kreirate skripte umjesto da ručno upravljate platformom.

Da bi naš DBaaS radio, potrebne su nam sljedeće komponente:

  1. Kubectl.
  2. Google Cloud SDK.
  3. Percona DBaaS CLI.

Instaliraj kubectl

Instaliramo paket za vaš operativni sistem, pogledaćemo primer Ubuntua. Više detalja ovdje.

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Instalacija Google Cloud SDK-a

Na isti način instaliramo softverski 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

Instalacija Percona DBaaS CLI

Instalirajte iz Percona spremišta. Percona DBaaS CLI Alat je još uvijek eksperimentalni proizvod, tako da se nalazi u eksperimentalnom spremištu, koje mora biti posebno omogućeno, čak i ako već imate instalirana Percona spremišta.

Pročitajte više ovdje.

Algoritam ugradnje:

  1. Postavite Percona repozitorije koristeći percona-release alat. Prvo morate preuzeti i instalirati službeni percona-release paket sa Percone:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Omogućite komponentu spremišta eksperimentalnog alata na sljedeći način:
    sudo percona-release enable tools experimental
    
  3. Instalirajte percona-dbaas-cli paket:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Podešavanje rada komponenti

Više o postavkama ovdje.

Prvo se morate prijaviti na svoj Google račun. Dalje, Google Cloud omogućava jednom korisniku da ima mnogo nezavisnih projekata, tako da morate navesti radni projekat koristeći kod za ovaj projekat:

gcloud auth login
gcloud config set project hidden-brace-236921

Zatim kreiramo klaster. Za demo, napravio sam Kubernetes klaster od samo tri čvora - ovo je minimum potreban za visoku dostupnost:

gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3

Sljedeća naredba kubectl daje željene privilegije našem trenutnom korisniku:

kubectl create clusterrolebinding cluster-admin-binding-$USER 
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

Zatim kreiramo imenski prostor i činimo ga aktivnim. Imenski prostor je, grubo rečeno, takođe poput projekta ili okruženja, ali već unutar Kubernetes klastera. Nezavisan je od Google Cloud projekata:

kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace

Pokretanje klastera

Nakon što prođemo kroz ovih nekoliko koraka, možemo pokrenuti klaster sa tri čvora sa 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 povezati na klaster

Podrazumevano, dostupan je samo unutar Kubernetesa. Odnosno, nije dostupan sa ovog servera sa kojeg ste pokrenuli naredbu “Kreiraj”. Da biste ga učinili dostupnim, na primjer, za testove s klijentom, trebate prosljediti port kroz mapiranje portova:

kubectl port-forward svc/example-proxysql 3306:3306 $

Zatim povezujemo vaš MySQL klijent:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Napredne komande za upravljanje klasterom

Baza podataka na javnoj IP adresi

Ako želite trajnije rješenje za dostupnost klastera, možete dobiti eksternu IP adresu. U tom slučaju, baza podataka će biti dostupna s bilo kojeg mjesta. Ovo je manje bezbedno, ali često praktičnije. Za eksterni 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 sistem nasumično generira lozinku, možete je postaviti eksplicitno:

# percona-dbaas mysql create-db withpw --password=mypassword
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              mypassword
Status:            ready

Prikazujem izlaz skripti u ljudskom čitljivom formatu, ali je podržan i JSON format.

Isključivanje visoke dostupnosti

Sa sljedećom naredbom možete onemogućiti visoku dostupnost za implementaciju jednog čvora:

# percona-dbaas mysql create-db singlenode 
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              22VqFD96mvRnmPMGg
Status:            ready

Ovo je rješenje za testiranje zadataka kako bi se MySQL pokrenuo i pokrenuo što je brže i lakše moguće, testirao ga, a zatim ga isključio ili koristio za razvoj.

Percona DBaaS CLI alat pomaže vam da postignete rješenje slično DBaaS-u na Kubernetesu. Istovremeno, nastavljamo raditi na njegovoj funkcionalnosti i upotrebljivosti.

Ovaj izvještaj je prvi put predstavljen na @Databases Meetup by Mail.ru Cloud Solutions&Tarantool. Pogledaj видео ostale nastupe i pretplatite se na najave događaja u Telegramu Oko Kubernetesa u Mail.ru grupi.

Šta još pročitati na temu:

  1. Baze podataka u modernoj IIoT platformi.
  2. Kako odabrati bazu podataka za projekat tako da ne morate ponovo birati.

izvor: www.habr.com

Dodajte komentar