Kumaha carana ngawangun awan hibrid nganggo Kubernetes anu tiasa ngagentos DBaaS

Nami abdi Petr Zaitsev, abdi CEO, pangadeg percona sareng abdi hoyong nyarios ka anjeun:

  • kumaha urang sumping ti solusi open source ka Database salaku Service;
  • pendekatan naon anu aya pikeun nyebarkeun pangkalan data dina méga;
  • kumaha Kubernetes tiasa ngagantikeun DBaaS, ngaleungitkeun kagumantungan padagang sareng ngajaga kesederhanaan DBMS salaku jasa.

Tulisan ieu disusun dumasar kana laporan di @Databases Meetup ku Mail.ru Cloud Solutions & Tarantool. Upami anjeun henteu hoyong maca, anjeun tiasa nonton:


Kumaha urang sumping ti open source ka Database salaku Service dina awan

Kuring geus digawé di open source saprak ahir 90s. Dua puluh taun ka tukang, ngagunakeun open source, kayaning database, teu jadi gampang. Ieu diperlukeun pikeun ngundeur kodeu sumber, patch eta, compile sarta ngan lajeng ngagunakeun eta.

Open source teras ngalangkungan sababaraha nyederhanakeun:

  • Tar.gz sareng INSTALL sumber anu kedah disusun;
  • bungkusan kalawan kagumantungan kawas .deb na .rpm, dimana anjeun ngan kudu masang sakumpulan bungkusan;
  • repositories pakét sapertos APT sareng YUM, dimana pamasangan otomatis;
  • solusi sapertos Docker sareng Snap, anu ngamungkinkeun anjeun nampi bungkusan ku pamasangan tanpa katergantungan éksternal.

Hasilna, janten langkung gampang ngagunakeun parangkat lunak open source sareng ngirangan halangan pikeun asup kana ngembangkeun aplikasi sapertos kitu.

Dina waktos anu sami, teu sapertos kaayaan 20 taun ka pengker, nalika sadayana ahli majelis, ayeuna kalolobaan pamekar henteu tiasa ngawangun alat anu dianggo tina sumberna.

Kanyataanna, ieu teu goréng, sabab:

  1. Urang bisa make software nu leuwih kompleks tapi leuwih ramah-pamaké. Contona, browser merenah ngagunakeun, tapi ngawengku loba komponén open source sarta teu merenah pikeun ngawangun ti scratch.
  2. Langkung seueur jalma tiasa janten pamekar open source sareng parangkat lunak sanés, langkung seueur parangkat lunak anu dianggo ku usaha, sareng kabutuhanana langkung ageung.

downside teh nya eta lengkah saterusna dina nyederhanakeun pakait sareng pamakéan solusi awan, sarta ieu ngakibatkeun hiji konci vendor tangtu, nyaeta, ngariung ka hiji supplier. Kami nganggo solusi saderhana sareng panyadia nganggo komponén open source, tapi kanyataanna aranjeunna dipaku kana salah sahiji awan anu ageung. Nyaéta, cara panggampangna sareng panggancangna pikeun nyebarkeun open source (sareng parangkat lunak anu cocog sareng éta) nyaéta dina méga, nganggo API proprietary.

Lamun datang ka basis data dina awan, aya dua pendekatan:

  1. Nyusun infrastruktur pangkalan data, sapertos dina pusat data biasa. Nyaéta, nyandak blok wangunan standar: ngitung, neundeun, sareng saterasna, pasang Linux sareng pangkalan data dina éta, teras konfigurasikeunana.
  2. Anggo Database salaku Jasa, dimana panyadia nawiskeun database siap-siap di jero awan.

DBaaS mangrupikeun pasar anu ngembang pesat ayeuna sabab ngamungkinkeun para pamekar damel langsung sareng pangkalan data sareng ngaminimalkeun padamelan rutin. Panyadia ngalaksanakeun pikeun mastikeun Kasadiaan Luhur sareng skala gampang, patching database, cadangan, sareng tuning kinerja.

Dua jinis Database salaku Layanan dumasar kana open source sareng alternatif dina bentuk Kubernetes

Aya dua jinis Database salaku Service pikeun database kabuka:

  1. Hiji produk open source standar rangkep dina backend administrasi pikeun gampang deployment sarta manajemén.
  2. Solusi komérsial canggih sareng sagala rupa tambihan, cocog sareng open source.

Kadua pilihan ngirangan kamungkinan migrasi antara awan sareng ngirangan portabilitas data sareng aplikasi. Contona, sanajan kanyataan yén tipena béda awan ngarojong dasarna sarua MySQL baku, aya béda anu signifikan antara aranjeunna: dina operasi, kinerja, cadangan, jeung saterusna. Migrasi tina hiji awan ka awan anu sanés tiasa janten tantangan, khususna pikeun aplikasi anu kompleks.

Sareng di dieu patarosan timbul - naha éta tiasa kéngingkeun genah Database salaku Layanan, tapi salaku solusi open source anu saderhana?

Warta anu goréng nyaéta, hanjakalna, teu aya solusi sapertos kitu di pasar. Warta anu saé nyaéta aya Kubernetes, anu ngamungkinkeun anjeun ngalaksanakeun solusi sapertos kitu.

Kubernetes mangrupikeun sistem operasi pikeun awan atanapi pusat data anu ngamungkinkeun anjeun nyebarkeun sareng ngatur aplikasi dina sababaraha server dina klaster tinimbang dina host tunggal.

Ayeuna Kubernetes mangrupikeun pamimpin dina kategori parangkat lunak sapertos kitu. Aya seueur solusi anu béda pikeun masalah sapertos kitu, tapi éta janten standar. Seueur perusahaan anu baheula fokus kana solusi alternatif ayeuna fokus kana adaptasi produkna pikeun ngadukung Kubernetes.

Salaku tambahan, Kubernetes mangrupikeun solusi universal anu dirojong dina awan swasta, umum sareng hibrid tina seueur padagang, contona: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Kumaha Kubernetes dianggo sareng pangkalan data

Kubernetes asalna dirancang pikeun aplikasi stateless nu ngolah data tapi teu nyimpen nanaon, kayaning microservices atawa aplikasi wéb. Basis data aya di tungtung spéktrum anu sanés, nyaéta, aranjeunna mangrupikeun aplikasi stateful. Sareng Kubernetes awalna henteu dimaksudkeun pikeun aplikasi sapertos kitu.

Nanging, aya fitur-fitur anu nembe muncul dina Kubernetes anu ngamungkinkeun panggunaan database sareng aplikasi stateful anu sanés:

  1. Konsep StatefulSet mangrupikeun runtuyan primitif pikeun ngolah acara ngeunaan ngeureunkeun pagawéan pods sareng ngalaksanakeun Graceful Shutdown (pareuman anu tiasa diprediksi tina aplikasi).
  2. Jilid Persistent mangrupakeun toko data anu pakait sareng pods, objék manajemén Kubernetes.
  3. Operator Framework - nyaeta, kamampuhan pikeun nyieun komponén pikeun ngatur basis data sarta aplikasi stateful séjén disebarkeun sakuliah loba titik.

Ayeuna di awan umum aya Database ageung salaku Service, backend nu Kubernetes, contona: CockroachCloud, InfluxDB, PlanetScale. Hartina, database on Kubernetes henteu ngan hiji hal anu sacara téoritis mungkin, tapi ogé hiji hal anu hade dina prakna.

Percona gaduh dua solusi open source pikeun Kubernetes:

  1. Operator Kubernetes pikeun Percona Server pikeun MongoDB.
  2. Operator Kubernetes pikeun XtraDB CLUSTER mangrupikeun jasa anu cocog sareng MySQL sareng nyayogikeun kasadiaan sareng konsistensi anu luhur. Anjeun oge bisa make titik tunggal lamun kasadiaan tinggi henteu diperlukeun, contona pikeun database dev.

pamaké Kubernetes bisa dibagi kana dua grup. Sababaraha urang nganggo Operator Kubernetes sacara langsung - ieu utamina mangrupikeun pangguna canggih anu gaduh pamahaman anu hadé ngeunaan cara téknologi éta jalan. Batur ngajalankeun éta dina backend - pamaké sapertos museurkeun hal kawas Database salaku Service a, maranéhna teu hayang delve kana nuansa Kubernetes. Pikeun grup kadua pamaké, urang boga solusi open source sejen - Percona DBaaS CLI Alat. Ieu mangrupikeun solusi ékspérimén pikeun anu hoyong kéngingkeun DBaaS open source dumasar kana Kubernetes tanpa pamahaman anu jero ngeunaan téknologi.

Kumaha ngajalankeun DBaaS Percona dina Google Kubernetes Engine

Google Kubernetes Engine, dina pamanggih kuring, mangrupikeun salah sahiji palaksanaan téknologi Kubernetes anu paling fungsional. Éta sayogi di seueur daérah dunya sareng gaduh Alat Jalur Komando (SDK) anu saderhana sareng gampang, anu ngamungkinkeun anjeun nyiptakeun skrip tinimbang ngatur platform sacara manual.

Supados DBaaS urang tiasa dianggo, urang peryogi komponén ieu:

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

Pasang kubectl

Kami masang pakét pikeun sistem operasi anjeun, kami bakal ningali conto Ubuntu. Leuwih jéntré di dieu.

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

Masang Google Cloud SDK

Kami masang pakét parangkat lunak dina cara anu sami. Leuwih jéntré di dieu.

# 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

Masang Percona DBaaS CLI

Pasang tina repositori Percona. Percona DBaaS CLI Tool masih mangrupa produk ékspérimén, ku kituna ayana dina gudang ékspérimén, nu kudu diaktipkeun misah, sanajan anjeun geus dipasang repositories Percona.

deui di dieu.

Algoritma instalasi:

  1. Nyetél repositori Percona nganggo alat percona-release. Kahiji anjeun kudu ngundeur tur masang pakét percona-release resmi ti Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Aktipkeun komponén gudang alat ékspérimén sapertos kieu:
    sudo percona-release enable tools experimental
    
  3. Pasang pakét percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Nyetél operasi komponén

Langkung seueur ngeunaan setélan di dieu.

Mimiti anjeun kedah log in kana akun Google anjeun. Salajengna, Google Cloud ngamungkinkeun hiji pangguna gaduh seueur proyék mandiri, janten anjeun kedah netepkeun proyék anu tiasa dianggo nganggo kodeu pikeun proyék ieu:

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

Salajengna, urang nyieun klaster. Pikeun demo, kuring nyiptakeun klaster Kubernetes ngan ukur tilu titik - ieu mangrupikeun minimum anu diperyogikeun pikeun kasadiaan anu luhur:

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

Paréntah kubectl di handap ieu masihan hak istimewa anu dipikahoyong pikeun pangguna ayeuna:

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

Teras we nyieun ngaranspasi sarta nyieun aktip. Namespace, kasarna nyarios, ogé sapertos proyék atanapi lingkungan, tapi parantos aya di jero klaster Kubernetes. Éta bebas tina proyék Google Cloud:

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

Ngamimitian kluster

Sakali kami parantos ngalangkungan sababaraha léngkah ieu, urang tiasa ngamimitian klaster tilu titik kalayan paréntah saderhana ieu:

# 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

Kumaha nyambungkeun ka klaster

Sacara standar, éta ngan sadia di jero Kubernetes. Nyaéta, éta henteu tiasa diaksés tina server ieu dimana anjeun ngajalankeun paréntah "Jieun". Pikeun nyayogikeunana, contona, pikeun tés sareng klien, anjeun kedah neraskeun palabuhan ngalangkungan Port Mapping:

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

Teras urang sambungkeun klien MySQL anjeun:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Paréntah manajemén klaster canggih

Database dina IP umum

Upami anjeun hoyong solusi anu langkung permanén pikeun kasadiaan klaster, anjeun tiasa kéngingkeun alamat IP éksternal. Dina hal ieu, pangkalan data bakal tiasa diaksés ti mana waé. Ieu kirang aman, tapi mindeng leuwih merenah. Pikeun IP éksternal kami nganggo paréntah di handap ieu:

# 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

Nyetél sandi sacara eksplisit

Gantina sistem sacara acak ngahasilkeun kecap akses, anjeun tiasa nyetél sandi sacara eksplisit:

# 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

Kuring nunjukkeun kaluaran naskah dina format anu tiasa dibaca manusa, tapi format JSON ogé dirojong.

Pareuman kasadiaan luhur

Kalayan paréntah di handap ieu anjeun tiasa nganonaktipkeun kasadiaan anu luhur pikeun nyebarkeun hiji titik:

# 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

Ieu mangrupikeun solusi pikeun nguji tugas pikeun ngajantenkeun MySQL gancang sareng gampang-gancang, uji, teras mareuman atanapi dianggo pikeun pangwangunan.

Alat Percona DBaaS CLI ngabantosan anjeun ngahontal solusi sapertos DBaaS dina Kubernetes. Dina waktos anu sami, urang teras-terasan ngerjakeun fungsionalitas sareng usability na.

laporan ieu munggaran dibere di @Databases Meetup ku Mail.ru Cloud Solutions&Tarantool. Neuteup видео pintonan séjén sarta ngalanggan announcements acara on Telegram Sabudeureun Kubernetes di Mail.ru Grup.

Naon deui anu kedah dibaca dina topik:

  1. Basis data dina platform IIoT modern.
  2. Kumaha carana milih pangkalan data pikeun proyék supados anjeun henteu kedah milih deui.

sumber: www.habr.com

Tambahkeun komentar