Cumu custruisce un nuvola hibrida cù Kubernetes chì pò rimpiazzà DBaaS

Mi chjamu Petr Zaitsev, sò u CEO, fundatore percona è ti vogliu dì :

  • cumu avemu vinutu da suluzioni open source à Database as a Service;
  • quali approcci esistenu per implementà e basa di dati in u nuvulu;
  • cumu Kubernetes pò rimpiazzà DBaaS, eliminendu a dependenza di u venditore è mantene a simplicità di DBMS cum'è serviziu.

L'articulu hè statu preparatu basatu annantu à un rapportu à @Databases Meetup da Mail.ru Cloud Solutions & Tarantool. Se ùn vulete micca leghje, pudete fighjà:


Cumu avemu vinutu da open source à Database as a Service in u nuvulu

Aghju travagliatu in open source da a fine di l'anni 90. Vint'anni fà, l'usu open source, cum'è e basa di dati, ùn era micca cusì faciule. Era necessariu di scaricà u codice fonte, patch it, compile è solu dopu aduprà.

L'open source dopu hà attraversatu una seria di simplificazioni:

  • Tar.gz è INSTALLA fonti chì avianu bisognu à esse compilatu;
  • pacchetti cù dipendenze cum'è .deb è .rpm, induve solu bisognu di stallà un set di pacchetti;
  • repositori di pacchetti cum'è APT è YUM, cù quale l'installazione hè automatica;
  • suluzioni cum'è Docker è Snap, chì permettenu di riceve pacchetti per installazione senza dipendenze esterne.

In u risultatu, diventa più faciule d'utilizà software open source è ancu riduce a barriera à l'ingressu à u sviluppu di tali applicazioni.

À u listessu tempu, à u cuntrariu di a situazione di 20 anni fà, quandu tutti era un espertu di assemblea, avà a maiò parte di i sviluppatori ùn ponu micca custruisce l'arnesi chì utilizanu da a fonte.

In fatti, questu ùn hè micca male, perchè:

  1. Pudemu usà un software più cumplessu, ma più amichevule. Per esempiu, un navigatore hè cunvenutu d'utilizà, ma include assai cumpunenti open source è hè inconveniente per custruisce da zero.
  2. Più persone ponu diventà sviluppatori di open source è altre software, più software hè utilizatu da l'imprese, è a necessità hè più grande.

U svantaghju hè chì u prossimu passu in a simplificazione hè assuciatu cù l'usu di suluzioni nuvola, è questu porta à un certu lock-in di u venditore, vale à dì, ubligatoriu à un fornitore. Avemu aduprà suluzioni simplici è i fornituri utilizanu cumpunenti open source, ma in fattu sò chjappi à unu di i grandi nuvuli. Questu hè, u modu più faciule è veloce per implementà open source (è software cumpatibile cù questu) hè in i nuvuli, utilizendu una API patentata.

Quandu si tratta di basa di dati in u nuvulu, ci sò dui approcci:

  1. Assemble l'infrastruttura di basa di dati, cum'è in un centru di dati regulare. Vale à dì, pigliate blocchi di custruzzione standard: calculà, almacenamiento, è cusì, installate Linux è una basa di dati nantu à elli, è cunfigurà.
  2. Utilizà a basa di dati cum'è serviziu, induve u fornitore offre una basa di dati pronta in u nuvulu.

DBaaS hè un mercatu chì cresce rapidamente perchè permette à i sviluppatori di travaglià direttamente cù basa di dati è minimizza u travagliu di rutina. U fornitore s'impegna à assicurà una Alta Disponibilità è una scala faciule, patching di basa di dati, backups è sintonizazione di u rendiment.

Dui tipi di Database cum'è Serviziu basatu annantu à l'open source è una alternativa in a forma di Kubernetes

Ci hè dui tipi di basa di dati cum'è serviziu per basa di dati aperti:

  1. Un pruduttu standard open source imballatu in un backend di amministrazione per una facilità di implementazione è gestione.
  2. Una soluzione cummerciale avanzata cù diversi add-ons, cumpatibili cù open source.

E duie opzioni riducenu a pussibilità di migrazione trà i nuvuli è riducenu a portabilità di dati è applicazioni. Per esempiu, malgradu u fattu chì diversi tipi di nuvole supportanu essenzialmente u stessu MySQL standard, ci sò differenzi significati trà elli: in funziunamentu, performance, backup, etc. Migrazione da una nuvola à l'altru pò esse sfida, soprattuttu per applicazioni cumplesse.

È quì hè a quistione - hè pussibule di ottene a cunvenzione di Database cum'è serviziu, ma cum'è una solu suluzione open source?

A mala nutizia hè chì, sfurtunatamenti, ùn ci sò micca tali suluzioni in u mercatu. A bona nova hè chì ci hè Kubernetes, chì vi permette di implementà tali suluzioni.

Kubernetes hè un sistema operatore per u nuvulu o un centru di dati chì vi permette di implementà è gestisce una applicazione in parechji servitori in un cluster invece di un unicu host.

Avà Kubernetes hè u capu in a categuria di tali software. Ci era parechje suluzione diffirenti per tali prublemi, ma hè diventatu u standard. Parechje cumpagnie chì si focalizavanu in suluzioni alternative sò avà cuncentrate à adattà i so prudutti per sustene Kubernetes.

Inoltre, Kubernetes hè una suluzione universale chì hè supportata in nuvuli privati, publichi è hibridi di parechji venditori, per esempiu: AWS, Google Cloud, Microsoft Azure, Mail.ru Soluzioni Cloud.

Cumu Kubernetes travaglia cù basa di dati

Kubernetes hè statu inizialmente cuncepitu per l'applicazioni senza statu chì processanu e dati ma ùn guardanu nunda, cum'è microservizi o applicazioni web. E basa di dati sò à l'altru finale di u spettru, vale à dì, sò applicazioni stateful. È Kubernetes ùn era micca uriginale destinatu à tali applicazioni.

Tuttavia, ci sò funzioni chì sò apparsu recentemente in Kubernetes chì permettenu l'usu di basa di dati è altre applicazioni stateful:

  1. U cuncettu StatefulSet hè una seria sana di primitivi per processà l'avvenimenti nantu à a cessazione di u travagliu di pods è l'implementazione di Graceful Shutdown (arrestu previdibile di l'applicazione).
  2. I volumi persistenti sò magazzini di dati chì sò assuciati cù pods, oggetti di gestione Kubernetes.
  3. Operator Framework - vale à dì, a capacità di creà cumpunenti per a gestione di basa di dati è altre applicazioni stateful distribuite in parechji nodi.

Dighjà avà in i nuvuli publichi ci sò grandi basa di dati cum'è serviziu, u backend di quale hè Kubernetes, per esempiu: CockroachCloud, InfluxDB, PlanetScale. Questu hè, una basa di dati nantu à Kubernetes ùn hè micca solu qualcosa chì hè teoricamente pussibule, ma ancu qualcosa chì travaglia in pratica.

Percona hà duie soluzioni open source per Kubernetes:

  1. Operatore Kubernetes per Percona Server per MongoDB.
  2. Kubernetes Operator for XtraDB CLUSTER hè un serviziu chì hè cumpatibile cù MySQL è furnisce alta dispunibilità è cunsistenza. Pudete ancu aduprà un unicu node se l'alta dispunibilità ùn hè micca necessariu, per esempiu per una basa di dati dev.

L'utilizatori di Kubernetes ponu esse divisu in dui gruppi. Alcune persone utilizanu direttamente Operatori Kubernetes - sò principalmente utilizatori avanzati chì anu una bona cunniscenza di cumu funziona a tecnulugia. L'altri l'anu in u backend - tali utilizatori sò interessate in qualcosa cum'è Database as a Service, ùn volenu micca sfondate in e sfumature di Kubernetes. Per u sicondu gruppu di utilizatori, avemu una altra suluzione open source - Percona DBaaS CLI Tool. Questa hè una suluzione sperimentale per quelli chì volenu acquistà un DBaaS open source basatu in Kubernetes senza una cunniscenza prufonda di a tecnulugia.

Cumu eseguisce DBaaS di Percona in Google Kubernetes Engine

Google Kubernetes Engine, in my opinion, hè una di e implementazioni più funziunali di a tecnulugia Kubernetes. Hè dispunibule in parechje regioni di u mondu è hà un Strumentu di Linea di Command (SDK) simplice è convenientu, chì vi permette di creà script invece di gestisce manualmente a piattaforma.

Per u nostru DBaaS per travaglià, avemu bisognu di i seguenti cumpunenti:

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

Installa kubectl

Stallà u pacchettu per u vostru sistema operatore, fighjemu l'esempiu di Ubuntu. Più dettagli ccà.

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

Installazione di Google Cloud SDK

Installemu u pacchettu di software in u listessu modu. Più dettagli ccà.

# 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

Installazione di Percona DBaaS CLI

Installa da i repositori Percona. Percona DBaaS CLI Tool hè sempre un pruduttu sperimentale, per quessa, si trova in u repository sperimentale, chì deve esse attivatu separatamente, ancu s'ellu avete digià installatu repository Percona.

More ccà.

Algoritmu di stallazione:

  1. Configurate i repositori Percona cù l'utillita percona-release. Prima avete bisognu di scaricà è stallà u pacchettu ufficiale percona-release da Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Attivate u cumpunente di repository di l'uttellu sperimentale cum'è seguita:
    sudo percona-release enable tools experimental
    
  3. Installa u pacchettu percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Stallà u funziunamentu di cumpunenti

Più nantu à i paràmetri ccà.

Prima vi tocca à accede à u vostru contu Google. Inoltre, Google Cloud permette à un utilizatore per avè parechji prughjetti indipendenti, cusì avete bisognu di specificà un prughjettu di travagliu cù u codice per stu prughjettu:

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

Dopu, creemu un cluster. Per a demo, aghju creatu un cluster Kubernetes di solu trè nodi - questu hè u minimu necessariu per a dispunibilità alta:

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

U cumandimu kubectl seguente dà i privilegi desiderati à u nostru utilizatore attuale:

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

Allora creamu un spaziu di nome è facemu attivu. U spaziu di nomi hè, à pocu pressu, ancu cum'è un prughjettu o un ambiente, ma digià in un cluster Kubernetes. Hè indipendente da i prughjetti di Google Cloud:

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

Cumincià u cluster

Una volta chì avemu passatu sti pochi passi, pudemu inizià un cluster di trè nodi cù stu cumandamentu simplice:

# 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

Cumu cunnette à un cluster

Per automaticamente, hè dispunibule solu in Kubernetes. Questu hè, ùn hè micca accessibile da stu servitore da quale avete eseguitu u cumandamentu "Crea". Per fà dispunibule, per esempiu, per e teste cù un cliente, avete bisognu di rinvià u portu attraversu Port Mapping:

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

Allora cunnettemu u vostru cliente MySQL:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Cumandamenti avanzati di gestione di cluster

Database nantu à l'IP publicu

Se vulete una suluzione più permanente per a dispunibilità di cluster, pudete uttene un indirizzu IP esternu. In questu casu, a basa di dati serà accessibile da ogni locu. Questu hè menu sicuru, ma spessu più convenientu. Per l'IP esterna usemu u cumandimu seguitu:

# 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

Definite esplicitamente a password

Invece di u sistema chì generà una password aleatoriu, pudete stabilisce a password esplicitamente:

# 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

Mostra l'output di i scripts in un furmatu leggibile umanu, ma u formatu JSON hè ancu supportatu.

Disattivazione di alta dispunibilità

Cù u cumandimu seguitu pudete disattivà l'alta dispunibilità per implementà un unicu 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

Questa hè una suluzione per pruvà i travaglii per mette MySQL in funziunamentu u più veloce è faciule pussibule, pruvà, è dopu chjude o aduprate per u sviluppu.

U strumentu Percona DBaaS CLI vi aiuta à ottene una soluzione DBaaS-like in Kubernetes. À u listessu tempu, cuntinuemu à travaglià nantu à a so funziunalità è usabilità.

Stu rapportu hè statu prima presentatu à @Databases Meetup da Mail.ru Cloud Solutions&Tarantool. Fighjate видео altre prestazioni è abbonate à l'annunzii di l'avvenimenti in Telegram Intornu à Kubernetes in Mail.ru Group.

Cosa altru à leghje nantu à u tema:

  1. Basi di dati in una piattaforma IIoT moderna.
  2. Cumu sceglie una basa di dati per un prughjettu per ùn avè micca bisognu di sceglie di novu.

Source: www.habr.com

Add a comment