Bii o ṣe le kọ awọsanma arabara nipa lilo Kubernetes ti o le rọpo DBaaS

Orukọ mi ni Petr Zaitsev, Emi ni CEO, oludasile percona ati pe Mo fẹ sọ fun ọ:

  • bawo ni a ṣe wa lati awọn solusan orisun ṣiṣi si aaye data bi Iṣẹ;
  • kini awọn ọna ti o wa lati fi awọn apoti isura data sinu awọsanma;
  • bawo ni Kubernetes ṣe le rọpo DBaaS, imukuro igbẹkẹle ataja ati mimu ayedero ti DBMS bi iṣẹ kan.

A pese nkan naa da lori ijabọ kan ni @Databases Meetup nipasẹ Mail.ru Awọn solusan awọsanma & Tarantool. Ti o ko ba fẹ ka, o le wo:


Bii a ṣe wa lati orisun ṣiṣi si aaye data bi Iṣẹ kan ninu awọsanma

Mo ti n ṣiṣẹ ni orisun ṣiṣi lati opin awọn ọdun 90. Ogún ọdún sẹ́yìn, lílo orísun ìmọ̀, irú bí ibi ìpamọ́ data, kò rọrùn rárá. O jẹ dandan lati ṣe igbasilẹ koodu orisun, patch rẹ, ṣajọ rẹ ati lẹhinna lo nikan.

Ṣii orisun lẹhinna lọ nipasẹ awọn ọna irọrun:

  • Tar.gz ati INSTALL awọn orisun ti o nilo lati ṣajọ;
  • awọn idii pẹlu awọn igbẹkẹle bii .deb ati .rpm, nibiti o nilo lati fi sori ẹrọ awọn idii kan nikan;
  • awọn ibi ipamọ package bi APT ati YUM, pẹlu eyiti fifi sori ẹrọ jẹ adaṣe;
  • awọn solusan bii Docker ati Snap, eyiti o gba ọ laaye lati gba awọn idii nipasẹ fifi sori laisi awọn igbẹkẹle ita.

Bi abajade, o di rọrun lati lo sọfitiwia orisun ṣiṣi ati tun sọ idena silẹ lati iwọle si idagbasoke iru awọn ohun elo.

Ni akoko kanna, ko dabi ipo 20 ọdun sẹyin, nigbati gbogbo eniyan jẹ alamọja apejọ, ni bayi ọpọlọpọ awọn olupilẹṣẹ ko le kọ awọn irinṣẹ ti wọn lo lati orisun.

Ni otitọ, eyi kii ṣe buburu, nitori:

  1. A le lo eka diẹ sii ṣugbọn sọfitiwia ore-olumulo diẹ sii. Fun apẹẹrẹ, ẹrọ aṣawakiri kan rọrun lati lo, ṣugbọn o pẹlu ọpọlọpọ awọn paati orisun ṣiṣi ati pe ko rọrun lati kọ lati ibere.
  2. Awọn eniyan diẹ sii le di awọn olupilẹṣẹ ti orisun ṣiṣi ati sọfitiwia miiran, sọfitiwia diẹ sii ni lilo nipasẹ awọn iṣowo, ati iwulo fun rẹ tobi.

Ilọkuro ni pe igbesẹ ti o tẹle ni simplification ni nkan ṣe pẹlu lilo awọn ojutu awọsanma, ati pe eyi yori si titiipa olutaja kan, iyẹn ni, abuda si olupese kan. A lo awọn solusan ti o rọrun ati awọn olupese lo awọn paati orisun ṣiṣi, ṣugbọn ni otitọ wọn ti kan mọ ọkan ninu awọn awọsanma nla. Iyẹn ni, ọna ti o rọrun ati iyara julọ lati fi orisun ṣiṣi silẹ (ati sọfitiwia ibaramu pẹlu rẹ) wa ninu awọn awọsanma, ni lilo API ohun-ini kan.

Nigbati o ba de si awọn data data ninu awọsanma, awọn ọna meji lo wa:

  1. Ṣe apejọ awọn amayederun data, bi ninu ile-iṣẹ data deede. Iyẹn ni, mu awọn bulọọki ile boṣewa: iṣiro, ibi ipamọ, ati bẹbẹ lọ, fi Linux ati data data sori wọn, ki o tunto wọn.
  2. Lo aaye data bi Iṣẹ kan, nibiti olupese n funni ni ibi ipamọ data ti a ti ṣetan ninu awọsanma.

DBaaS jẹ ọja ti n dagba ni iyara ni bayi nitori pe o gba awọn olupilẹṣẹ laaye lati ṣiṣẹ taara pẹlu awọn apoti isura infomesonu ati dinku iṣẹ ṣiṣe deede. Olupese ṣe adehun lati rii daju Wiwa Giga ati fifẹ irọrun, patching database, awọn afẹyinti, ati atunṣe iṣẹ.

Awọn oriṣi aaye data meji bi Iṣẹ kan ti o da lori orisun ṣiṣi ati yiyan ni irisi Kubernetes

Awọn oriṣi aaye data meji lo wa bi Iṣẹ kan fun awọn apoti isura infomesonu ṣiṣi:

  1. Ọja orisun ṣiṣi boṣewa ti kojọpọ ni ẹhin iṣakoso fun imuṣiṣẹ ati iṣakoso irọrun.
  2. Ojutu iṣowo ti ilọsiwaju pẹlu ọpọlọpọ awọn afikun, ibaramu pẹlu orisun ṣiṣi.

Awọn aṣayan mejeeji dinku iṣeeṣe ijira laarin awọn awọsanma ati dinku gbigbe data ati awọn ohun elo. Fun apẹẹrẹ, botilẹjẹpe otitọ pe awọn oriṣiriṣi awọn awọsanma ṣe atilẹyin pataki boṣewa MySQL kanna, awọn iyatọ nla wa laarin wọn: ni iṣẹ, iṣẹ, afẹyinti, ati bẹbẹ lọ. Iṣilọ lati inu awọsanma kan si omiran le jẹ nija, paapaa fun awọn ohun elo ti o nipọn.

Ati nihin ibeere naa waye - ṣe o ṣee ṣe lati gba wewewe ti aaye data bi Iṣẹ kan, ṣugbọn bi ojutu orisun ṣiṣi ti o rọrun?

Awọn iroyin buburu ni pe, laanu, ko si iru awọn solusan lori ọja sibẹsibẹ. Irohin ti o dara ni pe Kubernetes wa, eyiti o fun ọ laaye lati ṣe iru awọn solusan.

Kubernetes jẹ ẹrọ ṣiṣe fun awọsanma tabi ile-iṣẹ data ti o fun ọ laaye lati mu ṣiṣẹ ati ṣakoso ohun elo kan kọja awọn olupin pupọ ni iṣupọ kan ju lori agbalejo kan.

Bayi Kubernetes jẹ oludari ninu ẹya iru sọfitiwia. Ọpọlọpọ awọn solusan oriṣiriṣi wa fun iru awọn iṣoro bẹ, ṣugbọn o di idiwọn. Ọpọlọpọ awọn ile-iṣẹ ti o lo si idojukọ lori awọn ipinnu yiyan ti wa ni idojukọ bayi lori mimu awọn ọja wọn ṣe lati ṣe atilẹyin Kubernetes.

Ni afikun, Kubernetes jẹ ojutu gbogbo agbaye ti o ni atilẹyin ni ikọkọ, gbangba ati awọn awọsanma arabara ti ọpọlọpọ awọn olutaja, fun apẹẹrẹ: AWS, Google Cloud, Microsoft Azure, Mail.ru awọsanma Solutions.

Bawo ni Kubernetes ṣiṣẹ pẹlu awọn apoti isura infomesonu

Kubernetes jẹ apẹrẹ ni akọkọ fun awọn ohun elo ti ko ni ipinlẹ ti o ṣe ilana data ṣugbọn ko tọju ohunkohun, gẹgẹbi awọn iṣẹ microservices tabi awọn ohun elo wẹẹbu. Awọn apoti isura infomesonu wa ni opin miiran ti spekitiriumu, iyẹn ni, wọn jẹ awọn ohun elo ipinlẹ. Ati Kubernetes ko ni ipilẹṣẹ fun iru awọn ohun elo.

Sibẹsibẹ, awọn ẹya wa ti o ti han ni Kubernetes laipẹ ti o gba laaye lilo awọn apoti isura infomesonu ati awọn ohun elo ipinlẹ miiran:

  1. Imọye StatefulSet jẹ gbogbo jara ti awọn ipilẹṣẹ fun ṣiṣatunṣe awọn iṣẹlẹ nipa didaduro iṣẹ awọn adarọ-ese ati imuse Tiipa Graceful (Tiipa asọtẹlẹ ti ohun elo).
  2. Awọn iwọn didun itẹramọṣẹ jẹ awọn ile itaja data ti o ni nkan ṣe pẹlu awọn adarọ-ese, awọn nkan iṣakoso Kubernetes.
  3. Ilana oniṣẹ - iyẹn ni, agbara lati ṣẹda awọn paati fun ṣiṣakoso awọn apoti isura infomesonu ati awọn ohun elo ipinlẹ miiran ti o pin kaakiri awọn apa pupọ.

Tẹlẹ bayi ni awọn awọsanma gbangba awọn apoti isura infomesonu nla wa bi Iṣẹ kan, ẹhin eyiti o jẹ Kubernetes, fun apẹẹrẹ: CockroachCloud, InfluxDB, PlanetScale. Iyẹn ni, ibi ipamọ data lori Kubernetes kii ṣe nkan nikan ti o ṣee ṣe ni imọ-jinlẹ, ṣugbọn tun nkan ti o ṣiṣẹ ni iṣe.

Percona ni awọn solusan orisun ṣiṣi meji fun Kubernetes:

  1. Kubernetes Onišẹ fun Percona Server fun MongoDB.
  2. Oluṣeto Kubernetes fun XtraDB CLUSTER jẹ iṣẹ ti o ni ibamu pẹlu MySQL ati pese wiwa giga ati aitasera. O tun le lo oju ipade kan ti wiwa giga ko ba nilo, fun apẹẹrẹ fun ibi ipamọ data dev.

Awọn olumulo Kubernetes le pin si awọn ẹgbẹ meji. Diẹ ninu awọn eniyan lo Kubernetes Awọn oniṣẹ taara - iwọnyi jẹ awọn olumulo to ti ni ilọsiwaju ti o ni oye to dara ti bii imọ-ẹrọ ṣe n ṣiṣẹ. Awọn miiran nṣiṣẹ lori ẹhin - iru awọn olumulo ni o nifẹ si nkan bi aaye data bi Iṣẹ kan, wọn ko fẹ lati ṣawari sinu awọn nuances ti Kubernetes. Fun ẹgbẹ keji ti awọn olumulo, a ni ojutu orisun ṣiṣi miiran - Percona DBaaS CLI Ọpa. Eyi jẹ ojutu esiperimenta fun awọn ti o fẹ lati gba orisun ṣiṣi DBaaS ti o da lori Kubernetes laisi oye jinlẹ ti imọ-ẹrọ.

Bii o ṣe le ṣiṣẹ Percona's DBaaS lori Ẹrọ Google Kubernetes

Google Kubernetes Engine, ni ero mi, jẹ ọkan ninu awọn imuse ti o ṣiṣẹ julọ ti imọ-ẹrọ Kubernetes. O wa ni ọpọlọpọ awọn agbegbe ti agbaye ati pe o ni Ọpa Laini Aṣẹ ti o rọrun ati irọrun (SDK), eyiti o fun ọ laaye lati ṣẹda awọn iwe afọwọkọ dipo ki o ṣakoso pẹlu ọwọ pẹpẹ.

Ni ibere fun DBaaS wa lati ṣiṣẹ, a nilo awọn paati wọnyi:

  1. Kubectl.
  2. Google awọsanma SDK.
  3. Percona DBaaS CLI.

Fi sori ẹrọ kubectl

A fi sori ẹrọ package fun ẹrọ iṣẹ rẹ, a yoo wo apẹẹrẹ ti Ubuntu. Awọn alaye diẹ sii nibi.

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

Fifi Google Cloud SDK sori ẹrọ

A fi sori ẹrọ package sọfitiwia ni ọna kanna. Awọn alaye diẹ sii nibi.

# 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

Fifi Percona DBaaS CLI sori ẹrọ

Fi sori ẹrọ lati awọn ibi ipamọ Percona. Ọpa Percona DBaaS CLI tun jẹ ọja idanwo, nitorinaa o wa ni ibi ipamọ idanwo, eyiti o gbọdọ ṣiṣẹ ni lọtọ, paapaa ti o ba ti fi awọn ibi ipamọ Percona sori tẹlẹ.

Ka siwaju nibi.

algorithm fifi sori ẹrọ:

  1. Ṣeto awọn ibi ipamọ Percona ni lilo irinṣẹ itusilẹ percona. Ni akọkọ o nilo lati ṣe igbasilẹ ati fi sori ẹrọ package-itumọ percona osise lati Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Mu paati ibi ipamọ irinṣẹ idanwo ṣiṣẹ bi atẹle:
    sudo percona-release enable tools experimental
    
  3. Fi sori ẹrọ package percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Eto soke ni isẹ ti irinše

Diẹ ẹ sii nipa awọn eto nibi.

Ni akọkọ o nilo lati wọle si akọọlẹ Google rẹ. Siwaju sii, Google Cloud gba olumulo laaye lati ni ọpọlọpọ awọn iṣẹ akanṣe ominira, nitorinaa o nilo lati pato iṣẹ akanṣe kan nipa lilo koodu fun iṣẹ akanṣe yii:

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

Nigbamii, a ṣẹda iṣupọ kan. Fun demo naa, Mo ṣẹda iṣupọ Kubernetes ti awọn apa mẹta nikan - eyi ni o kere julọ ti o nilo fun wiwa giga:

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

Aṣẹ kubectl atẹle n fun awọn anfani ti o fẹ si olumulo wa lọwọlọwọ:

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

Lẹhinna a ṣẹda aaye orukọ kan ki o jẹ ki o ṣiṣẹ. Aye orukọ jẹ, ni aijọju sọrọ, tun dabi iṣẹ akanṣe tabi agbegbe, ṣugbọn tẹlẹ inu iṣupọ Kubernetes kan. O jẹ ominira lati awọn iṣẹ akanṣe Google Cloud:

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

Bibẹrẹ iṣupọ

Ni kete ti a ba ti kọja nipasẹ awọn igbesẹ diẹ wọnyi, a le bẹrẹ iṣupọ apa mẹta pẹlu aṣẹ ti o rọrun yii:

# 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

Bii o ṣe le sopọ si iṣupọ kan

Nipa aiyipada, o wa ninu Kubernetes nikan. Iyẹn ni, ko wa lati ọdọ olupin yii lati eyiti o ti ṣiṣẹ aṣẹ “Ṣẹda”. Lati jẹ ki o wa, fun apẹẹrẹ, fun awọn idanwo pẹlu alabara kan, o nilo lati dari ibudo nipasẹ Port Mapping:

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

Lẹhinna a sopọ alabara MySQL rẹ:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Awọn aṣẹ iṣakoso iṣupọ ilọsiwaju

Aaye data lori IP gbangba

Ti o ba fẹ ojutu pipe diẹ sii fun wiwa iṣupọ, o le gba adiresi IP ita ita. Ni idi eyi, aaye data yoo wa lati ibikibi. Eyi ko ni aabo, ṣugbọn nigbagbogbo rọrun diẹ sii. Fun IP ita a lo aṣẹ wọnyi:

# 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

Ṣeto ọrọ igbaniwọle ni kedere

Dipo eto laileto ti n ṣẹda ọrọ igbaniwọle kan, o le ṣeto ọrọ igbaniwọle ni gbangba:

# 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

Mo n ṣe afihan iṣelọpọ awọn iwe afọwọkọ ni ọna kika eniyan, ṣugbọn ọna kika JSON tun ṣe atilẹyin.

Pa wiwa giga

Pẹlu aṣẹ atẹle o le mu wiwa giga kuro lati ran oju ipade kan lọ:

# 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

Eyi jẹ ojutu kan fun awọn iṣẹ ṣiṣe idanwo lati gba MySQL soke ati ṣiṣe ni yarayara ati irọrun bi o ti ṣee, ṣe idanwo rẹ, ati lẹhinna ku si isalẹ tabi lo fun idagbasoke.

Ohun elo Percona DBaaS CLI ṣe iranlọwọ fun ọ lati ṣaṣeyọri ojutu iru DBaaS kan lori Kubernetes. Ni akoko kanna, a tẹsiwaju lati ṣiṣẹ lori iṣẹ ṣiṣe ati lilo rẹ.

Iroyin yii ni akọkọ gbekalẹ ni @Databases Ipade nipasẹ Mail.ru Awọn solusan awọsanma&Tarantool. Wo видео awọn iṣẹ ṣiṣe miiran ati ṣe alabapin si awọn ikede iṣẹlẹ lori Telegram Ni ayika Kubernetes ni Mail.ru Group.

Kini ohun miiran lati ka lori koko:

  1. Awọn apoti isura infomesonu ni ipilẹ IIoT ode oni.
  2. Bii o ṣe le yan aaye data kan fun iṣẹ akanṣe ki o ko ni lati yan lẹẹkansi.

orisun: www.habr.com

Fi ọrọìwòye kun