Ինչպես կառուցել հիբրիդային ամպ՝ օգտագործելով Kubernetes-ը, որը կարող է փոխարինել DBaaS-ին

Ես Պետր Զայցևն եմ, ես գլխավոր տնօրենն եմ, հիմնադիրը Պերկոնա և ես ուզում եմ ձեզ ասել.

  • ինչպես մենք բաց կոդով լուծումներից եկանք տվյալների բազա որպես ծառայություն;
  • ինչ մոտեցումներ կան ամպի մեջ տվյալների բազաների տեղակայման համար.
  • ինչպես Kubernetes-ը կարող է փոխարինել DBaaS-ը՝ վերացնելով վաճառողներից կախվածությունը և պահպանելով DBMS-ի պարզությունը որպես ծառայություն:

Հոդվածը պատրաստվել է @Databases Meetup-ում Mail.ru Cloud Solutions & Tarantool-ի զեկույցի հիման վրա: Եթե ​​չես ուզում կարդալ, կարող ես դիտել.


Ինչպես մենք բաց կոդից եկանք տվյալների բազա որպես ծառայություն ամպի մեջ

Ես աշխատում եմ բաց կոդով 90-ականների վերջից: Քսան տարի առաջ բաց կոդով, օրինակ՝ տվյալների բազաների օգտագործումն այնքան էլ հեշտ չէր: Պետք էր ներբեռնել սկզբնաղբյուրը, կարկատել, կոմպիլացնել ու հետո միայն օգտագործել։

Բաց կոդն այնուհետև անցավ մի շարք պարզեցումների.

  • Tar.gz և INSTALL աղբյուրներ, որոնք պետք է կազմվեին;
  • .deb և .rpm կախվածություն ունեցող փաթեթներ, որտեղ անհրաժեշտ է տեղադրել միայն փաթեթների մի շարք;
  • փաթեթների պահեստներ, ինչպիսիք են APT-ը և YUM-ը, որոնց հետ տեղադրումն ավտոմատ է.
  • լուծումներ, ինչպիսիք են Docker-ը և Snap-ը, որոնք թույլ են տալիս փաթեթներ ստանալ տեղադրմամբ՝ առանց արտաքին կախվածության:

Արդյունքում, ավելի հեշտ է դառնում բաց կոդով ծրագրաշարի օգտագործումը, ինչպես նաև նվազեցնում է նման հավելվածների մշակման մեջ մուտք գործելու խոչընդոտը:

Միևնույն ժամանակ, ի տարբերություն 20 տարի առաջ ստեղծված իրավիճակի, երբ բոլորը հավաքման փորձագետներ էին, այժմ ծրագրավորողների մեծ մասը չի կարող ստեղծել իրենց օգտագործած գործիքները աղբյուրից:

Իրականում սա վատ չէ, քանի որ.

  1. Մենք կարող ենք օգտագործել ավելի բարդ, բայց ավելի հարմար ծրագրակազմ: Օրինակ, զննարկիչը հարմար է օգտագործման համար, բայց այն ներառում է բազմաթիվ բաց կոդով բաղադրիչներ և անհարմար է զրոյից կառուցել:
  2. Ավելի շատ մարդիկ կարող են դառնալ բաց կոդով և այլ ծրագրային ապահովման մշակողներ, ավելի շատ ծրագրային ապահովում են օգտագործում բիզնեսները, և դրա կարիքն ավելի մեծ է:

Բացասական կողմն այն է, որ պարզեցման հաջորդ քայլը կապված է ամպային լուծումների օգտագործման հետ, և դա հանգեցնում է որոշակի վաճառողի կողպման, այսինքն՝ պարտավորեցնելով մեկ մատակարարին: Մենք օգտագործում ենք պարզ լուծումներ, իսկ մատակարարներն օգտագործում են բաց կոդով բաղադրիչներ, բայց իրականում դրանք գամված են մեծ ամպերից մեկին: Այսինքն՝ բաց կոդով (և դրա հետ համատեղելի ծրագրակազմը) տեղակայելու ամենահեշտ և ամենաարագ ճանապարհը ամպերում է՝ օգտագործելով սեփական API:

Երբ խոսքը վերաբերում է ամպի տվյալների բազաներին, երկու մոտեցում կա.

  1. Հավաքեք տվյալների բազայի ենթակառուցվածքը, ինչպես սովորական տվյալների կենտրոնում: Այսինքն՝ վերցրեք ստանդարտ շինարարական բլոկներ՝ հաշվարկ, պահեստավորում և այլն, տեղադրեք Linux և տվյալների բազա դրանց վրա և կարգավորեք դրանք:
  2. Օգտագործեք տվյալների բազան որպես ծառայություն, որտեղ մատակարարն առաջարկում է պատրաստի տվյալների բազա ամպի ներսում:

DBaaS-ն այժմ արագ աճող շուկա է, քանի որ այն թույլ է տալիս մշակողներին ուղղակիորեն աշխատել տվյալների բազաների հետ և նվազագույնի է հասցնում սովորական աշխատանքը: Մատակարարը պարտավորվում է ապահովել բարձր հասանելիություն և հեշտ մասշտաբավորում, տվյալների բազայի կարկատում, կրկնօրինակում և կատարողականի կարգավորում:

Երկու տեսակի Տվյալների բազա՝ որպես ծառայություն, որը հիմնված է բաց կոդով և այլընտրանք՝ Kubernetes-ի տեսքով

Տվյալների բազայի երկու տեսակ կա՝ որպես ծառայություն բաց տվյալների բազաների համար.

  1. Ստանդարտ բաց կոդով արտադրանք, որը փաթեթավորված է ադմինիստրացիայի հետին պլանում՝ հեշտ տեղակայման և կառավարման համար:
  2. Ընդլայնված կոմերցիոն լուծում՝ տարբեր հավելումներով, համատեղելի բաց կոդով:

Երկու տարբերակներն էլ նվազեցնում են ամպերի միջև միգրացիայի հնարավորությունը և նվազեցնում տվյալների և հավելվածների տեղափոխելիությունը: Օրինակ, չնայած այն հանգամանքին, որ ամպերի տարբեր տեսակներ աջակցում են ըստ էության նույն ստանդարտ MySQL-ին, դրանց միջև կան զգալի տարբերություններ՝ շահագործման, կատարողականի, կրկնօրինակման և այլն: Մի ամպից մյուսը միգրացիան կարող է դժվար լինել, հատկապես բարդ ծրագրերի համար:

Եվ այստեղ հարց է առաջանում՝ հնարավո՞ր է ստանալ Տվյալների բազայի հարմարավետությունը որպես Ծառայություն, բայց որպես պարզ բաց կոդով լուծում։

Վատ նորությունն այն է, որ, ցավոք, շուկայում նման լուծումներ դեռ չկան։ Լավ նորությունն այն է, որ կա Kubernetes, որը թույլ է տալիս իրականացնել նման լուծումներ։

Kubernetes-ը օպերացիոն համակարգ է ամպի կամ տվյալների կենտրոնի համար, որը թույլ է տալիս տեղակայել և կառավարել հավելվածը մի քանի սերվերների վրա՝ կլաստերի մեջ, այլ ոչ թե մեկ հոսթի վրա:

Այժմ Kubernetes-ը առաջատարն է նման ծրագրերի կատեգորիայում։ Նման խնդիրների համար շատ տարբեր լուծումներ կային, բայց դա դարձավ ստանդարտ: Շատ ընկերություններ, որոնք նախկինում կենտրոնանում էին այլընտրանքային լուծումների վրա, այժմ կենտրոնանում են իրենց արտադրանքի հարմարեցման վրա՝ Kubernetes-ին աջակցելու համար:

Բացի այդ, Kubernetes-ը ունիվերսալ լուծում է, որն աջակցվում է բազմաթիվ վաճառողների մասնավոր, հանրային և հիբրիդային ամպերում, օրինակ՝ AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Ինչպես է Kubernetes-ը աշխատում տվյալների բազաների հետ

Kubernetes-ը ի սկզբանե նախատեսված էր քաղաքացիություն չունեցող հավելվածների համար, որոնք մշակում են տվյալներ, բայց ոչինչ չեն պահում, օրինակ՝ միկրոծառայություններ կամ վեբ հավելվածներ: Տվյալների բազաները գտնվում են սպեկտրի մյուս ծայրում, այսինքն՝ պետական ​​հավելվածներ են։ Իսկ Kubernetes-ը ի սկզբանե նախատեսված չէր նման հավելվածների համար։

Այնուամենայնիվ, կան առանձնահատկություններ, որոնք վերջերս են հայտնվել Kubernetes-ում, որոնք թույլ են տալիս օգտագործել տվյալների շտեմարաններ և այլ պետական ​​ծրագրեր.

  1. StatefulSet հայեցակարգը պրիմիտիվների մի ամբողջ շարք է pods-ի աշխատանքը դադարեցնելու և Graceful Shutdown-ի (հավելվածի կանխատեսելի անջատում) իրականացման վերաբերյալ իրադարձությունների մշակման համար:
  2. Մշտական ​​ծավալները տվյալների պահեստներ են, որոնք կապված են pods-ի, Kubernetes-ի կառավարման օբյեկտների հետ:
  3. Operator Framework - այսինքն՝ տվյալների բազաների և այլ պետական ​​ծրագրերի կառավարման համար բաղադրիչներ ստեղծելու ունակություն, որոնք բաշխված են բազմաթիվ հանգույցներում:

Արդեն հիմա հանրային ամպերում կան մեծ Տվյալների բազաներ որպես Ծառայություն, որոնց հետնամասը Kubernetes-ն է, օրինակ՝ CockroachCloud, InfluxDB, PlanetScale: Այսինքն՝ Kubernetes-ի տվյալների բազան ոչ միայն տեսականորեն հնարավոր է, այլ նաև գործնականում աշխատող մի բան։

Percona-ն ունի երկու բաց կոդով լուծում Kubernetes-ի համար.

  1. Kubernetes օպերատոր Percona սերվերի համար MongoDB-ի համար:
  2. Kubernetes օպերատորը XtraDB CLUSTER-ի համար ծառայություն է, որը համատեղելի է MySQL-ի հետ և ապահովում է բարձր հասանելիություն և հետևողականություն: Կարող եք նաև օգտագործել մեկ հանգույց, եթե բարձր հասանելիության կարիք չկա, օրինակ՝ մշակողի տվյալների բազայի համար:

Kubernetes-ի օգտատերերին կարելի է բաժանել երկու խմբի. Որոշ մարդիկ ուղղակիորեն օգտագործում են Kubernetes օպերատորները. սրանք հիմնականում առաջադեմ օգտվողներ են, ովքեր լավ հասկանում են, թե ինչպես է աշխատում տեխնոլոգիան: Մյուսներն այն գործարկում են հետնամասում. նման օգտվողներին հետաքրքրում է տվյալների բազան որպես ծառայություն, նրանք չեն ցանկանում խորանալ Kubernetes-ի նրբությունների մեջ: Օգտագործողների երկրորդ խմբի համար մենք ունենք մեկ այլ բաց կոդով լուծում՝ Percona DBaaS CLI Tool: Սա փորձարարական լուծում է նրանց համար, ովքեր ցանկանում են ստանալ բաց կոդով DBaaS՝ հիմնված Kubernetes-ի վրա՝ առանց տեխնոլոգիայի խորը պատկերացման:

Ինչպես գործարկել Percona-ի DBaaS-ը Google Kubernetes Engine-ում

Google Kubernetes Engine-ը, իմ կարծիքով, Kubernetes տեխնոլոգիայի ամենաֆունկցիոնալ ներդրումներից մեկն է։ Այն հասանելի է աշխարհի շատ տարածաշրջաններում և ունի պարզ և հարմար Command Line Tool (SDK), որը թույլ է տալիս ստեղծել սցենարներ, այլ ոչ թե ձեռքով կառավարել հարթակը:

Որպեսզի մեր DBaaS-ը աշխատի, մեզ անհրաժեշտ են հետևյալ բաղադրիչները.

  1. Կուբեկտլ.
  2. Google Cloud SDK.
  3. Percona DBaaS CLI.

Տեղադրեք kubectl

Մենք տեղադրում ենք փաթեթը ձեր օպերացիոն համակարգի համար, մենք կանդրադառնանք Ubuntu-ի օրինակին: Ավելի մանրամասն այստեղ.

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-ի տեղադրում

Նույն կերպ ենք տեղադրում ծրագրային փաթեթը։ Ավելի մանրամասն այստեղ.

# 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-ի տեղադրում

Տեղադրեք Percona-ի պահեստներից: Percona DBaaS CLI գործիքը դեռևս փորձնական արտադրանք է, ուստի այն գտնվում է փորձարարական պահոցում, որը պետք է միացված լինի առանձին, նույնիսկ եթե դուք արդեն ունեք տեղադրված Percona պահեստները:

ավելի շատ այստեղ.

Տեղադրման ալգորիթմ.

  1. Կարգավորեք Percona պահեստները՝ օգտագործելով percona-release գործիքը: Նախ անհրաժեշտ է ներբեռնել և տեղադրել Percona-ի պաշտոնական թողարկման փաթեթը Percona-ից.
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Միացնել փորձնական գործիքի պահեստային բաղադրիչը հետևյալ կերպ.
    sudo percona-release enable tools experimental
    
  3. Տեղադրեք percona-dbaas-cli փաթեթը.
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Բաղադրիչների շահագործման կարգավորումը

Ավելին կարգավորումների մասին այստեղ.

Նախ անհրաժեշտ է մուտք գործել ձեր Google հաշիվ: Ավելին, Google Cloud-ը թույլ է տալիս մեկ օգտվողին ունենալ բազմաթիվ անկախ նախագծեր, այնպես որ դուք պետք է նշեք աշխատանքային նախագիծ՝ օգտագործելով այս նախագծի կոդը.

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

Հաջորդը, մենք ստեղծում ենք կլաստեր: Դեմո-ի համար ես ստեղծեցի Kubernetes-ի կլաստեր ընդամենը երեք հանգույցից. սա նվազագույնն է, որը պահանջվում է բարձր հասանելիության համար.

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

Հետևյալ kubectl հրամանը մեր ընթացիկ օգտագործողին տալիս է ցանկալի արտոնություններ.

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

Այնուհետև ստեղծում ենք անվանատարածք և այն ակտիվացնում: Անվանատարածությունը, կոպիտ ասած, նույնպես նման է նախագծի կամ միջավայրի, բայց արդեն Kubernetes կլաստերի ներսում: Այն անկախ է Google Cloud նախագծերից.

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

Կլաստերի մեկնարկը

Այս մի քանի քայլերն անցնելուց հետո մենք կարող ենք սկսել երեք հանգույցներից բաղկացած կլաստեր այս պարզ հրամանով.

# 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

Ինչպես միանալ կլաստերին

Լռելյայն, այն հասանելի է միայն Kubernetes-ի ներսում: Այսինքն, այն հասանելի չէ այս սերվերից, որտեղից դուք գործարկել եք «Ստեղծել» հրամանը: Այն հասանելի դարձնելու համար, օրինակ, հաճախորդի հետ փորձարկումների համար, դուք պետք է փոխանցեք նավահանգիստը Port Mapping-ի միջոցով.

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

Այնուհետև մենք միացնում ենք ձեր MySQL հաճախորդը.

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Կլաստերների կառավարման առաջադեմ հրամաններ

Հանրային IP-ի տվյալների բազա

Եթե ​​ցանկանում եք ավելի մշտական ​​լուծում կլաստերի հասանելիության համար, կարող եք ստանալ արտաքին IP հասցե: Այս դեպքում տվյալների բազան հասանելի կլինի ցանկացած վայրից: Սա ավելի քիչ ապահով է, բայց հաճախ ավելի հարմար: Արտաքին IP-ի համար մենք օգտագործում ենք հետևյալ հրամանը.

# 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

Հստակորեն սահմանեք գաղտնաբառը

Համակարգը պատահականորեն գաղտնաբառ ստեղծելու փոխարեն կարող եք գաղտնաբառ բացահայտորեն սահմանել.

# 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

Ես ցույց եմ տալիս սկրիպտների ելքը մարդու համար ընթեռնելի ձևաչափով, բայց JSON ձևաչափը նույնպես աջակցվում է:

Բարձր հասանելիության անջատում

Հետևյալ հրամանով դուք կարող եք անջատել բարձր հասանելիությունը մեկ հանգույց տեղակայելու համար.

# 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-ն հնարավորինս արագ և հեշտությամբ գործարկելու, փորձարկելու, այնուհետև փակելու կամ մշակելու համար օգտագործելու համար:

Percona DBaaS CLI գործիքն օգնում է ձեզ հասնել DBaaS-ի նման լուծում Kubernetes-ում: Միևնույն ժամանակ, մենք շարունակում ենք աշխատել դրա ֆունկցիոնալության և օգտագործելիության վրա:

Այս զեկույցն առաջին անգամ ներկայացվել է ժ @Տվյալների բազաների հանդիպում Mail.ru Cloud Solutions&Tarantool-ի կողմից: Նայել video այլ ներկայացումներ և բաժանորդագրվեք իրադարձությունների հայտարարություններին Telegram-ում Mail.ru Group-ում Kubernetes-ի շուրջ.

Էլ ի՞նչ կարդալ թեմայի շուրջ.

  1. Տվյալների բազաները ժամանակակից IIoT հարթակում:
  2. Ինչպես ընտրել տվյալների բազա նախագծի համար, որպեսզի ստիպված չլինեք նորից ընտրել:

Source: www.habr.com

Добавить комментарий