Kuidas luua hübriidpilve Kubernetese abil, mis võib asendada DBaaS-i

Minu nimi on Petr Zaitsev, ma olen tegevjuht, asutaja percona ja ma tahan teile öelda:

  • kuidas jõudsime avatud lähtekoodiga lahendustest andmebaasi kui teenuseni;
  • millised lähenemisviisid on olemas andmebaaside pilves juurutamiseks;
  • kuidas Kubernetes saab asendada DBaaS-i, kõrvaldades müüjast sõltuvuse ja säilitades DBMS-i kui teenuse lihtsuse.

Artikkel koostati Mail.ru Cloud Solutions & Tarantooli @Databases Meetup aruande põhjal. Kui sa lugeda ei taha, saad vaadata:


Kuidas jõudsime avatud lähtekoodist andmebaasi pilveteenusena

Olen avatud lähtekoodiga töötanud alates 90ndate lõpust. Kakskümmend aastat tagasi ei olnud avatud lähtekoodiga, näiteks andmebaaside, kasutamine nii lihtne. Tuli alla laadida lähtekood, lappida, kompileerida ja alles siis kasutada.

Seejärel tegi avatud lähtekoodiga mitmeid lihtsustusi:

  • Tar.gz ja INSTALL allikad, mis vajasid kompileerimist;
  • sõltuvustega paketid, nagu .deb ja .rpm, kus peate installima ainult pakettide komplekti;
  • pakettide hoidlad nagu APT ja YUM, millega installimine on automaatne;
  • lahendused nagu Docker ja Snap, mis võimaldavad pakette vastu võtta installimise teel ilma väliste sõltuvusteta.

Tänu sellele muutub avatud lähtekoodiga tarkvara kasutamine lihtsamaks ja alandab ka barjääri selliste rakenduste arendamisel.

Samas, erinevalt 20 aasta tagusest olukorrast, mil kõik olid montaažieksperdid, ei saa enamik arendajaid praegu kasutatavaid tööriistu allikast ehitada.

Tegelikult pole see halb, sest:

  1. Saame kasutada keerukamat, kuid kasutajasõbralikumat tarkvara. Näiteks brauserit on mugav kasutada, kuid see sisaldab palju avatud lähtekoodiga komponente ja seda on ebamugav nullist üles ehitada.
  2. Avatud lähtekoodiga ja muu tarkvara arendajaks võib hakata rohkem inimesi, ettevõtted kasutavad rohkem tarkvara ja vajadus selle järele on suurem.

Negatiivne külg on see, et lihtsustamise järgmine samm on seotud pilvelahenduste kasutamisega ja see toob kaasa teatud hankija lukustuse ehk sidumise ühe tarnijaga. Meie kasutame lihtsaid lahendusi ja pakkujad kasutavad avatud lähtekoodiga komponente, kuid tegelikult on need naelutatud ühe suure pilve külge. See tähendab, et kõige lihtsam ja kiireim viis avatud lähtekoodiga (ja sellega ühilduva tarkvara) juurutamiseks on pilvedes, kasutades patenteeritud API-d.

Pilve andmebaaside puhul on kaks lähenemisviisi.

  1. Pange andmebaasi infrastruktuur kokku nagu tavalises andmekeskuses. See tähendab, et võtke standardsed ehitusplokid: arvutage, salvestage ja nii edasi, installige neile Linux ja andmebaas ning konfigureerige need.
  2. Kasutage andmebaasi teenusena, kus pakkuja pakub pilve sees valmis andmebaasi.

DBaaS on praegu kiiresti kasvav turg, kuna see võimaldab arendajatel töötada otse andmebaasidega ja minimeerib rutiinset tööd. Pakkuja kohustub tagama kõrge kättesaadavuse ja hõlpsa skaleerimise, andmebaasi parandamise, varukoopiate tegemise ja jõudluse häälestamise.

Kahte tüüpi andmebaas kui teenus, mis põhineb avatud lähtekoodil ja alternatiiviks Kubernetese kujul

Avatud andmebaaside jaoks on kahte tüüpi andmebaasi teenusena:

  1. Standardne avatud lähtekoodiga toode, mis on pakitud haldustaustaprogrammi lihtsaks juurutamiseks ja haldamiseks.
  2. Täiustatud kommertslahendus erinevate lisandmoodulitega, mis ühildub avatud lähtekoodiga.

Mõlemad variandid vähendavad pilvede vahelise migratsiooni võimalust ning vähendavad andmete ja rakenduste teisaldatavust. Näiteks hoolimata sellest, et erinevat tüüpi pilved toetavad sisuliselt sama standardset MySQL-i, on nende vahel olulisi erinevusi: töös, jõudluses, varundamises jne. Ühest pilvest teise migreerumine võib olla keeruline, eriti keeruliste rakenduste puhul.

Ja siin tekib küsimus - kas andmebaasi mugavust on võimalik saada teenusena, kuid lihtsa avatud lähtekoodiga lahendusena?

Halb uudis on see, et kahjuks selliseid lahendusi turul veel ei ole. Hea uudis on see, et on olemas Kubernetes, mis võimaldab selliseid lahendusi rakendada.

Kubernetes on pilve- või andmekeskuse operatsioonisüsteem, mis võimaldab teil juurutada ja hallata rakendust mitmes klastris asuvas serveris, mitte ühes hostis.

Nüüd on Kubernetes sellise tarkvara kategoorias liider. Sellistele probleemidele oli palju erinevaid lahendusi, kuid sellest sai standard. Paljud ettevõtted, kes varem keskendusid alternatiivsetele lahendustele, keskenduvad nüüd oma toodete kohandamisele Kubernetese toega.

Lisaks on Kubernetes universaalne lahendus, mida toetavad paljude tarnijate privaatsed, avalikud ja hübriidpilved, näiteks: AWS, Google Cloud, Microsoft Azure, Mail.ru pilvelahendused.

Kuidas Kubernetes andmebaasidega töötab

Kubernetes loodi algselt olekuta rakenduste jaoks, mis töötlevad andmeid, kuid ei salvesta midagi (nt mikroteenused või veebirakendused). Andmebaasid asuvad spektri teises otsas, see tähendab, et need on olekupõhised rakendused. Ja Kubernetes polnud algselt sellisteks rakendusteks mõeldud.

Siiski on Kubernetes hiljuti ilmunud funktsioone, mis võimaldavad kasutada andmebaase ja muid olekuga rakendusi:

  1. StatefulSeti kontseptsioon on terve rida primitiive sündmuste töötlemiseks, mis puudutavad kaunade töö peatamist ja Graceful Shutdowni (rakenduse prognoositav sulgemine) rakendamist.
  2. Püsivad köited on andmesalved, mis on seotud kaunadega, Kubernetese haldusobjektidega.
  3. Operaator Framework – see tähendab võimalus luua komponente paljude sõlmede vahel jaotatud andmebaaside ja muude olekupõhiste rakenduste haldamiseks.

Juba praegu on avalikes pilvedes suured andmebaasid teenusena, mille taustaks on Kubernetes, näiteks: CockroachCloud, InfluxDB, PlanetScale. See tähendab, et Kubernetese andmebaas pole mitte ainult midagi, mis on teoreetiliselt võimalik, vaid ka midagi, mis töötab praktikas.

Perconal on Kubernetese jaoks kaks avatud lähtekoodiga lahendust:

  1. Kubernetese operaator Percona serveri jaoks MongoDB jaoks.
  2. Kubernetes Operator for XtraDB CLUSTER on teenus, mis ühildub MySQL-iga ning pakub kõrget kättesaadavust ja järjepidevust. Võite kasutada ka ühte sõlme, kui kõrget saadavust pole vaja, näiteks arendaja andmebaasi jaoks.

Kubernetese kasutajad võib jagada kahte rühma. Mõned inimesed kasutavad Kubernetes Operatoreid otse – need on peamiselt edasijõudnud kasutajad, kellel on tehnoloogia toimimisest hea arusaam. Teised käitavad seda taustaprogrammis – selliseid kasutajaid huvitab selline asi nagu Database as a Service, nad ei taha Kubernetese nüanssidesse süveneda. Teise kasutajarühma jaoks on meil veel üks avatud lähtekoodiga lahendus – Percona DBaaS CLI Tool. See on eksperimentaalne lahendus neile, kes soovivad saada Kubernetesil põhinevat avatud lähtekoodiga DBaaS-i, ilma tehnoloogiast sügavalt aru saamata.

Kuidas käivitada Percona DBaaS Google Kubernetes Engine'is

Google Kubernetes Engine on minu arvates üks Kubernetese tehnoloogia kõige funktsionaalsemaid rakendusi. See on saadaval paljudes maailma piirkondades ning sellel on lihtne ja mugav käsureatööriist (SDK), mis võimaldab platvormi käsitsi haldamise asemel luua skripte.

Meie DBaaS toimimiseks vajame järgmisi komponente:

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

Installige kubectl

Paigaldame teie operatsioonisüsteemi paketi, vaatame Ubuntu näidet. Rohkem detaile siin.

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 installimine

Tarkvarapaketi installime samamoodi. Rohkem detaile siin.

# 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 installimine

Installige Percona hoidlatest. Percona DBaaS CLI Tool on endiselt eksperimentaalne toode, seega asub see eksperimentaalses hoidlas, mis tuleb eraldi lubada, isegi kui teil on Percona hoidlad juba installitud.

Rohkem siin.

Paigaldusalgoritm:

  1. Seadistage Percona hoidlad, kasutades Percona-release tööriista. Kõigepealt peate Perconast alla laadima ja installima ametliku Percona-release paketi:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Lubage eksperimentaalse tööriista hoidla komponent järgmiselt.
    sudo percona-release enable tools experimental
    
  3. Installige pakett percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Komponentide töö seadistamine

Lisateavet seadete kohta siin.

Kõigepealt peate oma Google'i kontole sisse logima. Lisaks võimaldab Google Cloud ühel kasutajal olla palju sõltumatuid projekte, seega peate määrama tööprojekti, kasutades selle projekti koodi:

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

Järgmisena loome klastri. Demo jaoks lõin ainult kolmest sõlmest koosneva Kubernetese klastri - see on kõrge kättesaadavuse jaoks vajalik miinimum:

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

Järgmine kubectli käsk annab meie praegusele kasutajale soovitud õigused:

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

Seejärel loome nimeruumi ja muudame selle aktiivseks. Nimeruum on jämedalt öeldes samuti nagu projekt või keskkond, kuid juba Kubernetese klastri sees. See on sõltumatu Google'i pilveprojektidest:

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

Klastri käivitamine

Kui oleme need mõned sammud läbi teinud, saame käivitada kolme sõlmega klastri selle lihtsa käsuga:

# 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

Klastriga ühenduse loomine

Vaikimisi on see saadaval ainult Kubernetese sees. See tähendab, et see pole juurdepääsetav sellest serverist, kust käivitasite käsu "Loo". Selle kättesaadavaks tegemiseks näiteks kliendiga testimiseks peate pordi edastama Port Mappingu kaudu:

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

Seejärel ühendame teie MySQL-i kliendi:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Täpsemad klastrihalduskäsud

Andmebaas avaliku IP kohta

Kui soovite klastri kättesaadavuse jaoks püsivamat lahendust, võite hankida välise IP-aadressi. Sellisel juhul on andmebaasi juurdepääs kõikjalt. See on vähem turvaline, kuid sageli mugavam. Välise IP jaoks kasutame järgmist käsku:

# 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

Määrake parool selgesõnaliselt

Selle asemel, et süsteem juhuslikult parooli genereeriks, saate parooli selgesõnaliselt määrata:

# 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

Näitan skriptide väljundit inimesele loetavas vormingus, kuid toetatakse ka JSON-vormingut.

Kõrge kättesaadavuse väljalülitamine

Järgmise käsuga saate ühe sõlme juurutamiseks kõrge kättesaadavuse keelata:

# 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

See on lahendus testimisülesannete jaoks, et MySQL võimalikult kiiresti ja lihtsalt tööle panna, seda testida ja seejärel sulgeda või arendamiseks kasutada.

Percona DBaaS CLI tööriist aitab teil Kubernetesis saavutada DBaaS-i sarnase lahenduse. Samal ajal jätkame tööd selle funktsionaalsuse ja kasutatavuse kallal.

Seda aruannet esitleti esmakordselt kl @Databases Meetup Mail.ru Cloud Solutions&Tarantool. Vaata video teisi esinemisi ja tellige Telegramis sündmuste teated Kubernetese ümbrus Mail.ru grupis.

Mida veel selle teema kohta lugeda:

  1. Andmebaasid kaasaegses IIoT platvormis.
  2. Kuidas valida projekti jaoks andmebaasi, et te ei peaks uuesti valima.

Allikas: www.habr.com

Lisa kommentaar