Giunsa paghimo ang usa ka hybrid nga panganod gamit ang Kubernetes nga makapuli sa DBaaS

Ang akong ngalan mao si Petr Zaitsev, ako ang CEO, founder percona ug gusto kong isulti kanimo:

  • kung giunsa kami gikan sa bukas nga gigikanan nga mga solusyon sa Database ingon usa ka Serbisyo;
  • unsa nga mga pamaagi ang anaa sa pagdeploy sa mga database sa panganod;
  • unsaon pagpuli sa Kubernetes ang DBaaS, pagwagtang sa pagsalig sa vendor ug pagmintinar sa kayano sa DBMS isip usa ka serbisyo.

Ang artikulo giandam base sa usa ka taho sa @Databases Meetup ni Mail.ru Cloud Solutions & Tarantool. Kung dili nimo gusto magbasa, mahimo nimong tan-awon:


Giunsa kami gikan sa bukas nga gigikanan hangtod sa Database ingon usa ka Serbisyo sa panganod

Nagtrabaho ko sa open source sukad sa ulahing bahin sa 90s. Baynte ka tuig na ang milabay, ang paggamit sa open source, sama sa mga database, dili kaayo sayon. Kinahanglan nga i-download ang source code, i-patch kini, i-compile kini ug dayon gamiton kini.

Ang open source dayon miagi sa sunodsunod nga pagpayano:

  • Tar.gz ug I-INSTALL ang mga tinubdan nga kinahanglan nga i-compile;
  • mga pakete nga adunay mga dependency sama sa .deb ug .rpm, diin kinahanglan nimo nga i-install ang usa ka hugpong sa mga pakete;
  • mga repositoryo sa package sama sa APT ug YUM, diin awtomatiko ang pag-install;
  • mga solusyon sama sa Docker ug Snap, nga nagtugot kanimo nga makadawat mga pakete pinaagi sa pag-install nga wala’y mga dependency sa gawas.

Ingon nga resulta, kini nahimong mas sayon ​​sa paggamit sa open source software ug usab pagpaubos sa babag sa pagsulod ngadto sa pagpalambo sa maong mga aplikasyon.

Sa samang higayon, dili sama sa sitwasyon 20 ka tuig na ang milabay, sa dihang ang tanan usa ka eksperto sa asembliya, karon kadaghanan sa mga developers dili makahimo sa mga himan nga ilang gigamit gikan sa tinubdan.

Sa tinuud, dili kini daotan, tungod kay:

  1. Makagamit kami og mas komplikado apan mas user-friendly nga software. Pananglitan, ang usa ka browser sayon ​​​​gamiton, apan kini naglakip sa daghang mga open source nga mga sangkap ug dili kombenyente sa pagtukod gikan sa wala.
  2. Daghang mga tawo ang mahimong mga developer sa open source ug uban pang software, mas daghang software ang gigamit sa mga negosyo, ug mas dako ang panginahanglan niini.

Ang downside mao nga ang sunod nga lakang sa pagpayano nalangkit sa paggamit sa mga solusyon sa panganod, ug kini modala ngadto sa usa ka piho nga vendor lock-in, nga mao, pagbugkos sa usa ka supplier. Gigamit namo ang yano nga mga solusyon ug ang mga tighatag naggamit sa bukas nga tinubdan nga mga sangkap, apan sa pagkatinuod sila gilansang sa usa sa dagkong mga panganod. Kana mao, ang pinakasayon ​​ug pinakapaspas nga paagi sa pag-deploy sa open source (ug software compatible niini) anaa sa clouds, gamit ang proprietary API.

Kung bahin sa mga database sa panganod, adunay duha nga pamaagi:

  1. Tiguma ang imprastraktura sa database, sama sa usa ka regular nga sentro sa datos. Kana mao, kuhaa ang standard nga mga bloke sa pagtukod: pag-compute, pagtipig, ug uban pa, i-install ang Linux ug usa ka database sa kanila, ug i-configure kini.
  2. Gamita ang Database isip Serbisyo, diin ang provider nagtanyag og andam nga database sulod sa panganod.

Ang DBaaS usa ka paspas nga nagtubo nga merkado karon tungod kay gitugotan niini ang mga developer nga direktang magtrabaho sa mga database ug makunhuran ang naandan nga trabaho. Ang tighatag naningkamot sa pagsiguro sa Taas nga Availability ug sayon ​​nga pag-scaling, database patching, backups, ug performance tuning.

Duha ka klase sa Database isip Serbisyo base sa open source ug alternatibo sa porma sa Kubernetes

Adunay duha ka matang sa Database isip Serbisyo para sa bukas nga mga database:

  1. Usa ka sumbanan nga open source nga produkto nga giputos sa usa ka backend sa administrasyon alang sa dali nga pag-deploy ug pagdumala.
  2. Usa ka abante nga solusyon sa komersyo nga adunay lainlaing mga add-on, nahiuyon sa bukas nga gigikanan.

Ang duha ka mga kapilian makapakunhod sa posibilidad sa paglalin tali sa mga panganod ug makunhuran ang pagkadala sa datos ug mga aplikasyon. Pananglitan, bisan pa sa kamatuoran nga ang lain-laing mga matang sa mga panganod nagsuporta sa esensya sa sama nga standard MySQL, adunay mahinungdanon nga mga kalainan tali kanila: sa operasyon, performance, backup, ug uban pa. Ang paglalin gikan sa usa ka panganod ngadto sa lain mahimong mahagiton, labi na sa mga komplikado nga aplikasyon.

Ug dinhi mitungha ang pangutana - posible ba nga makuha ang kasayon ​​​​sa Database ingon usa ka Serbisyo, apan ingon usa ka yano nga solusyon sa bukas nga gigikanan?

Ang dili maayo nga balita mao nga, sa kasubo, wala pa ang ingon nga mga solusyon sa merkado. Ang maayong balita mao nga adunay Kubernetes, nga nagtugot kanimo sa pagpatuman sa ingon nga mga solusyon.

Ang Kubernetes usa ka operating system alang sa cloud o data center nga nagtugot kanimo sa pag-deploy ug pagdumala sa usa ka aplikasyon sa daghang mga server sa usa ka cluster kaysa sa usa ka host.

Karon ang Kubernetes mao ang nanguna sa kategorya sa ingon nga software. Adunay daghang lainlaing mga solusyon alang sa ingon nga mga problema, apan nahimo kini nga sumbanan. Daghang mga kompanya nga kaniadto nagpunting sa mga alternatibong solusyon karon nagpunting sa pagpahiangay sa ilang mga produkto aron suportahan ang Kubernetes.

Dugang pa, ang Kubernetes usa ka unibersal nga solusyon nga gisuportahan sa pribado, publiko ug hybrid nga panganod sa daghang mga tigbaligya, pananglitan: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Giunsa pagtrabaho sa Kubernetes ang mga database

Ang Kubernetes orihinal nga gidisenyo alang sa walay estado nga mga aplikasyon nga nagproseso sa datos apan wala magtipig bisan unsa, sama sa mga microservice o mga aplikasyon sa web. Ang mga database anaa sa pikas tumoy sa spectrum, nga mao, kini mga stateful nga aplikasyon. Ug ang Kubernetes dili orihinal nga gituyo alang sa ingon nga mga aplikasyon.

Bisan pa, adunay mga bahin nga nagpakita sa Kubernetes bag-o lang nga nagtugot sa paggamit sa mga database ug uban pang stateful nga mga aplikasyon:

  1. Ang konsepto sa StatefulSet usa ka tibuok nga serye sa mga primitives alang sa pagproseso sa mga panghitabo mahitungod sa paghunong sa trabaho sa mga pod ug pagpatuman sa Graceful Shutdown (predictable shutdown sa aplikasyon).
  2. Ang Persistent Volumes kay mga data store nga nalambigit sa mga pod, mga butang sa pagdumala sa Kubernetes.
  3. Operator Framework - nga mao, ang abilidad sa paghimo sa mga sangkap alang sa pagdumala sa mga database ug uban pang stateful nga mga aplikasyon nga giapod-apod sa daghang mga node.

Naa na karon sa publiko nga mga panganod adunay daghang mga Database ingon usa ka Serbisyo, ang backend niini mao ang Kubernetes, pananglitan: CockroachCloud, InfluxDB, PlanetScale. Kana mao, ang usa ka database sa Kubernetes dili lamang usa ka butang nga posible sa teorya, apan usa usab ka butang nga nagtrabaho sa praktis.

Ang Percona adunay duha ka open source nga solusyon para sa Kubernetes:

  1. Kubernetes Operator para sa Percona Server para sa MongoDB.
  2. Ang Kubernetes Operator alang sa XtraDB CLUSTER usa ka serbisyo nga nahiuyon sa MySQL ug naghatag taas nga pagkaanaa ug pagkamakanunayon. Mahimo usab nimo gamiton ang usa ka node kung dili kinahanglan ang taas nga magamit, pananglitan alang sa usa ka database sa dev.

Ang mga tiggamit sa Kubernetes mahimong bahinon sa duha ka grupo. Ang ubang mga tawo direkta nga naggamit sa Kubernetes Operators - kini kasagaran mga advanced nga tiggamit nga adunay maayo nga pagsabut kung giunsa ang teknolohiya molihok. Ang uban nagpadagan niini sa backend - ang ingon nga mga tiggamit interesado sa usa ka butang sama sa Database ingon usa ka Serbisyo, dili nila gusto nga susihon ang mga nuances sa Kubernetes. Alang sa ikaduhang grupo sa mga tiggamit, aduna kami laing open source nga solusyon - Percona DBaaS CLI Tool. Kini usa ka eksperimento nga solusyon alang niadtong gusto nga makakuha og open source DBaaS base sa Kubernetes nga walay lawom nga pagsabot sa teknolohiya.

Giunsa pagpadagan ang DBaaS ni Percona sa Google Kubernetes Engine

Ang Google Kubernetes Engine, sa akong opinyon, usa sa labing magamit nga pagpatuman sa teknolohiya sa Kubernetes. Anaa kini sa daghang mga rehiyon sa kalibutan ug adunay usa ka yano ug kombenyente nga Command Line Tool (SDK), nga nagtugot kanimo sa paghimo og mga script kaysa sa mano-mano nga pagdumala sa plataporma.

Aron molihok ang among DBaaS, kinahanglan namon ang mga musunud nga sangkap:

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

I-install ang kubectl

Gi-install namon ang package alang sa imong operating system, among tan-awon ang pananglitan sa Ubuntu. Dugang detalye dinhi.

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

Pag-instalar sa Google Cloud SDK

Gi-install namon ang software package sa parehas nga paagi. Dugang detalye dinhi.

# 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

Pag-instalar sa Percona DBaaS CLI

Pag-instalar gikan sa mga repositoryo sa Percona. Ang Percona DBaaS CLI Tool kay usa gihapon ka eksperimento nga produkto, mao nga kini nahimutang sa eksperimento nga repository, nga kinahanglan nga bulagon nga mahimo, bisan kung ikaw adunay Percona repository nga na-install.

Basaha ang dugang pa dinhi.

Pag-instalar sa algorithm:

  1. I-set up ang Percona repository gamit ang percona-release tool. Una kinahanglan nimo nga i-download ug i-install ang opisyal nga percona-release nga pakete gikan sa Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. I-enable ang experimental tool repository component sama sa mosunod:
    sudo percona-release enable tools experimental
    
  3. I-install ang percona-dbaas-cli nga pakete:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Pag-set up sa operasyon sa mga sangkap

Dugang pa bahin sa mga setting dinhi.

Una kinahanglan nimo nga mag-log in sa imong Google account. Dugang pa, gitugotan sa Google Cloud ang usa ka tiggamit nga adunay daghang mga independente nga proyekto, mao nga kinahanglan nimo nga ipiho ang usa ka nagtrabaho nga proyekto gamit ang code alang niini nga proyekto:

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

Sunod, maghimo kami usa ka cluster. Alang sa demo, naghimo ko og Kubernetes cluster nga tulo ra ka node - kini ang minimum nga gikinahanglan alang sa taas nga anaa:

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

Ang mosunod nga kubectl nga sugo naghatag sa gitinguha nga mga pribilehiyo sa atong kasamtangang tiggamit:

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

Dayon maghimo kami og namespace ug himoon kini nga aktibo. Ang namespace, sa halos pagkasulti, sama usab sa usa ka proyekto o palibot, apan naa sa sulod sa usa ka Kubernetes cluster. Kini independente gikan sa mga proyekto sa Google Cloud:

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

Pagsugod sa cluster

Kung nahuman na nato kining pipila ka mga lakang, makasugod kita og tulo ka node cluster uban niining yano nga sugo:

# 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

Unsaon pagkonektar sa usa ka cluster

Sa kasagaran, kini anaa lamang sa sulod sa Kubernetes. Kana mao, dili kini ma-access gikan sa kini nga server diin imong gipadagan ang "Paghimo" nga mando. Aron magamit kini, pananglitan, alang sa mga pagsulay sa usa ka kliyente, kinahanglan nimo nga ipasa ang pantalan pinaagi sa Port Mapping:

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

Dayon among ikonektar ang imong MySQL client:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Mga advanced nga mando sa pagdumala sa cluster

Database sa publiko nga IP

Kung gusto nimo ang usa ka labi ka permanente nga solusyon alang sa pagkaanaa sa cluster, mahimo ka makakuha usa ka eksternal nga IP address. Sa kini nga kaso, ang database mahimong ma-access gikan sa bisan diin. Kini dili kaayo luwas, apan kasagaran mas sayon. Alang sa eksternal nga IP among gigamit ang mosunod nga sugo:

# 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

Klaro nga itakda ang password

Imbis nga ang sistema nga random nga maghimo usa ka password, mahimo nimong itakda ang password nga klaro:

# 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

Gipakita nako ang output sa mga script sa format nga mabasa sa tawo, apan gisuportahan usab ang format sa JSON.

Gipalong ang taas nga pagkaanaa

Uban sa mosunud nga mando mahimo nimong ma-disable ang taas nga pagkaanaa aron ma-deploy ang usa ka node:

# 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

Kini usa ka solusyon alang sa pagsulay sa mga buluhaton aron mapaandar ang MySQL sa labing kadali ug kadali kutob sa mahimo, sulayan kini, ug dayon isira kini o gamiton kini alang sa kalamboan.

Ang Percona DBaaS CLI tool makatabang nimo nga makab-ot ang sama sa DBaaS nga solusyon sa Kubernetes. Sa parehas nga oras, nagpadayon kami sa pagtrabaho sa pag-andar ug pagkagamit niini.

Kini nga taho unang gipresentar sa @Databases Meetup pinaagi sa Mail.ru Cloud Solutions&Tarantool. Tan-awa video uban pang mga pasundayag ug pag-subscribe sa mga pahibalo sa mga panghitabo sa Telegram Sa palibot sa Kubernetes sa Mail.ru Group.

Unsa pa ang basahon sa hilisgutan:

  1. Mga database sa modernong IIoT nga plataporma.
  2. Giunsa pagpili ang usa ka database alang sa usa ka proyekto aron dili ka na magpili pag-usab.

Source: www.habr.com

Idugang sa usa ka comment