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:

  1. 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.
  2. 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:

  1. 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.
  2. 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:

  1. Standardni proizvod otvorenog koda upakiran u administrativnu pozadinu 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, 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:

  1. StatefulSet koncept je cijeli niz primitiva za obradu događaja o zaustavljanju rada podova i implementaciju Graceful Shutdown (predvidljivo gašenje aplikacije).
  2. Trajni volumeni su spremišta podataka koja su povezana s podovima, Kubernetes objektima za upravljanje.
  3. 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:

  1. Kubernetes Operator za Percona poslužitelj za MongoDB.
  2. 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:

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

Instalirajte kubectl

Instaliramo paket za vaš operativni sustav, pogledat ćemo primjer 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

Instaliranje Google Cloud SDK-a

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.

Više ovdje.

Algoritam ugradnje:

  1. Postavite repozitorije Percona pomoću alata za izdavanje percona. Najprije morate preuzeti i instalirati službeni paket za izdanje percone od 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 repozitorija 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

Postavljanje rada komponenti

Više o postavkama ovdje.

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:

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 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:

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

Pokretanje klastera

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:

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

Zatim povezujemo vaš MySQL klijent:

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:

# 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 formatu čitljivom za čovjeka, ali JSON format je također podržan.

Isključivanje visoke dostupnosti

Sljedećom naredbom možete onemogućiti visoku dostupnost za postavljanje 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 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.

Ovo je izvješće prvi put predstavljeno na @Databases Meetup od Mail.ru Cloud Solutions&Tarantool. Izgled video ostale izvedbe i pretplatite se na najave događaja na Telegramu Oko Kubernetesa u Mail.ru grupi.

Što još pročitati na temu:

  1. Baze podataka u modernoj IIoT platformi.
  2. Kako odabrati bazu podataka za projekt da ne morate ponovno birati.

Izvor: www.habr.com

Dodajte komentar