Si të ndërtoni një re hibride duke përdorur Kubernetes që mund të zëvendësojë DBaaS

Emri im është Petr Zaitsev, unë jam CEO, themeluesi Perkona dhe dua t'ju them:

  • si erdhëm nga zgjidhjet me burim të hapur në bazën e të dhënave si shërbim;
  • çfarë qasjesh ekzistojnë për vendosjen e bazave të të dhënave në cloud;
  • si Kubernetes mund të zëvendësojë DBaaS, duke eliminuar varësinë nga shitësi dhe duke ruajtur thjeshtësinë e DBMS si shërbim.

Artikulli u përgatit bazuar në një raport në @Databases Meetup nga Mail.ru Cloud Solutions & Tarantool. Nëse nuk doni të lexoni, mund të shikoni:


Si erdhëm nga burimi i hapur në bazën e të dhënave si shërbim në re

Unë kam punuar në burim të hapur që nga fundi i viteve '90. Njëzet vjet më parë, përdorimi i burimit të hapur, siç janë bazat e të dhënave, nuk ishte aq i lehtë. Ishte e nevojshme të shkarkoni kodin burimor, ta rregulloni atë, ta përpiloni dhe vetëm atëherë ta përdorni.

Burimi i hapur më pas kaloi nëpër një sërë thjeshtimesh:

  • Tar.gz dhe INSTALL burimet që duheshin përpiluar;
  • paketa me varësi si .deb dhe .rpm, ku ju duhet vetëm të instaloni një grup paketash;
  • depot e paketave si APT dhe YUM, me të cilat instalimi është automatik;
  • zgjidhje të tilla si Docker dhe Snap, të cilat ju lejojnë të merrni paketa me instalim pa varësi të jashtme.

Si rezultat, bëhet më e lehtë përdorimi i softuerit me burim të hapur dhe gjithashtu ul pengesat për hyrjen në zhvillimin e aplikacioneve të tilla.

Në të njëjtën kohë, ndryshe nga situata e 20 viteve më parë, kur të gjithë ishin ekspertë të montimit, tani shumica e zhvilluesve nuk mund të ndërtojnë mjetet që përdorin nga burimi.

Në fakt, kjo nuk është e keqe, sepse:

  1. Ne mund të përdorim softuer më kompleks, por më miqësor për përdoruesit. Për shembull, një shfletues është i përshtatshëm për t'u përdorur, por ai përfshin shumë komponentë me burim të hapur dhe është i papërshtatshëm për t'u ndërtuar nga e para.
  2. Më shumë njerëz mund të bëhen zhvillues të softuerit me burim të hapur dhe softuer të tjerë, më shumë softuer përdoret nga bizneset dhe nevoja për të është më e madhe.

E keqja është se hapi tjetër i thjeshtimit lidhet me përdorimin e zgjidhjeve cloud, dhe kjo çon në një bllokim të caktuar të shitësit, domethënë, lidhjen me një furnizues. Ne përdorim zgjidhje të thjeshta dhe ofruesit përdorin komponentë me burim të hapur, por në fakt ata janë gozhduar në një nga retë e mëdha. Kjo do të thotë, mënyra më e lehtë dhe më e shpejtë për të vendosur burim të hapur (dhe softuer të pajtueshëm me të) është në re, duke përdorur një API të pronarit.

Kur bëhet fjalë për bazat e të dhënave në cloud, ekzistojnë dy qasje:

  1. Mblidhni infrastrukturën e bazës së të dhënave, si në një qendër të rregullt të dhënash. Kjo do të thotë, merrni blloqet standarde të ndërtimit: llogaritni, ruajtjen dhe kështu me radhë, instaloni Linux dhe një bazë të dhënash mbi to dhe konfiguroni ato.
  2. Përdorni bazën e të dhënave si shërbim, ku ofruesi ofron një bazë të dhënash të gatshme brenda cloud.

DBaaS është një treg me rritje të shpejtë për momentin, sepse i lejon zhvilluesit të punojnë drejtpërdrejt me bazat e të dhënave dhe minimizon punën rutinë. Ofruesi merr përsipër të sigurojë disponueshmëri të lartë dhe shkallëzim të lehtë, rregullim të bazës së të dhënave, kopje rezervë dhe akordim të performancës.

Dy lloje të bazës së të dhënave si shërbim i bazuar në burim të hapur dhe një alternativë në formën e Kubernetes

Ekzistojnë dy lloje të bazës së të dhënave si shërbim për bazat e të dhënave të hapura:

  1. Një produkt standard me burim të hapur i paketuar në një bazë administrimi për vendosje dhe menaxhim të lehtë.
  2. Një zgjidhje e avancuar komerciale me shtesa të ndryshme, e pajtueshme me burim të hapur.

Të dy opsionet zvogëlojnë mundësinë e migrimit midis reve dhe reduktojnë transportueshmërinë e të dhënave dhe aplikacioneve. Për shembull, pavarësisht nga fakti se lloje të ndryshme të reve mbështesin në thelb të njëjtin standard MySQL, ka dallime të rëndësishme midis tyre: në funksionim, performancë, rezervë, etj. Migrimi nga një re në tjetrën mund të jetë sfiduese, veçanërisht për aplikacionet komplekse.

Dhe këtu lind pyetja - a është e mundur të përfitohet komoditeti i bazës së të dhënave si shërbim, por si një zgjidhje e thjeshtë me burim të hapur?

Lajmi i keq është se, për fat të keq, ende nuk ka zgjidhje të tilla në treg. Lajmi i mirë është se ekziston Kubernetes, i cili ju lejon të zbatoni zgjidhje të tilla.

Kubernetes është një sistem operativ për cloud ose qendrën e të dhënave që ju lejon të vendosni dhe menaxhoni një aplikacion në shumë serverë në një grup dhe jo në një host të vetëm.

Tani Kubernetes është lider në kategorinë e softuerëve të tillë. Kishte shumë zgjidhje të ndryshme për probleme të tilla, por u bë standardi. Shumë kompani që dikur fokusoheshin në zgjidhje alternative tani po fokusohen në përshtatjen e produkteve të tyre për të mbështetur Kubernetes.

Për më tepër, Kubernetes është një zgjidhje universale që mbështetet në retë private, publike dhe hibride të shumë shitësve, për shembull: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Si funksionon Kubernetes me bazat e të dhënave

Kubernetes fillimisht u krijua për aplikacione pa shtetësi që përpunojnë të dhëna, por nuk ruajnë asgjë, të tilla si mikroshërbimet ose aplikacionet në internet. Bazat e të dhënave janë në skajin tjetër të spektrit, domethënë ato janë aplikacione shtetërore. Dhe Kubernetes fillimisht nuk ishte menduar për aplikacione të tilla.

Sidoqoftë, ka veçori që janë shfaqur në Kubernetes kohët e fundit që lejojnë përdorimin e bazave të të dhënave dhe aplikacioneve të tjera shtetërore:

  1. Koncepti StatefulSet është një seri e tërë primitivësh për përpunimin e ngjarjeve në lidhje me ndalimin e punës së pods dhe zbatimin e Graceful Shutdown (fikje e parashikueshme e aplikacionit).
  2. Vëllimet e vazhdueshme janë depo të dhënash që lidhen me pods, objekte të menaxhimit të Kubernetes.
  3. Korniza e Operatorit - domethënë, aftësia për të krijuar komponentë për menaxhimin e bazave të të dhënave dhe aplikacioneve të tjera shtetërore të shpërndara nëpër shumë nyje.

Tashmë në retë publike ka baza të mëdha të të dhënave si shërbim, prapavija e të cilave është Kubernetes, për shembull: CockroachCloud, InfluxDB, PlanetScale. Kjo do të thotë, një bazë të dhënash në Kubernetes nuk është vetëm diçka që është teorikisht e mundur, por edhe diçka që funksionon në praktikë.

Percona ka dy zgjidhje me burim të hapur për Kubernetes:

  1. Operatori Kubernetes për Serverin Percona për MongoDB.
  2. Operatori Kubernetes për XtraDB CLUSTER është një shërbim që është i pajtueshëm me MySQL dhe ofron disponueshmëri dhe qëndrueshmëri të lartë. Ju gjithashtu mund të përdorni një nyje të vetme nëse nuk nevojitet disponueshmëri e lartë, për shembull për një bazë të dhënash dev.

Përdoruesit e Kubernetes mund të ndahen në dy grupe. Disa njerëz përdorin drejtpërdrejt Operatorët Kubernetes - këta janë kryesisht përdorues të avancuar që kanë një kuptim të mirë se si funksionon teknologjia. Të tjerët e drejtojnë atë në fund - përdorues të tillë janë të interesuar për diçka si Baza e të Dhënave si Shërbim, ata nuk duan të gërmojnë në nuancat e Kubernetes. Për grupin e dytë të përdoruesve, ne kemi një zgjidhje tjetër me burim të hapur - Percona DBaaS CLI Tool. Kjo është një zgjidhje eksperimentale për ata që duan të marrin një DBaaS me burim të hapur bazuar në Kubernetes pa një kuptim të thellë të teknologjisë.

Si të ekzekutoni DBaaS të Percona në Google Kubernetes Engine

Google Kubernetes Engine, për mendimin tim, është një nga implementimet më funksionale të teknologjisë Kubernetes. Ai është i disponueshëm në shumë rajone të botës dhe ka një mjet të thjeshtë dhe të përshtatshëm të linjës së komandës (SDK), i cili ju lejon të krijoni skripta në vend që të menaxhoni manualisht platformën.

Në mënyrë që DBaaS-i ynë të funksionojë, na duhen komponentët e mëposhtëm:

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

Instaloni kubectl

Ne instalojmë paketën për sistemin tuaj operativ, do të shikojmë shembullin e Ubuntu. Më shumë detaje këtu.

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

Instalimi i Google Cloud SDK

Ne instalojmë paketën e softuerit në të njëjtën mënyrë. Më shumë detaje këtu.

# 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

Instalimi i Percona DBaaS CLI

Instaloni nga depot e Percona. Vegla Percona DBaaS CLI është ende një produkt eksperimental, kështu që ndodhet në depon eksperimentale, i cili duhet të aktivizohet veçmas, edhe nëse i keni të instaluara tashmë depot e Percona.

më shumë këtu.

Algoritmi i instalimit:

  1. Vendosni depot e Percona duke përdorur veglën percona-release. Së pari ju duhet të shkarkoni dhe instaloni paketën zyrtare të lëshimit të percona nga Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Aktivizo komponentin e depove të veglave eksperimentale si më poshtë:
    sudo percona-release enable tools experimental
    
  3. Instaloni paketën percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Vendosja e funksionimit të komponentëve

Më shumë rreth cilësimeve këtu.

Së pari ju duhet të identifikoheni në llogarinë tuaj Google. Më tej, Google Cloud lejon një përdorues të ketë shumë projekte të pavarura, kështu që ju duhet të specifikoni një projekt pune duke përdorur kodin për këtë projekt:

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

Tjetra, ne krijojmë një grup. Për demonstrimin, unë krijova një grup Kubernetes me vetëm tre nyje - ky është minimumi i kërkuar për disponueshmëri të lartë:

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

Komanda e mëposhtme kubectl i jep privilegjet e dëshiruara përdoruesit tonë aktual:

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

Pastaj krijojmë një hapësirë ​​emri dhe e bëjmë atë aktive. Hapësira e emrave është, përafërsisht, si një projekt ose mjedis, por tashmë brenda një grupi Kubernetes. Është i pavarur nga projektet e Google Cloud:

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

Fillimi i grupit

Pasi të kemi kaluar nëpër këto disa hapa, mund të fillojmë një grup me tre nyje me këtë komandë të thjeshtë:

# 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

Si të lidheni me një grup

Si parazgjedhje, është i disponueshëm vetëm brenda Kubernetes. Kjo do të thotë, nuk është i aksesueshëm nga ky server nga i cili keni ekzekutuar komandën "Krijo". Për ta bërë atë të disponueshëm, për shembull, për teste me një klient, ju duhet ta përcillni portin përmes Hartës së Portit:

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

Pastaj ne lidhim klientin tuaj MySQL:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Komandat e avancuara të menaxhimit të grupimeve

Baza e të dhënave për IP publike

Nëse dëshironi një zgjidhje më të përhershme për disponueshmërinë e grupeve, mund të merrni një adresë IP të jashtme. Në këtë rast, baza e të dhënave do të jetë e aksesueshme nga kudo. Kjo është më pak e sigurt, por shpesh më e përshtatshme. Për IP të jashtëm ne përdorim komandën e mëposhtme:

# 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

Vendosni në mënyrë të qartë fjalëkalimin

Në vend që sistemi të gjenerojë rastësisht një fjalëkalim, ju mund ta vendosni fjalëkalimin në mënyrë eksplicite:

# 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

Unë po shfaq daljen e skripteve në format të lexueshëm nga njeriu, por formati JSON gjithashtu mbështetet.

Çaktivizimi i disponueshmërisë së lartë

Me komandën e mëposhtme mund të çaktivizoni disponueshmërinë e lartë për të vendosur një nyje të vetme:

# 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

Kjo është një zgjidhje për testimin e detyrave për të aktivizuar dhe funksionuar MySQL sa më shpejt dhe me lehtësi, ta testoni atë dhe më pas ta mbyllni ose ta përdorni për zhvillim.

Vegla Percona DBaaS CLI ju ndihmon të arrini një zgjidhje të ngjashme me DBaaS në Kubernetes. Në të njëjtën kohë, ne vazhdojmë të punojmë për funksionalitetin dhe përdorshmërinë e tij.

Ky raport u prezantua për herë të parë në @Takimi i bazave të të dhënave nga Mail.ru Cloud Solutions&Tarantool. Shikoni video shfaqje të tjera dhe abonohuni në njoftimet e ngjarjeve në Telegram Rreth Kubernetes në Mail.ru Group.

Çfarë tjetër për të lexuar në këtë temë:

  1. Bazat e të dhënave në një platformë moderne IIoT.
  2. Si të zgjidhni një bazë të dhënash për një projekt në mënyrë që të mos keni nevojë të zgjidhni përsëri.

Burimi: www.habr.com

Shto një koment