ProHoster > Blog > Uprava > Kako zgraditi hibridni oblak z uporabo Kubernetesa, ki lahko nadomesti DBaaS
Kako zgraditi hibridni oblak z uporabo Kubernetesa, ki lahko nadomesti DBaaS
Moje ime je Petr Zaitsev, sem izvršni direktor, ustanovitelj Percona in želim ti povedati:
kako smo prišli od odprtokodnih rešitev do baze podatkov kot storitve;
kakšni pristopi obstajajo za postavitev baz podatkov v oblaku;
kako lahko Kubernetes nadomesti DBaaS, odpravi odvisnost od prodajalca in ohrani preprostost DBMS kot storitve.
Članek je bil pripravljen na podlagi poročila na srečanju @Databases Meetup s strani Mail.ru Cloud Solutions & Tarantool. Če ne želite brati, si lahko ogledate:
Kako smo prišli od odprte kode do baze podatkov kot storitve v oblaku
Z odprto kodo delam že od poznih 90. let. Pred dvajsetimi leti uporaba odprte kode, kot so baze podatkov, ni bila tako enostavna. Treba je bilo prenesti izvorno kodo, jo zakrpati, prevesti in šele nato uporabiti.
Odprta koda je nato šla skozi vrsto poenostavitev:
Viri Tar.gz in INSTALL, ki jih je bilo treba prevesti;
paketi z odvisnostmi, kot sta .deb in .rpm, kjer morate namestiti samo niz paketov;
repozitoriji paketov, kot sta APT in YUM, s katerimi je namestitev samodejna;
rešitve, kot sta Docker in Snap, ki omogočata prejemanje paketov z namestitvijo brez zunanjih odvisnosti.
Posledično postane preprostejša uporaba odprtokodne programske opreme in zmanjša se tudi vstopna ovira pri razvoju takšnih aplikacij.
Hkrati pa za razliko od situacije pred 20 leti, ko so bili vsi strokovnjaki za sestavljanje, zdaj večina razvijalcev ne more zgraditi orodij, ki jih uporabljajo, iz vira.
Pravzaprav to ni slabo, ker:
Uporabimo lahko bolj zapleteno, a uporabniku prijaznejšo programsko opremo. Na primer, brskalnik je priročen za uporabo, vendar vključuje veliko odprtokodnih komponent in ga je neprijetno zgraditi iz nič.
Več ljudi lahko postane razvijalcev odprtokodne in druge programske opreme, več programske opreme uporabljajo podjetja in potreba po njej je večja.
Slaba stran je, da je naslednji korak poenostavljanja povezan z uporabo rešitev v oblaku, kar vodi v določeno vendor lock-in, torej vezavo na enega dobavitelja. Uporabljamo preproste rešitve, ponudniki pa odprtokodne komponente, ki pa so dejansko prikovane na enega izmed velikih oblakov. To pomeni, da je najpreprostejši in najhitrejši način za uvedbo odprtokodnega programa (in z njim združljive programske opreme) v oblaku z uporabo lastniškega API-ja.
Ko gre za baze podatkov v oblaku, obstajata dva pristopa:
Sestavite infrastrukturo baze podatkov, kot v običajnem podatkovnem centru. To pomeni, da vzemite standardne gradnike: računalništvo, shranjevanje in tako naprej, nanje namestite Linux in bazo podatkov ter jih konfigurirajte.
Uporabite bazo podatkov kot storitev, kjer ponudnik ponudi že pripravljeno bazo podatkov znotraj oblaka.
DBaaS je trenutno hitro rastoči trg, ker razvijalcem omogoča neposredno delo z bazami podatkov in zmanjšuje rutinsko delo. Ponudnik se zavezuje, da bo zagotavljal visoko razpoložljivost in enostavno skaliranje, popravljanje podatkovnih baz, varnostne kopije in nastavitev zmogljivosti.
Dve vrsti baze podatkov kot storitve, ki temelji na odprti kodi in alternativa v obliki Kubernetesa
Obstajata dve vrsti baze podatkov kot storitve za odprte baze podatkov:
Standardni odprtokodni izdelek, zapakiran v skrbniško zaledje za enostavno uvajanje in upravljanje.
Napredna komercialna rešitev z različnimi dodatki, kompatibilna z odprto kodo.
Obe možnosti zmanjšata možnost selitve med oblaki in zmanjšata prenosljivost podatkov in aplikacij. Na primer, kljub dejstvu, da različne vrste oblakov podpirajo v bistvu isti standardni MySQL, obstajajo pomembne razlike med njimi: v delovanju, zmogljivosti, varnostnem kopiranju itd. Prehod iz enega oblaka v drugega je lahko izziv, zlasti za kompleksne aplikacije.
In tu se pojavi vprašanje - ali je mogoče pridobiti udobje baze podatkov kot storitve, ampak kot preprosto odprtokodno rešitev?
Slaba novica je, da tovrstnih rešitev na trgu žal še ni. Dobra novica je, da obstaja Kubernetes, ki omogoča implementacijo takšnih rešitev.
Kubernetes je operacijski sistem za oblak ali podatkovni center, ki vam omogoča uvajanje in upravljanje aplikacije v več strežnikih v gruči namesto na enem samem gostitelju.
Zdaj je Kubernetes vodilni v kategoriji takšne programske opreme. Obstajalo je veliko različnih rešitev za takšne težave, vendar je postal standard. Mnoga podjetja, ki so se prej osredotočala na alternativne rešitve, se zdaj osredotočajo na prilagoditev svojih izdelkov za podporo Kubernetesu.
Poleg tega je Kubernetes univerzalna rešitev, ki je podprta v zasebnih, javnih in hibridnih oblakih številnih ponudnikov, na primer: AWS, Google Cloud, Microsoft Azure, Mail.ru rešitve v oblaku.
Kako Kubernetes deluje z bazami podatkov
Kubernetes je bil prvotno zasnovan za aplikacije brez stanja, ki obdelujejo podatke, vendar ne shranjujejo ničesar, kot so mikrostoritve ali spletne aplikacije. Baze podatkov so na drugem koncu spektra, to je, da so aplikacije s stanjem. In Kubernetes prvotno ni bil namenjen takim aplikacijam.
Vendar pa so se v Kubernetesu pred kratkim pojavile funkcije, ki omogočajo uporabo baz podatkov in drugih aplikacij s spremljanjem stanja:
Koncept StatefulSet je cela vrsta primitivov za obdelavo dogodkov o zaustavitvi dela podov in implementacijo Graceful Shutdown (predvidljiva zaustavitev aplikacije).
Trajni nosilci so podatkovne shrambe, ki so povezane s podi, predmeti upravljanja Kubernetes.
Ogrodje operaterja – to je zmožnost ustvarjanja komponent za upravljanje baz podatkov in drugih aplikacij s spremljanjem stanja, porazdeljenih po številnih vozliščih.
Že zdaj v javnih oblakih obstajajo velike baze podatkov kot storitev, katerih zaledje je Kubernetes, na primer: CockroachCloud, InfluxDB, PlanetScale. Se pravi, baza podatkov na Kubernetesu ni samo teoretično možno, ampak tudi nekaj, kar deluje v praksi.
Percona ima dve odprtokodni rešitvi za Kubernetes:
Operater Kubernetes za strežnik Percona za MongoDB.
Kubernetes Operator for XtraDB CLUSTER je storitev, ki je združljiva z MySQL in zagotavlja visoko razpoložljivost in doslednost. Uporabite lahko tudi eno vozlišče, če visoka razpoložljivost ni potrebna, na primer za zbirko podatkov razvijalcev.
Uporabnike Kubernetesa lahko razdelimo v dve skupini. Nekateri uporabljajo neposredno operaterje Kubernetes – to so predvsem napredni uporabniki, ki dobro razumejo delovanje tehnologije. Drugi ga izvajajo v ozadju - takšne uporabnike zanima nekaj, kot je Database as a Service, ne želijo se poglabljati v nianse Kubernetesa. Za drugo skupino uporabnikov imamo še eno odprtokodno rešitev - Percona DBaaS CLI Tool. To je poskusna rešitev za tiste, ki želijo dobiti odprtokodni DBaaS, ki temelji na Kubernetesu, brez poglobljenega razumevanja tehnologije.
Kako zagnati Perconin DBaaS na Google Kubernetes Engine
Google Kubernetes Engine je po mojem mnenju ena najbolj funkcionalnih implementacij tehnologije Kubernetes. Na voljo je v mnogih regijah sveta in ima preprosto in priročno orodje ukazne vrstice (SDK), ki vam omogoča ustvarjanje skriptov namesto ročnega upravljanja platforme.
Da bi naš DBaaS deloval, potrebujemo naslednje komponente:
Kubectl.
Google Cloud SDK.
Percona DBaaS CLI.
Namestite kubectl
Namestimo paket za vaš operacijski sistem, pogledali bomo primer Ubuntuja. Več podrobnosti tukaj.
Programski paket namestimo na enak način. Več podrobnosti tukaj.
# 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
Namestitev Percona DBaaS CLI
Namestite iz skladišč Percona. Orodje Percona DBaaS CLI je še vedno eksperimentalni izdelek, zato se nahaja v eksperimentalnem repozitoriju, ki ga morate omogočiti posebej, tudi če že imate nameščene repozitorije Percona.
Najprej se morate prijaviti v svoj Google račun. Poleg tega Google Cloud omogoča enemu uporabniku, da ima veliko neodvisnih projektov, zato morate določiti delujoč projekt s kodo za ta projekt:
gcloud auth login
gcloud config set project hidden-brace-236921
Nato ustvarimo gručo. Za predstavitev sem ustvaril gručo Kubernetes s samo tremi vozlišči – to je najmanjša zahteva za visoko razpoložljivost:
Nato ustvarimo imenski prostor in ga naredimo aktivnega. Imenski prostor je, grobo rečeno, tudi kot projekt ali okolje, vendar že znotraj gruče Kubernetes. Je neodvisen od projektov Google Cloud:
Ko opravimo teh nekaj korakov, lahko zaženemo gručo s tremi vozlišči s tem preprostim ukazom:
# 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 v gručo
Privzeto je na voljo samo znotraj Kubernetesa. To pomeni, da ni dostopen s tega strežnika, s katerega ste zagnali ukaz »Ustvari«. Če želite, da je na voljo na primer za preizkuse z odjemalcem, morate vrata posredovati prek preslikave vrat:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Napredni ukazi za upravljanje gruče
Baza podatkov na javnem IP-ju
Če želite trajnejšo rešitev za razpoložljivost gruče, lahko dobite zunanji naslov IP. V tem primeru bo baza podatkov dostopna od kjer koli. To je manj varno, a pogosto bolj priročno. Za zunanji IP uporabimo naslednji ukaz:
# 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
Izrecno nastavite geslo
Namesto da sistem naključno ustvari geslo, lahko geslo nastavite eksplicitno: