Kā izveidot hibrīda mākoni, izmantojot Kubernetes, kas var aizstāt DBaaS

Mani sauc Petrs Zaicevs, es esmu izpilddirektors, dibinātājs Perkona un es gribu jums pateikt:

  • kā mēs nonācām no atvērtā pirmkoda risinājumiem lÄ«dz datu bāzei kā pakalpojumam;
  • kādas pieejas pastāv datu bāzu izvietoÅ”anai mākonÄ«;
  • kā Kubernetes var aizstāt DBaaS, novērÅ”ot atkarÄ«bu no pārdevēja un saglabājot DBVS kā pakalpojuma vienkārŔību.

Raksts tika sagatavots, pamatojoties uz Mail.ru Cloud Solutions & Tarantool ziņojumu vietnē @Databases Meetup. Ja nevēlies lasīt, vari noskatīties:


Kā mēs no atvērtā pirmkoda nonācām līdz datu bāzei kā pakalpojumam mākonī

Es strādāju atvērtā pirmkoda sistēmā kopÅ” 90. gadu beigām. Pirms divdesmit gadiem atvērtā koda, piemēram, datu bāzes, izmantoÅ”ana nebija tik vienkārÅ”a. Bija jālejupielādē avota kods, jāpielāgo, jāapkopo un tikai tad jāizmanto.

Pēc tam atvērtā koda tika veikta virkne vienkārÅ”ojumu:

  • Tar.gz un INSTALL avoti, kas bija jāapkopo;
  • pakotnes ar atkarÄ«bām, piemēram, .deb un .rpm, kur jums ir jāinstalē tikai pakotņu kopa;
  • pakeÅ”u krātuves, piemēram, APT un YUM, ar kurām instalÄ“Å”ana notiek automātiski;
  • risinājumi, piemēram, Docker un Snap, kas ļauj saņemt pakotnes, instalējot bez ārējām atkarÄ«bām.

Rezultātā kļūst vieglāk izmantot atvērtā pirmkoda programmatÅ«ru, kā arÄ« samazinās ŔķērŔļi ienākÅ”anai Ŕādu lietojumprogrammu izstrādē.

Tajā paŔā laikā, atŔķirībā no situācijas pirms 20 gadiem, kad visi bija montāžas eksperti, tagad lielākā daļa izstrādātāju nevar izveidot izmantotos rīkus no pirmavota.

Patiesībā tas nav slikti, jo:

  1. Mēs varam izmantot sarežģītāku, bet lietotājam draudzīgāku programmatūru. Piemēram, pārlūkprogramma ir ērti lietojama, taču tajā ir iekļauti daudzi atvērtā pirmkoda komponenti, un to ir neērti izveidot no nulles.
  2. Vairāk cilvēku var kļūt par atvērtā pirmkoda un citas programmatÅ«ras izstrādātājiem, uzņēmumi izmanto vairāk programmatÅ«ras, un nepiecieÅ”amÄ«ba pēc tās ir lielāka.

NegatÄ«vā puse ir tāda, ka nākamais vienkārÅ”oÅ”anas solis ir saistÄ«ts ar mākoņrisinājumu izmantoÅ”anu, un tas noved pie noteikta pārdevēja bloÄ·Ä“Å”anas, tas ir, piesaistes vienam piegādātājam. Mēs izmantojam vienkārÅ”us risinājumus, un pakalpojumu sniedzēji izmanto atvērtā pirmkoda komponentus, taču patiesÄ«bā tie ir pienagloti vienā no lielajiem mākoņiem. Tas nozÄ«mē, ka vienkārŔākais un ātrākais atvērtā koda (un ar to saderÄ«gas programmatÅ«ras) izvietoÅ”anas veids ir mākoņos, izmantojot patentētu API.

Runājot par datu bāzēm mākonī, ir divas pieejas:

  1. Salieciet datu bāzes infrastruktÅ«ru, tāpat kā parastajā datu centrā. Tas ir, ņemiet standarta veidoÅ”anas blokus: aprēķinu, krātuvi un tā tālāk, instalējiet uz tiem Linux un datubāzi un konfigurējiet tos.
  2. Izmantojiet datu bāzi kā pakalpojumu, kur pakalpojumu sniedzējs piedāvā gatavu datu bāzi mākonī.

DBaaS Å”obrÄ«d ir strauji augoÅ”s tirgus, jo tas ļauj izstrādātājiem strādāt tieÅ”i ar datu bāzēm un samazina ikdienas darbu. Pakalpojumu sniedzējs apņemas nodroÅ”ināt augstu pieejamÄ«bu un vieglu mērogoÅ”anu, datu bāzes ielāpu, dublÄ“Å”anu un veiktspējas regulÄ“Å”anu.

Divu veidu datu bāze kā pakalpojums, kura pamatā ir atvērtais avots, un alternatīva Kubernetes formā

Ir divu veidu datu bāze kā pakalpojums atvērtām datu bāzēm:

  1. Standarta atvērtā pirmkoda produkts, kas iepakots administrācijas aizmugursistēmā, lai to varētu viegli izvietot un pārvaldīt.
  2. Uzlabots komerciāls risinājums ar dažādiem papildinājumiem, kas ir savietojams ar atvērto avotu.

Abas iespējas samazina migrācijas iespēju starp mākoņiem un samazina datu un lietojumprogrammu pārnesamÄ«bu. Piemēram, neskatoties uz to, ka dažāda veida mākoņi pamatā atbalsta vienu un to paÅ”u standarta MySQL, starp tiem ir bÅ«tiskas atŔķirÄ«bas: darbÄ«bā, veiktspējā, dublējumkopijā utt. MigrÄ“Å”ana no viena mākoņa uz citu var bÅ«t sarežģīta, jo Ä«paÅ”i sarežģītās lietojumprogrammās.

Un te rodas jautājums ā€“ vai ir iespējams iegÅ«t Database ērtÄ«bas kā pakalpojumu, bet kā vienkārÅ”u atvērtā koda risinājumu?

Sliktā ziņa ir tā, ka diemžēl tirgÅ« vēl nav tādu risinājumu. Labā ziņa ir tāda, ka ir Kubernetes, kas ļauj ieviest Ŕādus risinājumus.

Kubernetes ir mākoņa vai datu centra operētājsistēma, kas ļauj izvietot un pārvaldīt lietojumprogrammu vairākos serveros klasterī, nevis vienā resursdatorā.

Tagad Kubernetes ir lÄ«deris Ŕādas programmatÅ«ras kategorijā. Šādām problēmām bija daudz dažādu risinājumu, taču tas kļuva par standartu. Daudzi uzņēmumi, kas agrāk koncentrējās uz alternatÄ«viem risinājumiem, tagad koncentrējas uz savu produktu pielāgoÅ”anu Kubernetes atbalstam.

Turklāt Kubernetes ir universāls risinājums, kas tiek atbalstīts daudzu piegādātāju privātajos, publiskajos un hibrīdos mākoņos, piemēram: AWS, Google Cloud, Microsoft Azure, Mail.ru mākoņa risinājumi.

Kā Kubernetes darbojas ar datu bāzēm

Kubernetes sākotnēji tika izstrādāts bezvalsts lietojumprogrammām, kas apstrādā datus, bet neko neuzglabā, piemēram, mikropakalpojumiem vai tÄ«mekļa lietojumprogrammām. Datu bāzes atrodas spektra otrā galā, tas ir, tās ir statusa lietojumprogrammas. Un Kubernetes sākotnēji nebija paredzēts Ŕādiem lietojumiem.

Tomēr ir funkcijas, kas nesen parādījās Kubernetes, kas ļauj izmantot datu bāzes un citas statusa lietojumprogrammas:

  1. StatefulSet koncepcija ir vesela virkne primitÄ«vu notikumu apstrādei, lai apturētu podziņu darbÄ«bu un ieviestu Graceful Shutdown (paredzama lietojumprogrammas izslēgÅ”ana).
  2. Pastāvīgie sējumi ir datu krātuves, kas ir saistītas ar podiem, Kubernetes pārvaldības objektiem.
  3. Operator Framework - tas ir, iespēja izveidot komponentus datu bāzu un citu statusu lietojumprogrammu pārvaldībai, kas izplatītas daudzos mezglos.

Jau Å”obrÄ«d publiskajos mākoņos ir lielas Databases as a Service, kuru aizmugure ir Kubernetes, piemēram: CockroachCloud, InfluxDB, PlanetScale. Tas nozÄ«mē, ka Kubernetes datubāze ir ne tikai teorētiski iespējama, bet arÄ« praktiski darbÄ«ba.

Percona ir divi Kubernetes atvērtā pirmkoda risinājumi:

  1. Kubernetes operators Percona serverim MongoDB.
  2. Kubernetes Operator for XtraDB CLUSTER ir pakalpojums, kas ir saderÄ«gs ar MySQL un nodroÅ”ina augstu pieejamÄ«bu un konsekvenci. Varat arÄ« izmantot vienu mezglu, ja nav nepiecieÅ”ama augsta pieejamÄ«ba, piemēram, izstrādātāju datu bāzei.

Kubernetes lietotājus var iedalÄ«t divās grupās. Daži cilvēki Kubernetes operatorus izmanto tieÅ”i ā€” tie galvenokārt ir pieredzējuÅ”i lietotāji, kuriem ir laba izpratne par Ŕīs tehnoloÄ£ijas darbÄ«bu. Citi to palaiž aizmugursistēmā - Ŕādus lietotājus interesē kaut kas lÄ«dzÄ«gs Database as a Service, viņi nevēlas iedziļināties Kubernetes niansēs. Otrajai lietotāju grupai mums ir vēl viens atvērtā pirmkoda risinājums - Percona DBaaS CLI Tool. Å is ir eksperimentāls risinājums tiem, kas vēlas iegÅ«t atvērtā pirmkoda DBaaS, kura pamatā ir Kubernetes, bez dziļas izpratnes par tehnoloÄ£iju.

Kā palaist Percona DBaaS pakalpojumā Google Kubernetes Engine

Google Kubernetes Engine, manuprāt, ir viena no funkcionālākajām Kubernetes tehnoloÄ£ijas ievieÅ”anām. Tas ir pieejams daudzos pasaules reÄ£ionos, un tam ir vienkārÅ”s un ērts komandrindas rÄ«ks (SDK), kas ļauj izveidot skriptus, nevis manuāli pārvaldÄ«t platformu.

Lai mūsu DBaaS darbotos, mums ir nepiecieŔami Ŕādi komponenti:

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

Instalējiet kubectl

Mēs instalējam pakotni jÅ«su operētājsistēmai, apskatÄ«sim Ubuntu piemēru. SkatÄ«t vairāk Å”eit.

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 instalēŔana

Mēs instalējam programmatÅ«ras pakotni tādā paŔā veidā. SkatÄ«t vairāk Å”eit.

# 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 instalēŔana

Instalējiet no Percona krātuvēm. Percona DBaaS CLI rÄ«ks joprojām ir eksperimentāls produkts, tāpēc tas atrodas eksperimentālajā repozitorijā, kas ir jāiespējo atseviŔķi, pat ja jums jau ir instalēti Percona repozitoriji.

vairāk Ŕeit.

Instalācijas algoritms:

  1. Iestatiet Percona repozitorijus, izmantojot Percona izlaiÅ”anas rÄ«ku. Vispirms jums ir jālejupielādē un jāinstalē oficiālā Percona izlaiduma pakotne:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Iespējojiet eksperimentālā rÄ«ka repozitorija komponentu Ŕādi:
    sudo percona-release enable tools experimental
    
  3. Instalējiet pakotni percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Komponentu darbības iestatīŔana

Vairāk par iestatījumiem Ŕeit.

Vispirms jums jāpiesakās savā Google kontā. Turklāt Google Cloud ļauj vienam lietotājam izmantot vairākus neatkarÄ«gus projektus, tāpēc jums ir jānorāda darba projekts, izmantojot Ŕī projekta kodu:

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

Tālāk mēs izveidojam kopu. Demonstrācijai es izveidoju Kubernetes klasteru, kurā ir tikai trÄ«s mezgli - tas ir minimums, kas nepiecieÅ”ams augstai pieejamÄ«bai:

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

Å Ä« kubectl komanda mÅ«su paÅ”reizējam lietotājam pieŔķir vajadzÄ«gās privilēģijas:

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

Pēc tam mēs izveidojam nosaukumvietu un aktivizējam to. Vārdtelpa, rupji runājot, ir arÄ« kā projekts vai vide, bet jau ir Kubernetes klastera iekÅ”pusē. Tas ir neatkarÄ«gs no Google Cloud projektiem:

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

Klastera palaiŔana

Kad esam veikuÅ”i Ŕīs dažas darbÄ«bas, mēs varam sākt trÄ«s mezglu kopu ar Å”o vienkārÅ”o komandu:

# 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

Kā izveidot savienojumu ar kopu

Pēc noklusējuma tas ir pieejams tikai iekŔā Kubernetes. Tas ir, tas nav pieejams no Ŕī servera, no kura palaidāt komandu ā€œIzveidotā€. Lai tas bÅ«tu pieejams, piemēram, testiem ar klientu, jums ir jāpārsÅ«ta ports, izmantojot Port Mapping:

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

Pēc tam mēs savienojam jūsu MySQL klientu:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Uzlabotas klasteru pārvaldības komandas

Datu bāze par publisko IP

Ja vēlaties pastāvÄ«gāku risinājumu klasteru pieejamÄ«bai, varat iegÅ«t ārēju IP adresi. Å ajā gadÄ«jumā datu bāze bÅ«s pieejama no jebkuras vietas. Tas ir mazāk droÅ”i, bet bieži vien ērtāk. Ārējam IP mēs izmantojam Ŕādu komandu:

# 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

Skaidri iestatiet paroli

Tā vietā, lai sistēma nejauÅ”i Ä£enerētu paroli, varat to iestatÄ«t tieÅ”i:

# 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

Es parādu skriptu izvadi cilvēkiem lasāmā formātā, taču tiek atbalstīts arī JSON formāts.

Augstas pieejamÄ«bas izslēgÅ”ana

Izmantojot Å”o komandu, varat atspējot augstu pieejamÄ«bu, lai izvietotu vienu mezglu:

# 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

Å is ir risinājums testÄ“Å”anas uzdevumiem, lai pēc iespējas ātrāk un vienkārŔāk sāktu MySQL darbÄ«bu, pārbaudÄ«tu to un pēc tam izslēgtu vai izmantotu izstrādei.

Percona DBaaS CLI rÄ«ks palÄ«dz sasniegt DBaaS lÄ«dzÄ«gu risinājumu vietnē Kubernetes. Tajā paŔā laikā mēs turpinām strādāt pie tā funkcionalitātes un lietojamÄ«bas.

Šis ziņojums pirmo reizi tika prezentēts plkst @Databases Meetup Mail.ru Cloud Solutions&Tarantool. Skaties Video citas izrādes un abonējiet notikumu paziņojumus Telegram Ap Kubernetes Mail.ru grupā.

Ko vēl lasīt par tēmu:

  1. Datu bāzes modernā IIoT platformā.
  2. Kā izvēlēties datu bāzi projektam, lai jums nebūtu jāizvēlas vēlreiz.

Avots: www.habr.com

Pievieno komentāru