Paano bumuo ng hybrid cloud gamit ang Kubernetes na maaaring palitan ang DBaaS

Ang pangalan ko ay Petr Zaitsev, ako ang CEO, tagapagtatag percona at gusto kong sabihin sa iyo:

  • kung paano kami nagmula sa mga open source na solusyon sa Database bilang isang Serbisyo;
  • anong mga diskarte ang umiiral sa pag-deploy ng mga database sa cloud;
  • kung paano mapapalitan ng Kubernetes ang DBaaS, na inaalis ang dependency sa vendor at pinapanatili ang pagiging simple ng DBMS bilang isang serbisyo.

Ang artikulo ay inihanda batay sa isang ulat sa @Databases Meetup ng Mail.ru Cloud Solutions & Tarantool. Kung ayaw mong basahin, maaari mong panoorin ang:


Paano kami nagmula sa open source patungo sa Database bilang isang Serbisyo sa cloud

Nagtatrabaho ako sa open source mula noong huling bahagi ng 90s. Dalawampung taon na ang nakalilipas, ang paggamit ng open source, tulad ng mga database, ay hindi ganoon kadali. Ito ay kinakailangan upang i-download ang source code, i-patch ito, i-compile ito at pagkatapos ay gamitin ito.

Ang open source pagkatapos ay dumaan sa isang serye ng mga pagpapasimple:

  • Tar.gz at I-INSTALL ang mga mapagkukunan na kailangang i-compile;
  • mga package na may mga dependency tulad ng .deb at .rpm, kung saan kailangan mo lang mag-install ng set ng mga package;
  • mga repositoryo ng package tulad ng APT at YUM, kung saan awtomatiko ang pag-install;
  • mga solusyon tulad ng Docker at Snap, na nagbibigay-daan sa iyong makatanggap ng mga pakete sa pamamagitan ng pag-install nang walang mga panlabas na dependency.

Bilang resulta, nagiging mas madali ang paggamit ng open source software at pinapababa din ang hadlang sa pagpasok sa pagbuo ng mga naturang application.

Kasabay nito, hindi tulad ng sitwasyon 20 taon na ang nakakaraan, noong ang lahat ay isang eksperto sa pagpupulong, ngayon ang karamihan sa mga developer ay hindi maaaring bumuo ng mga tool na ginagamit nila mula sa pinagmulan.

Sa katunayan, hindi ito masama, dahil:

  1. Maaari kaming gumamit ng mas kumplikado ngunit mas madaling gamitin na software. Halimbawa, maginhawang gamitin ang isang browser, ngunit may kasama itong maraming open source na bahagi at hindi maginhawang buuin mula sa simula.
  2. Mas maraming tao ang maaaring maging mga developer ng open source at iba pang software, mas maraming software ang ginagamit ng mga negosyo, at mas malaki ang pangangailangan para dito.

Ang downside ay ang susunod na hakbang sa pagpapasimple ay nauugnay sa paggamit ng mga solusyon sa ulap, at ito ay humahantong sa isang partikular na vendor lock-in, iyon ay, nagbubuklod sa isang supplier. Gumagamit kami ng mga simpleng solusyon at gumagamit ang mga provider ng mga open source na bahagi, ngunit sa katunayan sila ay ipinako sa isa sa malalaking ulap. Ibig sabihin, ang pinakamadali at pinakamabilis na paraan para mag-deploy ng open source (at software na katugma dito) ay nasa cloud, gamit ang proprietary API.

Pagdating sa mga database sa cloud, mayroong dalawang diskarte:

  1. Ipunin ang imprastraktura ng database, tulad ng sa isang regular na data center. Iyon ay, kumuha ng karaniwang mga bloke ng gusali: compute, storage, at iba pa, i-install ang Linux at isang database sa mga ito, at i-configure ang mga ito.
  2. Gamitin ang Database bilang isang Serbisyo, kung saan nag-aalok ang provider ng isang handa na database sa loob ng cloud.

Ang DBaaS ay isang mabilis na lumalagong merkado sa ngayon dahil pinapayagan nito ang mga developer na direktang gumana sa mga database at pinapaliit ang karaniwang gawain. Ang provider ay nagsasagawa upang matiyak ang Mataas na Availability at madaling pag-scale, pag-aayos ng database, pag-backup, at pag-tune ng pagganap.

Dalawang uri ng Database bilang isang Serbisyo batay sa open source at isang alternatibo sa anyo ng mga Kubernetes

Mayroong dalawang uri ng Database bilang Serbisyo para sa mga bukas na database:

  1. Isang karaniwang open source na produkto na nakabalot sa isang backend ng administrasyon para sa madaling pag-deploy at pamamahala.
  2. Isang advanced na komersyal na solusyon na may iba't ibang mga add-on, tugma sa open source.

Binabawasan ng parehong mga opsyon ang posibilidad ng paglipat sa pagitan ng mga ulap at binabawasan ang portability ng data at mga application. Halimbawa, sa kabila ng katotohanan na ang iba't ibang uri ng mga ulap ay sumusuporta sa parehong karaniwang MySQL, may mga makabuluhang pagkakaiba sa pagitan ng mga ito: sa operasyon, pagganap, backup, at iba pa. Ang paglipat mula sa isang ulap patungo sa isa pa ay maaaring maging mahirap, lalo na para sa mga kumplikadong aplikasyon.

At dito lumitaw ang tanong - posible bang makuha ang kaginhawahan ng Database bilang isang Serbisyo, ngunit bilang isang simpleng solusyon sa open source?

Ang masamang balita ay, sa kasamaang-palad, wala pang ganoong mga solusyon sa merkado. Ang magandang balita ay mayroong Kubernetes, na nagbibigay-daan sa iyong ipatupad ang mga naturang solusyon.

Ang Kubernetes ay isang operating system para sa cloud o data center na nagbibigay-daan sa iyong mag-deploy at mamahala ng isang application sa maraming server sa isang cluster sa halip na sa isang host.

Ngayon ang Kubernetes ang nangunguna sa kategorya ng naturang software. Mayroong maraming iba't ibang mga solusyon para sa mga naturang problema, ngunit ito ang naging pamantayan. Maraming kumpanyang dating nakatuon sa mga alternatibong solusyon ang tumutuon na ngayon sa pag-angkop sa kanilang mga produkto para suportahan ang Kubernetes.

Bilang karagdagan, ang Kubernetes ay isang unibersal na solusyon na sinusuportahan sa pribado, pampubliko at hybrid na ulap ng maraming vendor, halimbawa: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Paano gumagana ang Kubernetes sa mga database

Ang Kubernetes ay orihinal na idinisenyo para sa mga stateless na application na nagpoproseso ng data ngunit hindi nag-iimbak ng anuman, gaya ng mga microservice o web application. Ang mga database ay nasa kabilang dulo ng spectrum, iyon ay, sila ay mga stateful application. At ang Kubernetes ay hindi orihinal na inilaan para sa mga naturang aplikasyon.

Gayunpaman, may mga feature na lumitaw sa Kubernetes kamakailan na nagpapahintulot sa paggamit ng mga database at iba pang stateful na application:

  1. Ang konsepto ng StatefulSet ay isang buong serye ng mga primitive para sa pagproseso ng mga kaganapan tungkol sa pagpapahinto sa trabaho ng mga pod at pagpapatupad ng Graceful Shutdown (nahuhulaang pagsara ng application).
  2. Ang Persistent Volumes ay mga data store na nauugnay sa mga pod, mga object sa pamamahala ng Kubernetes.
  3. Operator Framework - iyon ay, ang kakayahang lumikha ng mga bahagi para sa pamamahala ng mga database at iba pang stateful application na ipinamamahagi sa maraming node.

Nasa pampublikong ulap na ngayon ay may malalaking Database bilang Serbisyo, ang backend nito ay Kubernetes, halimbawa: CockroachCloud, InfluxDB, PlanetScale. Iyon ay, ang isang database sa Kubernetes ay hindi lamang isang bagay na posible sa teorya, ngunit isang bagay din na gumagana sa pagsasanay.

Ang Percona ay may dalawang open source na solusyon para sa Kubernetes:

  1. Kubernetes Operator para sa Percona Server para sa MongoDB.
  2. Ang Kubernetes Operator para sa XtraDB CLUSTER ay isang serbisyo na tugma sa MySQL at nagbibigay ng mataas na kakayahang magamit at pare-pareho. Maaari ka ring gumamit ng isang node kung hindi kailangan ang mataas na kakayahang magamit, halimbawa para sa isang database ng dev.

Ang mga gumagamit ng Kubernetes ay maaaring hatiin sa dalawang grupo. Ang ilang mga tao ay direktang gumagamit ng Kubernetes Operators - ito ay pangunahing mga advanced na user na may mahusay na pag-unawa sa kung paano gumagana ang teknolohiya. Ang iba ay nagpapatakbo nito sa backend - ang mga naturang user ay interesado sa isang bagay tulad ng Database bilang isang Serbisyo, hindi nila nais na bungkalin ang mga nuances ng Kubernetes. Para sa pangalawang pangkat ng mga user, mayroon kaming isa pang open source na solusyon - Percona DBaaS CLI Tool. Isa itong pang-eksperimentong solusyon para sa mga gustong makakuha ng open source na DBaaS batay sa Kubernetes nang walang malalim na pag-unawa sa teknolohiya.

Paano patakbuhin ang DBaaS ng Percona sa Google Kubernetes Engine

Ang Google Kubernetes Engine, sa aking opinyon, ay isa sa mga pinaka-functional na pagpapatupad ng teknolohiya ng Kubernetes. Available ito sa maraming rehiyon ng mundo at may simple at maginhawang Command Line Tool (SDK), na nagbibigay-daan sa iyong lumikha ng mga script sa halip na manu-manong pamahalaan ang platform.

Upang gumana ang aming DBaaS, kailangan namin ang mga sumusunod na bahagi:

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

I-install ang kubectl

Ini-install namin ang package para sa iyong operating system, titingnan namin ang halimbawa ng Ubuntu. Higit pang mga detalye dito.

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-install ng Google Cloud SDK

Ini-install namin ang software package sa parehong paraan. Higit pang mga detalye dito.

# 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-install ng Percona DBaaS CLI

I-install mula sa mga repositoryo ng Percona. Ang Percona DBaaS CLI Tool ay isang pang-eksperimentong produkto pa rin, kaya ito ay matatagpuan sa eksperimentong repositoryo, na dapat paganahin nang hiwalay, kahit na mayroon ka nang mga Percona repository na naka-install.

pa dito.

Algoritmo ng pag-install:

  1. I-set up ang Percona repository gamit ang percona-release tool. Una kailangan mong i-download at i-install ang opisyal na percona-release package mula sa Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Paganahin ang bahagi ng imbakan ng pang-eksperimentong tool tulad ng sumusunod:
    sudo percona-release enable tools experimental
    
  3. I-install ang percona-dbaas-cli package:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Pag-set up ng pagpapatakbo ng mga bahagi

Higit pa tungkol sa mga setting dito.

Una kailangan mong mag-log in sa iyong Google account. Dagdag pa, pinapayagan ng Google Cloud ang isang user na magkaroon ng maraming independiyenteng proyekto, kaya kailangan mong tumukoy ng gumaganang proyekto gamit ang code para sa proyektong ito:

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

Susunod, lumikha kami ng isang kumpol. Para sa demo, gumawa ako ng Kubernetes cluster na may tatlong node lang - ito ang minimum na kinakailangan para sa mataas na availability:

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

Ang sumusunod na kubectl command ay nagbibigay ng ninanais na mga pribilehiyo sa aming kasalukuyang gumagamit:

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

Pagkatapos ay lumikha kami ng isang namespace at gawin itong aktibo. Ang namespace ay, sa halos pagsasalita, ay tulad din ng isang proyekto o kapaligiran, ngunit nasa loob na ng isang Kubernetes cluster. Ito ay independyente mula sa mga proyekto ng Google Cloud:

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

Pagsisimula ng kumpol

Kapag nalampasan na natin ang ilang hakbang na ito, maaari tayong magsimula ng three-node cluster gamit ang simpleng command na ito:

# 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

Paano kumonekta sa isang kumpol

Bilang default, available lang ito sa loob ng Kubernetes. Iyon ay, hindi ito maa-access mula sa server na ito kung saan mo pinatakbo ang command na "Lumikha". Upang gawin itong available, halimbawa, para sa mga pagsubok sa isang kliyente, kailangan mong ipasa ang port sa pamamagitan ng Port Mapping:

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

Pagkatapos ay ikinonekta namin ang iyong MySQL client:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Mga advanced na command sa pamamahala ng cluster

Database sa pampublikong IP

Kung gusto mo ng mas permanenteng solusyon para sa pagkakaroon ng cluster, maaari kang makakuha ng panlabas na IP address. Sa kasong ito, ang database ay maa-access mula sa kahit saan. Ito ay hindi gaanong ligtas, ngunit kadalasan ay mas maginhawa. Para sa panlabas na IP ginagamit namin ang sumusunod na utos:

# 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

Tahasang itakda ang password

Sa halip na random na bumuo ng password ang system, maaari mong tahasang itakda ang password:

# 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

Ipinapakita ko ang output ng mga script sa format na nababasa ng tao, ngunit sinusuportahan din ang format na JSON.

Ino-off ang mataas na availability

Gamit ang sumusunod na command maaari mong hindi paganahin ang mataas na kakayahang magamit upang mag-deploy ng isang 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

Ito ay isang solusyon para sa pagsubok ng mga gawain upang patakbuhin ang MySQL nang mabilis at madali hangga't maaari, subukan ito, at pagkatapos ay isara ito o gamitin ito para sa pag-unlad.

Tinutulungan ka ng tool na Percona DBaaS CLI na makamit ang isang tulad-DBaaS na solusyon sa Kubernetes. Kasabay nito, patuloy kaming nagsusumikap sa paggana at kakayahang magamit nito.

Ang ulat na ito ay unang ipinakita sa @Databases Meetup sa pamamagitan ng Mail.ru Cloud Solutions&Tarantool. Tingnan mo video iba pang mga pagtatanghal at mag-subscribe sa mga anunsyo ng kaganapan sa Telegram Sa paligid ng Kubernetes sa Mail.ru Group.

Ano pa ang mababasa sa paksa:

  1. Mga database sa isang modernong platform ng IIoT.
  2. Paano pumili ng isang database para sa isang proyekto upang hindi mo na kailangang pumili muli.

Pinagmulan: www.habr.com

Magdagdag ng komento