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:

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

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

  1. Standardni odprtokodni izdelek, zapakiran v skrbniško zaledje za enostavno uvajanje in upravljanje.
  2. 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:

  1. Koncept StatefulSet je cela vrsta primitivov za obdelavo dogodkov o zaustavitvi dela podov in implementacijo Graceful Shutdown (predvidljiva zaustavitev aplikacije).
  2. Trajni nosilci so podatkovne shrambe, ki so povezane s podi, predmeti upravljanja Kubernetes.
  3. 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:

  1. Operater Kubernetes za strežnik Percona za MongoDB.
  2. 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:

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

Namestite kubectl

Namestimo paket za vaš operacijski sistem, pogledali bomo primer Ubuntuja. Več podrobnosti tukaj.

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

Nameščanje Google Cloud SDK

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.

več tukaj.

Algoritem namestitve:

  1. Nastavite repozitorije Percona z orodjem percona-release. Najprej morate prenesti in namestiti uradni paket za izdajo percone iz Percone:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Omogočite komponento skladišča eksperimentalnih orodij na naslednji način:
    sudo percona-release enable tools experimental
    
  3. Namestite paket percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Nastavitev delovanja komponent

Več o nastavitvah tukaj.

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:

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

Naslednji ukaz kubectl daje želene privilegije našemu trenutnemu uporabniku:

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

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:

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

Zagon gruče

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:

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

Nato povežemo vaš odjemalec MySQL:

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:

# 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

Izhod skriptov prikazujem v človeku berljivem formatu, vendar je podprt tudi format JSON.

Izklop visoke razpoložljivosti

Z naslednjim ukazom lahko onemogočite visoko razpoložljivost za uvedbo enega vozlišča:

# 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

To je rešitev za preizkušanje nalog, da se MySQL kar se da hitro in preprosto zažene, preizkusi in nato zaustavi ali uporabi za razvoj.

Orodje Percona DBaaS CLI vam pomaga doseči rešitev, podobno DBaaS, na Kubernetesu. Obenem še naprej delamo na njegovi funkcionalnosti in uporabnosti.

To poročilo je bilo prvič predstavljeno na @Databases Meetup avtor Mail.ru Cloud Solutions&Tarantool. Poglej Video druge predstave in se naročite na obvestila o dogodkih na Telegramu Okoli Kubernetesa v skupini Mail.ru.

Kaj še prebrati na to temo:

  1. Baze podatkov v sodobni platformi IIoT.
  2. Kako izbrati zbirko podatkov za projekt, da vam ne bo treba znova izbirati.

Vir: www.habr.com

Dodaj komentar