Nola eraiki hodei hibrido bat DBaaS ordezkatu dezakeen Kubernetes erabiliz

Nire izena Petr Zaitsev da, zuzendari nagusia naiz, sortzailea percona eta esan nahi dizut:

  • nola heldu ginen kode irekiko irtenbideetatik Database as a Servicera;
  • zer ikuspegi dauden datu-baseak hodeian zabaltzeko;
  • Kubernetes-ek nola ordezkatu dezakeen DBaaS, hornitzaileen mendekotasuna ezabatuz eta DBMS zerbitzu gisa soiltasuna mantenduz.

Artikulua Mail.ru Cloud Solutions & Tarantool-en @Databases Meetup-en txosten batean oinarrituta prestatu zen. Irakurri nahi ez baduzu, ikus dezakezu:


Nola iritsi ginen kode irekitik Database zerbitzu gisa hodeian

90eko hamarkadaren amaieratik kode irekian lan egiten dut. Duela hogei urte, kode irekia erabiltzea, datu-baseak adibidez, ez zen hain erraza. Beharrezkoa zen iturburu-kodea deskargatu, adabakia, konpilatu eta gero bakarrik erabiltzea.

Ondoren, kode irekiak sinplifikazio batzuk egin zituen:

  • Konpilatu behar ziren Tar.gz eta INSTALL iturriak;
  • .deb eta .rpm bezalako menpekotasunak dituzten paketeak, non pakete multzo bat bakarrik instalatu behar duzun;
  • APT eta YUM bezalako pakete-biltegiak, eta horiekin instalazioa automatikoa da;
  • Docker eta Snap bezalako irtenbideak, kanpoko menpekotasunik gabe paketeak instalazio bidez jasotzeko aukera ematen dutenak.

Ondorioz, errazagoa da kode irekiko softwarea erabiltzea eta, gainera, horrelako aplikazioak garatzeko sartzeko oztopoak murrizten ditu.

Aldi berean, duela 20 urteko egoera ez bezala, mundu guztiak muntaian adituak zirenean, gaur egun garatzaile gehienek ezin dituzte iturritik eraiki erabiltzen dituzten tresnak.

Izan ere, hau ez da txarra, zeren eta:

  1. Software konplexuagoa baina erabilerrazagoa erabil dezakegu. Adibidez, arakatzailea erabiltzeko erosoa da, baina kode irekiko osagai asko biltzen ditu eta hutsetik eraikitzea deserosoa da.
  2. Jende gehiago kode irekiko eta beste software batzuen garatzaile bihur daiteke, enpresek software gehiago erabiltzen dute eta horren beharra handiagoa da.

Alde txarra da sinplifikazioaren hurrengo urratsa hodeiko soluzioen erabilerarekin lotuta dagoela, eta horrek saltzaileen blokeo jakin bat dakar, hau da, hornitzaile bati lotzea. Guk irtenbide sinpleak erabiltzen ditugu eta hornitzaileek kode irekiko osagaiak erabiltzen dituzte, baina egia esan hodei handietako batean daude iltzatuta. Hau da, kode irekia (eta harekin bateragarria den softwarea) zabaltzeko modurik errazena eta azkarrena hodeietan dago, jabedun API bat erabiliz.

Hodeian dauden datu-baseei dagokienez, bi ikuspegi daude:

  1. Muntatu datu-basearen azpiegitura, ohiko datu-zentro batean bezala. Hau da, eraikuntza-bloke estandarrak hartu: konputatu, biltegiratu eta abar, instalatu Linux eta datu-base bat horietan, eta konfiguratu.
  2. Erabili Datu-basea Zerbitzu gisa, non hornitzaileak prest egindako datu-base bat eskaintzen duen hodei barruan.

DBaaS oraintxe hazten ari den merkatua da, garatzaileei datu-baseekin zuzenean lan egiteko aukera ematen dielako eta ohiko lana gutxitzen duelako. Hornitzaileak erabilgarritasun handia eta eskalatze erraza, datu-baseen adabakia, babeskopiak eta errendimenduaren doikuntza bermatzeko konpromisoa hartzen du.

Bi datu-base mota kode irekian oinarritutako Zerbitzu gisa eta alternatiba bat Kubernetes moduan

Datu-baseak zerbitzu gisa bi mota daude datu-base irekietarako:

  1. Kode irekiko produktu estandar bat administrazioaren backend batean bilduta inplementatzeko eta kudeatzeko errazak izateko.
  2. Irtenbide komertzial aurreratua hainbat gehigarri dituena, kode irekiarekin bateragarria.

Bi aukerak hodeien artean migratzeko aukera murrizten dute eta datuen eta aplikazioen eramangarritasuna murrizten dute. Esate baterako, hodei mota ezberdinek funtsean MySQL estandar bera onartzen duten arren, alde handiak daude haien artean: funtzionamenduan, errendimenduan, babeskopian, etab. Hodei batetik bestera migratzea zaila izan daiteke, batez ere aplikazio konplexuetarako.

Eta hemen galdera sortzen da: posible al da Datu-basearen erosotasuna eskuratzea Zerbitzu gisa, baina kode irekiko irtenbide soil gisa?

Albiste txarra da, zoritxarrez, oraindik ez dagoela horrelako irtenbiderik merkatuan. Albiste ona da Kubernetes dagoela, eta horrek irtenbide horiek ezartzeko aukera ematen du.

Kubernetes hodeirako edo datu-zentrorako sistema eragile bat da, eta aplikazio bat ostalari bakarrean baino zerbitzari anitzetan zabaldu eta kudeatzeko aukera ematen du.

Orain Kubernetes liderra da horrelako softwareen kategorian. Hainbat irtenbide zeuden horrelako arazoetarako, baina estandar bihurtu zen. Konponbide alternatiboetan zentratzen ziren enpresa asko orain beren produktuak Kubernetes laguntzarako egokitzera bideratzen ari dira.

Horrez gain, Kubernetes saltzaile askoren hodei pribatu, publiko eta hibridoetan onartzen den irtenbide unibertsala da, adibidez: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Kubernetes-ek datu-baseekin nola funtzionatzen duen

Kubernetes jatorriz datuak prozesatzen dituzten baina ezer gordetzen ez duten estaturik gabeko aplikazioetarako diseinatu zen, adibidez, mikrozerbitzuak edo web aplikazioak. Datu-baseak espektroaren beste muturrean daude, hau da, egoera-aplikazioak dira. Eta Kubernetes ez zen jatorriz aplikazio horietarako pentsatuta.

Hala ere, azkenaldian Kubernetes-en agertu diren ezaugarriak daude datu-baseak eta beste egoera-aplikazio batzuk erabiltzeko aukera ematen dutenak:

  1. StatefulSet kontzeptua primitibo sorta oso bat da, poden lana geldiarazteko eta Graceful Shutdown (aplikazioaren ixtea aurreikus daitekeen) ezartzeko gertaerak prozesatzeko.
  2. Bolumen iraunkorrak podekin, Kubernetes kudeaketa-objektuekin lotutako datu-biltegiak dira.
  3. Operator Framework - hau da, nodo askotan banatutako datu-baseak eta beste egoera-aplikazio batzuk kudeatzeko osagaiak sortzeko gaitasuna.

Dagoeneko gaur egun hodei publikoetan Datu-base handiak daude Zerbitzu gisa, eta horien atzealdea Kubernetes da, adibidez: CockroachCloud, InfluxDB, PlanetScale. Hau da, Kubernetes-en datu-base bat teorikoki posible den zerbait ez ezik, praktikan funtzionatzen duen zerbait ere bada.

Perconak kode irekiko bi irtenbide ditu Kubernetesentzat:

  1. MongoDB-rako Percona zerbitzarirako Kubernetes operadorea.
  2. Kubernetes Operator for XtraDB CLUSTER MySQL-rekin bateragarria den eta erabilgarritasun eta koherentzia handia eskaintzen duen zerbitzua da. Nodo bakarra ere erabil dezakezu erabilgarritasun handia behar ez bada, adibidez garatzaileen datu-base baterako.

Kubernetesen erabiltzaileak bi taldetan bana daitezke. Batzuek Kubernetes Operadoreak zuzenean erabiltzen dituzte; teknologiaren funtzionamendua ondo ulertzen duten erabiltzaile aurreratuak dira batez ere. Beste batzuek backend-ean exekutatzen dute - erabiltzaile horiek Datu-basea Zerbitzu gisa bezalako zerbait interesatzen zaie, ez dute Kubernetesen Γ±abarduratan sakondu nahi. Bigarren erabiltzaile taldearentzat, kode irekiko beste irtenbide bat dugu - Percona DBaaS CLI Tool. Hau irtenbide esperimentala da Kubernetesen oinarritutako kode irekiko DBaaS bat lortu nahi dutenentzat, teknologia sakonki ulertu gabe.

Nola exekutatu Percona-ren DBaaS Google Kubernetes Engine-n

Google Kubernetes Engine, nire ustez, Kubernetes teknologiaren inplementaziorik funtzionalenetako bat da. Munduko eskualde askotan dago eskuragarri eta Komando Lineako Tresna (SDK) sinple eta erosoa du, plataforma eskuz kudeatu beharrean script-ak sortzeko aukera ematen duena.

Gure DBaaS funtziona dezan, osagai hauek behar ditugu:

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

Instalatu kubectl

Zure sistema eragilerako paketea instalatzen dugu, Ubunturen adibidea ikusiko dugu. Xehetasun gehiago Hemen.

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

Google Cloud SDK instalatzen

Software paketea modu berean instalatzen dugu. Xehetasun gehiago Hemen.

# 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

Percona DBaaS CLI instalatzen

Instalatu Percona biltegietatik. Percona DBaaS CLI Tresna oraindik produktu esperimentala da, beraz, biltegi esperimentalean dago, eta hori bereiz gaitu behar da, nahiz eta dagoeneko Percona biltegiak instalatuta dituzun.

Gehiago Hemen.

Instalazio algoritmoa:

  1. Konfiguratu Percona biltegiak percona-release tresna erabiliz. Lehenik eta behin Percona-ren percona-release pakete ofiziala deskargatu eta instalatu behar duzu:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Gaitu tresna esperimentalaren biltegiaren osagaia honela:
    sudo percona-release enable tools experimental
    
  3. Instalatu percona-dbaas-cli paketea:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Osagaien funtzionamendua konfiguratzea

Ezarpenei buruzko informazio gehiago Hemen.

Lehenik eta behin, zure Google kontuan saioa hasi behar duzu. Gainera, Google Cloud-ek erabiltzaile batek proiektu independente asko izan ditzake, beraz, lan-proiektu bat zehaztu behar duzu proiektu honen kodea erabiliz:

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

Ondoren, kluster bat sortuko dugu. Demorako, hiru nodo baino ez dituen Kubernetes kluster bat sortu nuen - hau da erabilgarritasun handiko behar den gutxienekoa:

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

Kubectl komando honek nahi diren pribilegioak ematen dizkio gure egungo erabiltzaileari:

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

Ondoren, izen-espazio bat sortu eta aktibo bihurtzen dugu. Namespace, gutxi gorabehera, proiektu edo ingurune bat bezalakoa da, baina dagoeneko Kubernetes kluster baten barruan dago. Google Cloud proiektuetatik independentea da:

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

Klusterra abiaraztea

Urrats hauek igaro ondoren, hiru nodoko kluster bat abiarazi dezakegu komando sinple honekin:

# 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

Nola konektatu kluster batera

Lehenespenez, Kubernetesen barruan bakarrik dago erabilgarri. Hau da, "Sortu" komandoa exekutatu duzun zerbitzari honetatik ez dago eskuragarri. Eskuragarri izan dadin, adibidez, bezero batekin probak egiteko, portua birbidali behar duzu Port Mapping bidez:

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

Ondoren, zure MySQL bezeroa konektatzen dugu:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Kluster kudeaketarako komando aurreratuak

IP publikoari buruzko datu-basea

Klusterren erabilgarritasunerako irtenbide iraunkorragoa nahi baduzu, kanpoko IP helbide bat lor dezakezu. Kasu honetan, datu-basea edozein lekutatik eskuragarri egongo da. Hau ez da hain segurua, baina askotan erosoagoa da. Kanpoko IPrako komando hau erabiltzen dugu:

# 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

Ezarri pasahitza esplizituki

Sistemak ausaz pasahitza sortu beharrean, pasahitza esplizituki ezar dezakezu:

# 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

Scripten irteera gizakiak irakurtzeko moduko formatuan erakusten ari naiz, baina JSON formatua ere onartzen da.

Disponibilitate handia desaktibatzen

Komando honekin erabilgarritasun handia desgai dezakezu nodo bakarra zabaltzeko:

# 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

MySQL ahalik eta azkarren eta errazen martxan jartzeko zereginak probatzeko irtenbide bat da, probatu eta gero itzali edo garapenerako erabiltzeko.

Percona DBaaS CLI tresnak Kubernetesen DBaaS moduko irtenbide bat lortzen laguntzen dizu. Aldi berean, bere funtzionaltasuna eta erabilgarritasuna lantzen jarraitzen dugu.

Txosten hau lehen aldiz aurkeztu zen @Databases Meetup Mail.ru Cloud Solutions&Tarantool-en eskutik. Begira video beste emanaldi batzuk eta harpidetu Telegram-en ekitaldien iragarpenetara Kubernetes inguruan Mail.ru Taldean.

Zer gehiago irakurri gaiari buruz:

  1. Datu-baseak IIoT plataforma moderno batean.
  2. Nola aukeratu proiektu baterako datu-base bat berriro aukeratu beharrik ez izateko.

Iturria: www.habr.com

Gehitu iruzkin berria