Momwe mungapangire mtambo wosakanizidwa pogwiritsa ntchito Kubernetes womwe ungalowe m'malo mwa DBaaS

Dzina langa ndine Petr Zaitsev, ndine CEO, woyambitsa percona ndipo ndikufuna ndikuuzeni:

  • momwe tinachokera ku mayankho otseguka ku Database ngati Service;
  • ndi njira ziti zomwe zilipo pakuyika ma database mumtambo;
  • momwe Kubernetes angalowe m'malo mwa DBaaS, kuchotsa kudalira kwa ogulitsa ndikusunga kuphweka kwa DBMS monga ntchito.

Nkhaniyi idakonzedwa kutengera lipoti la @Databases Meetup lolemba Mail.ru Cloud Solutions & Tarantool. Ngati simukufuna kuwerenga, mutha kuwona:


Momwe tinachokera ku gwero lotseguka kupita ku Database ngati Service mumtambo

Ndakhala ndikugwira ntchito yotseguka kuyambira kumapeto kwa zaka za m'ma 90. Zaka makumi awiri zapitazo, kugwiritsa ntchito gwero lotseguka, monga nkhokwe, sikunali kophweka. Zinali zofunikira kutsitsa gwero lachidziwitso, kuchiphatikizira, kuchiphatikiza ndikuchigwiritsa ntchito.

Open source ndiye adadutsa njira zingapo zosavuta:

  • Tar.gz ndi INSTALL magwero omwe amayenera kupangidwa;
  • maphukusi okhala ndi zodalira monga .deb ndi .rpm, kumene mumangofunika kukhazikitsa phukusi;
  • nkhokwe za phukusi monga APT ndi YUM, zomwe kukhazikitsa kumangochitika zokha;
  • mayankho monga Docker ndi Snap, omwe amakulolani kuti mulandire phukusi pokhazikitsa popanda kudalira kunja.

Zotsatira zake, zimakhala zosavuta kugwiritsa ntchito mapulogalamu otseguka komanso zimachepetsanso chotchinga cholowera kupanga mapulogalamu otere.

Panthawi imodzimodziyo, mosiyana ndi momwe zinalili zaka 20 zapitazo, pamene aliyense anali katswiri wa msonkhano, tsopano opanga ambiri sangathe kupanga zida zomwe amagwiritsa ntchito kuchokera ku gwero.

M'malo mwake, izi sizoyipa, chifukwa:

  1. Titha kugwiritsa ntchito mapulogalamu ovuta koma osavuta kugwiritsa ntchito. Mwachitsanzo, msakatuli ndi wosavuta kugwiritsa ntchito, koma umaphatikizapo zida zambiri zotseguka ndipo ndizosavuta kupanga kuyambira poyambira.
  2. Anthu ambiri amatha kukhala opanga magwero otseguka ndi mapulogalamu ena, mapulogalamu ambiri amagwiritsidwa ntchito ndi mabizinesi, ndipo kufunikira kwake ndikokulirapo.

Chotsatira chake ndi chakuti sitepe yotsatira yophweka ikugwirizana ndi kugwiritsa ntchito njira zothetsera mitambo, ndipo izi zimatsogolera kutsekedwa kwa ogulitsa, ndiko kuti, kumangiriza kwa wothandizira mmodzi. Timagwiritsa ntchito njira zosavuta ndipo operekera amagwiritsa ntchito zigawo zotseguka, koma kwenikweni amakhomeredwa kumtambo umodzi waukulu. Ndiko kuti, njira yosavuta komanso yachangu kwambiri yotumizira gwero lotseguka (ndi mapulogalamu omwe amagwirizana nawo) ali m'mitambo, pogwiritsa ntchito API.

Zikafika pama database mumtambo, pali njira ziwiri:

  1. Sonkhanitsani maziko a database, monga malo okhazikika a data. Ndiko kuti, tengani midadada yomangirira: kuwerengera, kusungirako, ndi zina zotero, ikani Linux ndi nkhokwe pa izo, ndikuzikonza.
  2. Gwiritsani Ntchito Database monga Utumiki, pomwe wopereka amapereka database yokonzekera mkati mwamtambo.

DBaaS ndi msika womwe ukukula mwachangu pompano chifukwa umalola opanga kuti azigwira ntchito mwachindunji ndi nkhokwe ndikuchepetsa ntchito zanthawi zonse. Woperekayo amayesetsa kuwonetsetsa Kupezeka Kwapamwamba komanso makulitsidwe osavuta, kuyika database, zosunga zobwezeretsera, ndikusintha magwiridwe antchito.

Mitundu iwiri ya Database ngati Service yochokera pagwero lotseguka komanso njira ina mu Kubernetes

Pali mitundu iwiri ya Database ngati Service yotsegulira ma database:

  1. Chinthu chodziwika bwino chotsegulira gwero chopakidwa kumbuyo kwa oyang'anira kuti atumizidwe mosavuta ndikuwongolera.
  2. Yankho lapamwamba lazamalonda lokhala ndi zowonjezera zosiyanasiyana, zogwirizana ndi gwero lotseguka.

Zosankha zonsezi zimachepetsa kuthekera kwa kusamuka pakati pa mitambo ndikuchepetsa kusuntha kwa data ndi ntchito. Mwachitsanzo, ngakhale kuti mitundu yosiyanasiyana ya mitambo imathandizira MySQL yofanana, pali kusiyana kwakukulu pakati pawo: kugwira ntchito, kugwira ntchito, kusunga, ndi zina zotero. Kusamuka kuchokera ku mtambo umodzi kupita ku wina kungakhale kovuta, makamaka pa ntchito zovuta.

Ndipo apa funso likubwera - kodi n'zotheka kupeza mosavuta Database monga Utumiki, koma ngati njira yosavuta yotsegula?

Nkhani yoipa ndi yakuti, mwatsoka, palibe njira zoterezi pamsika panobe. Nkhani yabwino ndiyakuti pali Kubernetes, yomwe imakulolani kuti mugwiritse ntchito mayankho otere.

Kubernetes ndi makina ogwiritsira ntchito mtambo kapena data center omwe amakupatsani mwayi wotumiza ndikuwongolera pulogalamu pamaseva angapo mgulu osati pagulu limodzi.

Tsopano Kubernetes ndiye mtsogoleri pagulu la mapulogalamu otere. Panali njira zambiri zothetsera mavutowa, koma zinakhala muyezo. Makampani ambiri omwe amangoyang'ana njira zina zothetsera mavuto tsopano akuyang'ana kwambiri kusintha zinthu zawo kuti zithandizire Kubernetes.

Kuphatikiza apo, Kubernetes ndi yankho lapadziko lonse lapansi lomwe limathandizidwa mwachinsinsi, pagulu komanso mitambo yosakanizidwa ya ogulitsa ambiri, mwachitsanzo: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Momwe Kubernetes amagwirira ntchito ndi nkhokwe

Kubernetes poyambilira adapangidwira ntchito zopanda malire zomwe zimasanthula deta koma osasunga chilichonse, monga ma microservices kapena mawebusayiti. Ma Databases ali kumapeto kwina kwa sipekitiramu, ndiye kuti, ndizomwe zimagwiritsidwa ntchito. Ndipo Kubernetes poyamba sanapangidwe kuti agwiritse ntchito.

Komabe, pali zinthu zina zomwe zawoneka ku Kubernetes posachedwa zomwe zimalola kugwiritsa ntchito nkhokwe ndi mapulogalamu ena apamwamba:

  1. Lingaliro la StatefulSet ndi mndandanda wonse wazinthu zoyambira pakukonza zochitika zokhudzana ndi kuyimitsa ntchito ya ma pod ndi kukhazikitsa Graceful Shutdown (kutsekeka kwa pulogalamuyo).
  2. Persistent Volumes ndi malo osungirako deta omwe amagwirizanitsidwa ndi pods, Kubernetes management zinthu.
  3. Operator Framework - ndiko kuti, kuthekera kopanga zida zowongolera nkhokwe ndi ntchito zina zodziwika bwino zomwe zimagawidwa m'malo ambiri.

Kale m'mitambo ya anthu pali Ma Database akuluakulu monga Utumiki, kumbuyo kwake ndi Kubernetes, mwachitsanzo: CockroachCloud, InfluxDB, PlanetScale. Ndiko kuti, nkhokwe ya Kubernetes sizinthu zokhazokha zomwe zingatheke, komanso zomwe zimagwira ntchito.

Percona ali ndi mayankho awiri otseguka a Kubernetes:

  1. Kubernetes Operator ya Percona Server ya MongoDB.
  2. Kubernetes Operator ya XtraDB CLUSTER ndi ntchito yomwe imagwirizana ndi MySQL ndipo imapereka kupezeka kwakukulu komanso kusasinthika. Mutha kugwiritsanso ntchito node imodzi ngati kupezeka kwakukulu sikufunika, mwachitsanzo pa database ya dev.

Ogwiritsa ntchito a Kubernetes akhoza kugawidwa m'magulu awiri. Anthu ena amagwiritsa ntchito Kubernetes Operators mwachindunji - awa ndi ogwiritsa ntchito apamwamba omwe amamvetsetsa bwino momwe ukadaulo umagwirira ntchito. Ena amayendetsa kumbuyo - ogwiritsa ntchitowa ali ndi chidwi ndi china chake ngati Database ngati Service, safuna kufufuzidwa muzinthu za Kubernetes. Kwa gulu lachiwiri la ogwiritsa ntchito, tili ndi yankho lina lotseguka - Percona DBaaS CLI Tool. Ili ndi yankho loyesera kwa iwo omwe akufuna kupeza DBaaS yotseguka yochokera ku Kubernetes popanda kumvetsetsa kwakukulu kwaukadaulo.

Momwe mungayendetsere Percona's DBaaS pa Google Kubernetes Engine

Google Kubernetes Engine, m'malingaliro mwanga, ndi imodzi mwazinthu zogwira ntchito kwambiri zaukadaulo wa Kubernetes. Imapezeka m'madera ambiri padziko lapansi ndipo ili ndi Chida Chosavuta komanso chosavuta cha Command Line (SDK), chomwe chimakupatsani mwayi wopanga zolemba m'malo mowongolera pamanja nsanja.

Kuti DBaaS yathu igwire ntchito, tikufuna zigawo izi:

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

Ikani kubectl

Timayika phukusi la makina anu ogwiritsira ntchito, tiwona chitsanzo cha Ubuntu. Zambiri apa.

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

Kukhazikitsa Google Cloud SDK

Timayika phukusi la mapulogalamu mofananamo. Zambiri apa.

# 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

Kuyika Percona DBaaS CLI

Ikani kuchokera ku Percona repositories. Percona DBaaS CLI Tool akadali chinthu choyesera, chifukwa chake chili m'malo oyesera, omwe ayenera kuyatsidwa padera, ngakhale mutakhala kale ndi zosungira za Percona.

More apa.

Kukhazikitsa algorithm:

  1. Konzani zosungira za Percona pogwiritsa ntchito chida chotulutsa percona. Choyamba muyenera kutsitsa ndikuyika phukusi lovomerezeka la Percona kuchokera ku Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Yambitsani gawo la chida choyesera motere:
    sudo percona-release enable tools experimental
    
  3. Ikani phukusi la percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Kukhazikitsa magwiridwe antchito a zigawo

Zambiri za zokonda apa.

Choyamba muyenera kulowa muakaunti yanu ya Google. Kuphatikiza apo, Google Cloud imalola wogwiritsa ntchito m'modzi kukhala ndi mapulojekiti ambiri odziyimira pawokha, kotero muyenera kutchula pulojekiti yomwe ikugwira ntchito pogwiritsa ntchito kachidindo ka polojekitiyi:

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

Kenako, timapanga masango. Kwa chiwonetserocho, ndidapanga gulu la Kubernetes la node zitatu zokha - izi ndizochepera zomwe zimafunikira kuti pakhale kupezeka kwakukulu:

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

Lamulo lotsatira la kubectl limapereka mwayi womwe mukufuna kwa ogwiritsa ntchito pano:

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

Kenaka timapanga dzina lachidziwitso ndikulipanga kukhala logwira ntchito. Namespace ndi, kunena pang'ono, ngati projekiti kapena chilengedwe, koma mkati mwa gulu la Kubernetes. Ndiwodziyimira pawokha kuchokera ku mapulojekiti a Google Cloud:

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

Kuyambira masango

Tikadutsa masitepe ochepa awa, titha kuyambitsa gulu lamagulu atatu ndi lamulo losavuta ili:

# 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

Momwe mungalumikizire gulu

Mwachikhazikitso, imapezeka mkati mwa Kubernetes. Ndiye kuti, sichikupezeka kuchokera ku seva iyi yomwe mudathamangitsira lamulo la "Pangani". Kuti ipezeke, mwachitsanzo, kuyesa ndi kasitomala, muyenera kutumiza doko kudzera pa Mapu a Port:

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

Kenako timalumikiza kasitomala wanu wa MySQL:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Malamulo apamwamba a cluster management

Database pa public IP

Ngati mukufuna yankho lokhazikika la kupezeka kwa magulu, mutha kupeza adilesi yakunja ya IP. Pankhaniyi, database ipezeka kulikonse. Izi sizotetezeka, koma nthawi zambiri zimakhala zosavuta. Pa IP yakunja timagwiritsa ntchito lamulo ili:

# 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

Khazikitsani mawu achinsinsi

M'malo mopanga mawu achinsinsi mwachisawawa, mutha kukhazikitsa mawu achinsinsi momveka bwino:

# 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

Ndikuwonetsa zolembedwa mumtundu wowerengeka ndi anthu, koma mtundu wa JSON umathandizidwanso.

Kuzimitsa kupezeka kwakukulu

Ndi lamulo lotsatirali mutha kuletsa kupezeka kwakukulu kuti mutumize node imodzi:

# 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

Ili ndi yankho la ntchito zoyesa kuti MySQL iyambe kugwira ntchito mwachangu komanso mosavuta, yesani, kenako ndikuyimitsani kapena kuigwiritsa ntchito pachitukuko.

Chida cha Percona DBaaS CLI chimakuthandizani kuti mupeze yankho ngati la DBaaS pa Kubernetes. Panthawi imodzimodziyo, timapitirizabe kugwira ntchito ndikugwiritsa ntchito.

Lipotili linaperekedwa koyamba pa @Databases Meetup ndi Mail.ru Cloud Solutions&Tarantool. Penyani! Π²ΠΈΠ΄Π΅ΠΎ zisudzo zina ndikulembetsa ku zolengeza zochitika pa Telegraph Pafupi ndi Kubernetes ku Mail.ru Group.

Zomwe mungawerenge pamutuwu:

  1. Zosungidwa papulatifomu yamakono ya IIoT.
  2. Momwe mungasankhire nkhokwe ya polojekiti kuti musasankhenso.

Source: www.habr.com

Kuwonjezera ndemanga