Jinsi ya kuunda wingu la mseto kwa kutumia Kubernetes ambayo inaweza kuchukua nafasi ya DBaaS

Jina langu ni Petr Zaitsev, mimi ndiye Mkurugenzi Mtendaji, mwanzilishi percona na ninataka kukuambia:

  • jinsi tulivyotoka kwenye suluhisho la chanzo huria hadi Hifadhidata kama Huduma;
  • ni njia gani zipo za kupeleka hifadhidata kwenye wingu;
  • jinsi Kubernetes inaweza kuchukua nafasi ya DBaaS, kuondoa utegemezi wa muuzaji na kudumisha urahisi wa DBMS kama huduma.

Nakala hiyo ilitayarishwa kulingana na ripoti katika @Databases Meetup na Mail.ru Cloud Solutions & Tarantool. Ikiwa hutaki kusoma, unaweza kutazama:


Jinsi tulivyotoka kwa chanzo wazi hadi Hifadhidata kama Huduma kwenye wingu

Nimekuwa nikifanya kazi katika chanzo wazi tangu mwishoni mwa miaka ya 90. Miaka ishirini iliyopita, kutumia chanzo wazi, kama hifadhidata, haikuwa rahisi sana. Ilikuwa ni lazima kupakua msimbo wa chanzo, kiraka, kukusanya na kisha tu kuitumia.

Chanzo wazi kisha kilipitia safu ya kurahisisha:

  • Tar.gz na SAKINISHA vyanzo vilivyohitaji kukusanywa;
  • vifurushi vilivyo na tegemezi kama .deb na .rpm, ambapo unahitaji tu kusakinisha seti ya vifurushi;
  • hazina za vifurushi kama APT na YUM, ambayo usakinishaji ni otomatiki;
  • suluhisho kama vile Docker na Snap, ambayo hukuruhusu kupokea vifurushi kwa usakinishaji bila utegemezi wa nje.

Kwa hivyo, inakuwa rahisi kutumia programu huria na pia inapunguza kizuizi cha kuingia katika kuunda programu kama hizo.

Wakati huo huo, tofauti na hali ya miaka 20 iliyopita, wakati kila mtu alikuwa mtaalam wa mkutano, sasa watengenezaji wengi hawawezi kujenga zana wanazotumia kutoka kwa chanzo.

Kwa kweli, hii sio mbaya, kwa sababu:

  1. Tunaweza kutumia programu ngumu zaidi lakini rahisi zaidi kwa watumiaji. Kwa mfano, kivinjari ni rahisi kutumia, lakini inajumuisha vipengele vingi vya chanzo wazi na ni vigumu kujenga kutoka mwanzo.
  2. Watu wengi zaidi wanaweza kuwa watengenezaji wa chanzo huria na programu nyingine, programu zaidi hutumiwa na biashara, na hitaji lake ni kubwa zaidi.

Upande wa chini ni kwamba hatua inayofuata katika kurahisisha inahusishwa na matumizi ya ufumbuzi wa wingu, na hii inasababisha muuzaji fulani amefungwa, yaani, kumfunga kwa muuzaji mmoja. Tunatumia ufumbuzi rahisi na watoa huduma hutumia vipengele vya chanzo wazi, lakini kwa kweli wametundikwa kwenye mojawapo ya mawingu makubwa. Hiyo ni, njia rahisi na ya haraka zaidi ya kupeleka chanzo wazi (na programu inayoendana nayo) iko kwenye mawingu, kwa kutumia API ya umiliki.

Linapokuja suala la hifadhidata katika wingu, kuna njia mbili:

  1. Kusanya miundombinu ya hifadhidata, kama katika kituo cha kawaida cha data. Hiyo ni, chukua vizuizi vya kawaida vya ujenzi: hesabu, uhifadhi, na kadhalika, sasisha Linux na hifadhidata juu yao, na uzisanidi.
  2. Tumia Hifadhidata kama Huduma, ambapo mtoa huduma hutoa hifadhidata iliyotengenezwa tayari ndani ya wingu.

DBaaS ni soko linalokua kwa kasi sasa hivi kwa sababu inaruhusu wasanidi programu kufanya kazi moja kwa moja na hifadhidata na kupunguza kazi ya kawaida. Mtoa huduma anajitolea kuhakikisha Upatikanaji wa Juu na kuongeza urahisi, kuweka alama kwenye hifadhidata, hifadhi rudufu, na kurekebisha utendaji.

Aina mbili za Hifadhidata kama Huduma kulingana na chanzo huria na mbadala katika mfumo wa Kubernetes

Kuna aina mbili za Hifadhidata kama Huduma ya hifadhidata wazi:

  1. Bidhaa ya kawaida ya programu huria iliyofungwa katika mazingira ya nyuma ya usimamizi kwa ajili ya kusambaza na usimamizi kwa urahisi.
  2. Suluhisho la hali ya juu la kibiashara na nyongeza mbalimbali, sambamba na chanzo huria.

Chaguo zote mbili hupunguza uwezekano wa uhamiaji kati ya mawingu na kupunguza uhamishaji wa data na programu. Kwa mfano, licha ya ukweli kwamba aina tofauti za mawingu zinaunga mkono kimsingi kiwango sawa cha MySQL, kuna tofauti kubwa kati yao: katika uendeshaji, utendaji, chelezo, na kadhalika. Kuhama kutoka kwa wingu moja hadi nyingine kunaweza kuwa changamoto, haswa kwa programu ngumu.

Na hapa swali linatokea - inawezekana kupata urahisi wa Hifadhidata kama Huduma, lakini kama suluhisho rahisi la chanzo wazi?

Habari mbaya ni kwamba, kwa bahati mbaya, hakuna suluhisho kama hizo kwenye soko bado. Habari njema ni kwamba kuna Kubernetes, ambayo inakuwezesha kutekeleza ufumbuzi huo.

Kubernetes ni mfumo wa uendeshaji wa kituo cha wingu au data unaokuruhusu kusambaza na kudhibiti programu kwenye seva nyingi kwenye kundi badala ya seva pangishi moja.

Sasa Kubernetes ndiye kiongozi katika kitengo cha programu kama hizo. Kulikuwa na suluhisho nyingi tofauti kwa shida kama hizo, lakini ikawa kiwango. Kampuni nyingi zilizokuwa zikizingatia suluhu mbadala sasa zinalenga kurekebisha bidhaa zao ili kusaidia Kubernetes.

Kwa kuongeza, Kubernetes ni suluhisho la ulimwengu wote ambalo linasaidiwa katika mawingu ya faragha, ya umma na ya mseto ya wachuuzi wengi, kwa mfano: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Jinsi Kubernetes inavyofanya kazi na hifadhidata

Kubernetes iliundwa kwa ajili ya programu zisizo na uraia ambazo huchakata data lakini hazihifadhi chochote, kama vile huduma ndogo au programu za wavuti. Hifadhidata ziko kwenye mwisho mwingine wa wigo, ambayo ni, ni matumizi ya hali. Na Kubernetes haikukusudiwa kwa maombi kama haya.

Walakini, kuna vipengee ambavyo vimeonekana katika Kubernetes hivi karibuni ambavyo vinaruhusu utumiaji wa hifadhidata na programu zingine nzuri:

  1. Dhana ya StatefulSet ni mfululizo mzima wa mambo ya awali ya kuchakata matukio kuhusu kusimamisha kazi ya maganda na kutekeleza Uzima wa Neema (kuzima kwa programu kutabirika).
  2. Kiasi Kinachoendelea ni hifadhi za data ambazo zinahusishwa na maganda, vitu vya usimamizi wa Kubernetes.
  3. Mfumo wa Opereta - ambayo ni, uwezo wa kuunda vipengee vya kudhibiti hifadhidata na programu zingine za serikali zinazosambazwa katika nodi nyingi.

Tayari sasa kwenye mawingu ya umma kuna Hifadhidata kubwa kama Huduma, ambayo nyuma yake ni Kubernetes, kwa mfano: CockroachCloud, InfluxDB, PlanetScale. Hiyo ni, hifadhidata ya Kubernetes sio tu kitu ambacho kinawezekana kinadharia, lakini pia kitu kinachofanya kazi kwa vitendo.

Percona ina suluhisho mbili za chanzo wazi kwa Kubernetes:

  1. Opereta ya Kubernetes ya Seva ya Percona ya MongoDB.
  2. Kubernetes Operator kwa XtraDB CLUSTER ni huduma inayoendana na MySQL na hutoa upatikanaji wa juu na uthabiti. Unaweza pia kutumia nodi moja ikiwa upatikanaji wa juu hauhitajiki, kwa mfano kwa hifadhidata ya dev.

Watumiaji wa Kubernetes wanaweza kugawanywa katika vikundi viwili. Baadhi ya watu hutumia Kubernetes Operators moja kwa moja - hawa ni watumiaji wa hali ya juu ambao wana ufahamu mzuri wa jinsi teknolojia inavyofanya kazi. Wengine huiendesha kwenye sehemu ya nyuma - watumiaji kama hao wanavutiwa na kitu kama Hifadhidata kama Huduma, hawataki kuangazia nuances ya Kubernetes. Kwa kundi la pili la watumiaji, tuna suluhisho lingine la chanzo wazi - Percona DBaaS CLI Tool. Hili ni suluhisho la majaribio kwa wale wanaotaka kupata chanzo huria cha DBaaS kulingana na Kubernetes bila ufahamu wa kina wa teknolojia.

Jinsi ya kuendesha DBaaS ya Percona kwenye Injini ya Google Kubernetes

Google Kubernetes Engine, kwa maoni yangu, ni mojawapo ya utekelezaji bora zaidi wa teknolojia ya Kubernetes. Inapatikana katika maeneo mengi ya dunia na ina Zana ya Mstari wa Amri rahisi na rahisi (SDK), ambayo inakuruhusu kuunda hati badala ya kudhibiti jukwaa wewe mwenyewe.

Ili DBaaS yetu ifanye kazi, tunahitaji vifaa vifuatavyo:

  1. Kubectl.
  2. SDK ya Wingu la Google.
  3. Percona DBaaS CLI.

Sakinisha kubectl

Tunaweka kifurushi kwa mfumo wako wa kufanya kazi, tutaangalia mfano wa Ubuntu. Maelezo zaidi hapa.

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

Inasakinisha SDK ya Wingu la Google

Tunaweka kifurushi cha programu kwa njia ile ile. Maelezo zaidi hapa.

# 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

Inasakinisha Percona DBaaS CLI

Sakinisha kutoka kwa hazina za Percona. Zana ya Percona DBaaS CLI bado ni bidhaa ya majaribio, kwa hivyo iko kwenye hazina ya majaribio, ambayo lazima iwashwe kando, hata ikiwa tayari una hazina za Percona zilizosakinishwa.

zaidi hapa.

Usanidi wa usakinishaji:

  1. Sanidi hazina za Percona kwa kutumia zana ya kutolewa kwa percona. Kwanza unahitaji kupakua na kusakinisha kifurushi rasmi cha kutolewa kwa percona kutoka Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Washa kipengele cha hazina ya zana ya majaribio kama ifuatavyo:
    sudo percona-release enable tools experimental
    
  3. Sakinisha kifurushi cha percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Kuanzisha uendeshaji wa vipengele

Zaidi kuhusu mipangilio hapa.

Kwanza unahitaji kuingia kwenye akaunti yako ya Google. Zaidi ya hayo, Wingu la Google huruhusu mtumiaji mmoja kuwa na miradi mingi inayojitegemea, kwa hivyo unahitaji kubainisha mradi unaofanya kazi kwa kutumia msimbo wa mradi huu:

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

Ifuatayo, tunaunda kundi. Kwa onyesho, niliunda kundi la Kubernetes la nodi tatu pekee - hiki ndicho kiwango cha chini kinachohitajika kwa upatikanaji wa juu:

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

Amri ifuatayo ya kubectl inatoa haki zinazohitajika kwa mtumiaji wetu wa sasa:

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

Kisha tunaunda nafasi ya majina na kuifanya iwe hai. Nafasi ya majina ni, takribani kusema, pia kama mradi au mazingira, lakini tayari iko ndani ya nguzo ya Kubernetes. Ni huru kutoka kwa miradi ya Wingu la Google:

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

Kuanzisha nguzo

Mara tu tumepitia hatua hizi chache, tunaweza kuanza nguzo ya nodi tatu kwa amri hii rahisi:

# 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

Jinsi ya kuunganisha kwenye nguzo

Kwa chaguo-msingi, inapatikana ndani ya Kubernetes pekee. Hiyo ni, haipatikani kutoka kwa seva hii ambayo uliendesha amri ya "Unda". Ili kuifanya ipatikane, kwa mfano, kwa majaribio na mteja, unahitaji kusambaza mlango kupitia Ramani ya Port:

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

Kisha tunaunganisha mteja wako wa MySQL:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Amri za juu za usimamizi wa nguzo

Hifadhidata kwenye IP ya umma

Ikiwa unataka suluhisho la kudumu zaidi la upatikanaji wa nguzo, unaweza kupata anwani ya IP ya nje. Katika kesi hii, hifadhidata itapatikana kutoka mahali popote. Hii ni salama kidogo, lakini mara nyingi inafaa zaidi. Kwa IP ya nje tunatumia amri ifuatayo:

# 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

Weka nenosiri wazi

Badala ya mfumo kutoa nenosiri kwa nasibu, unaweza kuweka nenosiri kwa uwazi:

# 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

Ninaonyesha matokeo ya hati katika umbizo linaloweza kusomeka kwa binadamu, lakini umbizo la JSON pia linaungwa mkono.

Kuzima upatikanaji wa juu

Kwa amri ifuatayo unaweza kulemaza upatikanaji wa juu wa kupeleka nodi moja:

# 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

Hili ni suluhisho la kazi za majaribio ili kufanya MySQL ifanye kazi haraka na kwa urahisi iwezekanavyo, ijaribu, kisha uifunge au uitumie kwa maendeleo.

Zana ya Percona DBaaS CLI hukusaidia kufikia suluhisho kama la DBaaS kwenye Kubernetes. Wakati huo huo, tunaendelea kufanya kazi juu ya utendaji wake na usability.

Ripoti hii iliwasilishwa kwa mara ya kwanza @Mkutano wa Hifadhidata na Mail.ru Cloud Solutions&Tarantool. Tazama video maonyesho mengine na ujiandikishe kwa matangazo ya hafla kwenye Telegraph Karibu na Kubernetes kwenye Mail.ru Group.

Nini kingine cha kusoma kwenye mada:

  1. Hifadhidata katika jukwaa la kisasa la IIoT.
  2. Jinsi ya kuchagua hifadhidata ya mradi ili sio lazima uchague tena.

Chanzo: mapenzi.com

Kuongeza maoni