Cara nggawe awan hibrida nggunakake Kubernetes sing bisa ngganti DBaaS

Jenengku Petr Zaitsev, aku CEO, pangadeg percona lan aku arep pitutur marang kowe:

  • kepiye kita teka saka solusi open source menyang Database minangka Layanan;
  • pendekatan apa sing ana kanggo nyebarake basis data ing mΓ©ga;
  • carane Kubernetes bisa ngganti DBaaS, mbusak katergantungan vendor lan njaga gamblang DBMS minangka layanan.

Artikel kasebut disiapake adhedhasar laporan ing @Databases Meetup dening Mail.ru Cloud Solutions & Tarantool. Yen sampeyan ora pengin maca, sampeyan bisa nonton:


Kepiye kita teka saka sumber terbuka menyang Database minangka Layanan ing mΓ©ga

Aku wis kerja ing open source wiwit pungkasan 90s. Rong puluh taun kepungkur, nggunakake open source, kayata database, ora gampang. Sampeyan kudu ndownload kode sumber, tembelan, ngumpulake lan mung nggunakake.

Open source banjur ngliwati seri simplifikasi:

  • Tar.gz lan INSTALL sumber sing perlu kanggo disusun;
  • paket karo dependensi kaya .deb lan .rpm, ngendi sampeyan mung kudu nginstal pesawat saka paket;
  • repositori paket kaya APT lan YUM, kanthi instalasi otomatis;
  • solusi kayata Docker lan Snap, sing ngidini sampeyan nampa paket kanthi instalasi tanpa dependensi eksternal.

AkibatΓ©, dadi luwih gampang nggunakake piranti lunak open source lan uga nyuda alangan kanggo mlebu menyang ngembangake aplikasi kasebut.

Ing wektu sing padha, ora kaya kahanan 20 taun kepungkur, nalika kabeh wong dadi pakar perakitan, saiki umume pangembang ora bisa nggawe alat sing digunakake saka sumber.

Nyatane, iki ora ala, amarga:

  1. Kita bisa nggunakake piranti lunak sing luwih rumit nanging luwih gampang digunakake. Contone, browser trep kanggo nggunakake, nanging kalebu akeh komponen open source lan ora trep kanggo mbangun saka ngeruk.
  2. Luwih akeh wong bisa dadi pangembang open source lan piranti lunak liyane, luwih akeh piranti lunak digunakake dening bisnis, lan kabutuhan luwih akeh.

Kakurangan iku langkah sabanjure ing simplification digandhengake karo nggunakake solusi maya, lan iki ndadΓ©kakΓ© menyang vendor lock-in tartamtu, sing, naleni siji supplier. Kita nggunakake solusi sing prasaja lan panyedhiya nggunakake komponen open source, nanging nyatane dipaku menyang salah sawijining awan gedhe. Tegese, cara paling gampang lan paling cepet kanggo nyebarake open source (lan piranti lunak sing kompatibel karo iku) ana ing awan, nggunakake API proprietary.

Nalika nerangake database ing awan, ana rong pendekatan:

  1. Nglumpukake infrastruktur database, kaya ing pusat data biasa. Yaiku, njupuk blok bangunan standar: ngitung, panyimpenan, lan liya-liyane, instal Linux lan database, banjur atur.
  2. Gunakake Database minangka Layanan, ing ngendi panyedhiya nawakake database sing wis siap ing njero awan.

DBaaS minangka pasar sing berkembang kanthi cepet amarga ngidini pangembang bisa kerja langsung karo database lan nyilikake karya rutin. Panyedhiya nindakake kanggo njamin Kasedhiyan Dhuwur lan skala gampang, patching database, serep, lan tuning kinerja.

Rong jinis Database minangka Layanan adhedhasar open source lan alternatif ing wangun Kubernetes

Ana rong jinis Database minangka Layanan kanggo database mbukak:

  1. Produk open source standar sing dikemas ing backend administrasi kanggo penyebaran lan manajemen sing gampang.
  2. Solusi komersial canggih kanthi macem-macem tambahan, kompatibel karo open source.

Kaloro opsi kasebut nyuda kemungkinan migrasi ing antarane awan lan nyuda portabilitas data lan aplikasi. Contone, senadyan kasunyatan manawa macem-macem jinis awan ndhukung MySQL standar sing padha, ana bedane sing signifikan ing antarane: ing operasi, kinerja, serep, lan liya-liyane. Migrasi saka siji awan menyang awan liyane bisa dadi tantangan, utamane kanggo aplikasi sing rumit.

Lan ing kene ana pitakonan - apa bisa entuk kenyamanan Database minangka Layanan, nanging minangka solusi open source sing prasaja?

Kabar sing ala yaiku, sayangΓ©, durung ana solusi kasebut ing pasar. Kabar apik yaiku ana Kubernetes, sing ngidini sampeyan ngetrapake solusi kasebut.

Kubernetes minangka sistem operasi kanggo awan utawa pusat data sing ngidini sampeyan nyebarake lan ngatur aplikasi ing sawetara server ing kluster tinimbang ing host siji.

Saiki Kubernetes dadi pimpinan ing kategori piranti lunak kasebut. Ana macem-macem solusi kanggo masalah kasebut, nanging dadi standar. Akeh perusahaan sing biyen fokus ing solusi alternatif saiki fokus ing adaptasi produk kanggo ndhukung Kubernetes.

Kajaba iku, Kubernetes minangka solusi universal sing didhukung ing awan pribadi, umum lan hibrida saka akeh vendor, contone: AWS, Google Cloud, Microsoft Azure, Solusi Cloud Mail.ru.

Carane Kubernetes dianggo karo database

Kubernetes wiwitane dirancang kanggo aplikasi stateless sing ngolah data nanging ora nyimpen apa-apa, kayata layanan mikro utawa aplikasi web. Database ana ing ujung liyane saka spektrum, yaiku, aplikasi stateful. Lan Kubernetes asline ora dimaksudake kanggo aplikasi kasebut.

Nanging, ana fitur sing muncul ing Kubernetes bubar sing ngidini panggunaan database lan aplikasi stateful liyane:

  1. Konsep StatefulSet minangka seri kabeh primitif kanggo ngolah acara babagan mungkasi karya pods lan ngleksanakake Graceful Shutdown (mati sing bisa diprediksi saka aplikasi).
  2. Volume terus-terusan yaiku nyimpen data sing ana gandhengane karo polong, obyek manajemen Kubernetes.
  3. Kerangka Operator - yaiku, kemampuan kanggo nggawe komponen kanggo ngatur database lan aplikasi stateful liyane sing disebarake ing akeh simpul.

Saiki ing awan umum ana Database gedhe minangka Layanan, sing mburi yaiku Kubernetes, contone: CockroachCloud, InfluxDB, PlanetScale. Tegese, database ing Kubernetes ora mung sing bisa ditindakake kanthi teoritis, nanging uga ana sing bisa ditindakake.

Percona duwe rong solusi open source kanggo Kubernetes:

  1. Operator Kubernetes kanggo Server Percona kanggo MongoDB.
  2. Operator Kubernetes kanggo XtraDB CLUSTER minangka layanan sing kompatibel karo MySQL lan nyedhiyakake kasedhiyan lan konsistensi sing dhuwur. Sampeyan uga bisa nggunakake simpul siji yen kasedhiyan dhuwur ora dibutuhake, contone kanggo database dev.

Pangguna Kubernetes bisa dipΓ©rang dadi rong klompok. Sawetara wong nggunakake Operator Kubernetes kanthi langsung - iki utamane pangguna maju sing duwe pangerten sing apik babagan cara kerja teknologi kasebut. Liyane mbukak ing backend - kedhaftar kaya kasengsem ing kaya Database minangka Layanan, padha ora pengin delve menyang nuansa saka Kubernetes. Kanggo klompok pangguna kapindho, kita duwe solusi open source liyane - Percona DBaaS CLI Tool. Iki minangka solusi eksperimen kanggo sing pengin entuk DBaaS open source adhedhasar Kubernetes tanpa ngerti babagan teknologi kasebut.

Carane mbukak DBaaS Percona ing Google Kubernetes Engine

Google Kubernetes Engine, miturut pendapatku, minangka salah sawijining implementasi teknologi Kubernetes sing paling fungsional. Kasedhiya ing pirang-pirang wilayah ing donya lan nduweni Alat Command Line (SDK) sing prasaja lan trep, sing ngidini sampeyan nggawe skrip tinimbang ngatur platform kanthi manual.

Supaya DBaaS bisa digunakake, kita butuh komponen ing ngisor iki:

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

Instal kubectl

Kita nginstal paket kanggo sistem operasi sampeyan, kita bakal ndeleng conto Ubuntu. rincian liyane kene.

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

Nginstal Google Cloud SDK

Kita nginstal paket piranti lunak kanthi cara sing padha. rincian liyane kene.

# 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

Nginstal Percona DBaaS CLI

Instal saka repositori Percona. Percona DBaaS CLI Tool isih minangka produk eksperimen, mula dumunung ing gudang eksperimen, sing kudu diaktifake kanthi kapisah, sanajan sampeyan wis nginstal repositori Percona.

Waca liyane kene.

Algoritma instalasi:

  1. Nggawe repositori Percona nggunakake alat percona-release. Pisanan sampeyan kudu ngundhuh lan nginstal paket percona-release resmi saka Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Aktifake komponen panyimpenan alat eksperimen kaya ing ngisor iki:
    sudo percona-release enable tools experimental
    
  3. Instal paket percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Nyetel operasi komponen

Luwih lengkap babagan setelan kene.

Pisanan sampeyan kudu mlebu menyang akun Google. Salajengipun, Google Cloud ngidini siji pangguna duwe akeh proyek independen, dadi sampeyan kudu nemtokake proyek sing digunakake nggunakake kode kanggo proyek iki:

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

Sabanjure, kita nggawe kluster. Kanggo demo, aku nggawe klompok Kubernetes mung telung simpul - iki minangka minimal sing dibutuhake kanggo kasedhiyan dhuwur:

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

Printah kubectl ing ngisor iki menehi hak istimewa sing dikarepake kanggo pangguna saiki:

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

Banjur kita nggawe namespace lan nggawe aktif. Namespace, kira-kira, uga kaya proyek utawa lingkungan, nanging wis ana ing kluster Kubernetes. Iki independen saka proyek Google Cloud:

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

Miwiti kluster

Sawise kita wis ngliwati sawetara langkah iki, kita bisa miwiti kluster telung simpul kanthi printah prasaja iki:

# 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

Carane nyambungake menyang kluster

Kanthi gawan, iku mung kasedhiya ing Kubernetes. Yaiku, ora bisa diakses saka server iki saka ngendi sampeyan mbukak printah "Gawe". Kanggo kasedhiya, contone, kanggo tes karo klien, sampeyan kudu nerusake port liwat Port Mapping:

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

Banjur kita nyambungake klien MySQL sampeyan:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

printah Manajemen cluster Lanjut

Database ing IP umum

Yen sampeyan pengin solusi sing luwih permanen kanggo kasedhiyan kluster, sampeyan bisa njaluk alamat IP eksternal. Ing kasus iki, database bakal bisa diakses saka ngendi wae. Iki kurang aman, nanging asring luwih trep. Kanggo IP eksternal kita nggunakake printah ing ngisor iki:

# 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

Nyetel sandhi kanthi jelas

Tinimbang sistem nggawe tembung sandhi kanthi acak, sampeyan bisa nyetel sandhi kanthi tegas:

# 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

Aku nuduhake output skrip ing format sing bisa diwaca manungsa, nanging format JSON uga didhukung.

Pateni kasedhiyan dhuwur

Kanthi printah ing ngisor iki sampeyan bisa mateni kasedhiyan dhuwur kanggo masang simpul siji:

# 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

Iki minangka solusi kanggo nguji tugas supaya MySQL bisa digunakake kanthi cepet lan gampang, nyoba, banjur mateni utawa gunakake kanggo pangembangan.

Alat Percona DBaaS CLI mbantu sampeyan entuk solusi kaya DBaaS ing Kubernetes. Ing wektu sing padha, kita terus ngupayakake fungsi lan kegunaane.

Laporan iki pisanan ditampilake ing @Databases Meetup dening Mail.ru Cloud Solutions&Tarantool. Delengen Π²ΠΈΠ΄Π΅ΠΎ pagelaran liyane lan langganan pengumuman acara ing Telegram Sak Kubernetes ing Mail.ru Group.

Apa maneh sing kudu diwaca babagan topik:

  1. Database ing platform IIoT modern.
  2. Carane milih database kanggo proyek supaya sampeyan ora kudu milih maneh.

Source: www.habr.com

Add a comment