Cum să construiești un cloud hibrid folosind Kubernetes, care poate înlocui DBaaS

Mă numesc Petr Zaicev, sunt directorul general, fondator Percona și vreau să vă povestesc:

  • cum am trecut de la soluții open source la Database as a Service;
  • ce abordări există pentru desfășurarea bazelor de date în cloud;
  • cum Kubernetes poate înlocui DBaaS, eliminând dependența de furnizor și menținând simplitatea SGBD-ului ca serviciu.

Articolul este pregătit pe baza prezentării de la @Databases Meetup by Mail.ru Cloud Solutions & Tarantool. Dacă nu doriți să citiți, puteți viziona:

Redați video

Cum am trecut de la open source la Database as a Service în cloud

Mă ocup de open source din anii '90. Acum douăzeci de ani, utilizarea open source, de exemplu, a bazelor de date, nu era atât de simplă. Trebuia să descărci sursa, să o aplici patch-uri, să o compilezi și abia apoi să o folosești.

Apoi, open source a trecut printr-o serie de simplificări:

  • sursa Tar.gz și INSTALL, care trebuiau compilate;
  • pachete cu dependențe de tip .deb și .rpm, unde trebuia doar să instalezi un set de pachete;
  • repository de pachete precum APT și YUM, care permit instalarea automată;
  • soluții precum Docker și Snap, care permit obținerea pachetelor prin instalare fără dependențe externe.

În final, utilizarea software-ului deschis devine mai ușoară, iar bariera de intrare în dezvoltarea acestor aplicații se reduce.

În același timp, spre deosebire de situația de acum 20 de ani, când toată lumea era expertă în compilare, acum majoritatea dezvoltatorilor nu pot compila din surse instrumentele utilizate.

De fapt, aceasta nu este o problemă, pentru că:

  1. Putem utiliza software mai complex, dar mai convenabil. De exemplu, un browser - este ușor de utilizat, dar include multe componente open source, iar compilarea de la zero este incomodă.
  2. Mai mulți oameni pot deveni dezvoltatori open source și de alt software, mai multe software-uri sunt utilizate de firme, iar cererea pentru ele este mai mare.

Partea opusă - următorul pas în simplificare este legat de utilizarea soluțiilor cloud, ceea ce duce la un anumit vendor lock-in, adică la o legătură cu un singur furnizor. Folosim soluții simple iar furnizorii folosesc componente open source, dar în realitate sunt prăbușiți în unul dintre marile cloud-uri. Adică, cea mai simplă și rapidă modalitate de desfășurare a open source (și a software-ului compatibil) este în cloud-uri, folosind API-uri proprietare.

Dacă vorbim despre bazele de date în cloud, există două abordări:

  1. Construiește o infrastructură de baze de date, asemănătoare cu un centru de date obișnuit. Asta înseamnă să iei blocuri de construcție standard: compute, storage și așa mai departe, să instalezi Linux, o bază de date, să o configurezi.
  2. Folosește Database as a Service, unde furnizorul oferă deja o bază de date gata pregătită în cloud.

În prezent, DBaaS este o piață în rapidă creștere, deoarece acest serviciu permite dezvoltatorilor să lucreze direct cu bazele de date și reduce munca de rutină. Furnizorul se ocupă de asigurarea disponibilității ridicate (High Availability) și a scalării ușoare, de patching-ul bazei de date, de backup-uri, de configurarea performanței.

Există două tipuri de Database as a Service bazate pe open source și o alternativă sub formă de Kubernetes.

Există două tipuri de Database as a Service pentru baze de date deschise:

  1. Produsul standard open source, ambalat într-un backend pentru administrare, care simplifică desfășurarea și managementul.
  2. O soluție comercială avansată cu diferite extensii, compatibilă cu open source.

Ambele opțiuni reduc posibilitatea de migrare între cloud-uri, diminuând portabilitatea datelor și aplicațiilor. De exemplu, deși diferitele tipuri de cloud-uri suportă, practic, același standard MySQL, există diferențe semnificative între ele: în funcționare, performanță, backup-uri și așa mai departe. Migrarea de la un cloud la altul poate fi complicată, mai ales pentru aplicații complexe.

Aici apare întrebarea — este posibil să obții confortul Database as a Service, dar ca o soluție simplă open source?

Vestea proastă este că, din păcate, momentan nu există astfel de soluții pe piață. Vestea bună este că există Kubernetes, care permite realizarea unor astfel de soluții.

Kubernetes este un sistem de operare pentru cloud sau centru de date, care permite desfășurarea aplicației și gestionarea acesteia pe mai multe servere dintr-un cluster, nu pe un singur host.

În prezent, Kubernetes este lider în categoria acestui tip de software. Au existat multe soluții diferite pentru astfel de sarcini, dar el a devenit standardul. Multe companii care anterior se ocupau de soluții alternative se concentrează acum pe adaptarea produselor lor pentru a sprijini Kubernetes.

În plus, Kubernetes este o soluție versatilă, care este susținută în cloud-uri private, publice și hibride de mulți furnizori, de exemplu: AWS, Google Cloud, Microsoft Azure. Soluții Cloud Mail.ru.

Cum funcționează Kubernetes cu bazele de date

Kubernetes a fost inițial dezvoltat pentru aplicații stateless care procesează date, dar nu le stochează, cum ar fi microserviciile sau aplicațiile web. Bazele de date se află la cealaltă extremitate a spectrului, adică sunt aplicații stateful. Și Kubernetes nu a fost destinat inițial pentru astfel de aplicații.

Cu toate acestea, există funcții care au apărut recent în Kubernetes și permit utilizarea bazelor de date și a altor aplicații stateful:

  1. Conceptul de StatefulSet este o întreagă serie de primitivi pentru gestionarea evenimentelor de oprire a podurilor și realizarea unui Graceful Shutdown (finalizare previzibilă a aplicației).
  2. Persistent Volumes sunt unități de stocare a datelor care sunt asociate podurilor, obiectelor de gestionare Kubernetes.
  3. Operator Framework reprezintă posibilitatea de a crea componente pentru gestionarea bazelor de date și a altor aplicații stateful, distribuite pe mai multe noduri.

Și acum, în cloud-urile publice există mari servicii Database as a Service, care în spatele scenei folosesc Kubernetes, de exemplu: CockroachCloud, InfluxDB, PlanetScale. Așadar, baza de date pe Kubernetes nu este doar un lucru teoretic, ci și unul care funcționează în practică.

Percona oferă două soluții open source pentru Kubernetes:

  1. Kubernetes Operator pentru Percona Server pentru MongoDB.
  2. Kubernetes Operator pentru XtraDB CLUSTER - un serviciu compatibil cu MySQL, care asigură disponibilitate ridicată și consistență. De asemenea, se poate folosi un nod singular, dacă disponibilitatea ridicată nu este necesară, de exemplu pentru o bază de date de dezvoltare.

Utilizatorii Kubernetes pot fi împărțiți în două grupuri. Unii folosesc direct Kubernetes Operators - aceștia sunt, în principal, utilizatori avansați care înțeleg bine cum funcționează tehnologia. Alții îl rulează pe backend - acești utilizatori sunt interesați de ceva asemănător cu Database as a Service, nu doresc să se apuce de detalii despre cum funcționează Kubernetes. Pentru al doilea grup de utilizatori, avem o altă soluție open source - Percona DBaaS CLI Tool. Aceasta este o soluție experimentală pentru cei care doresc să obțină un DBaaS open source bazat pe Kubernetes fără a avea o înțelegere aprofundată a tehnologiei.

Cum să rulați DBaaS de la Percona pe Google Kubernetes Engine

Google Kubernetes Engine, din punctul meu de vedere, este una dintre cele mai funcționale implementări ale tehnologiei Kubernetes. Este disponibilă în multe regiuni ale lumii și dispune de un instrument de Command Line Tool (SDK) simplu și convenabil, care permite crearea de scripturi, în loc de a gestiona platforma manual.

Pentru ca DBaaS-ul nostru să funcționeze, sunt necesare următoarele componente:

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

Instalăm kubectl

Instalăm pachetul pentru sistemul dvs. de operare, vom lua ca exemplu Ubuntu. Mai multe detalii aici.

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

Instalăm Google Cloud SDK

La fel, instalăm pachetul software. Mai multe detalii aici.

# 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

Instalăm Percona DBaaS CLI

Instalăm din repositoarele Percona. Percona DBaaS CLI Tool este un produs experimental, așadar se află într-un repository experimental care trebuie activat separat, chiar dacă aveți deja instalate repositoarele Percona.

Află mai multe aici.

Algoritmul de instalare:

  1. Configurați repositoarele Percona cu ajutorul instrumentului percona-release. Mai întâi, trebuie să descărcați și să instalați pachetul oficial percona-release de la Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Activați componenta experimentală a repository-ului de instrumente astfel:
    sudo percona-release enable tools experimental
    
  3. Instalați pachetul percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Configurăm funcționarea componentelor

Mai multe detalii despre configurații aici.

În primul rând, trebuie să vă autentificați în contul Google. Ulterior, Google Cloud permite unui utilizator să aibă mai multe proiecte independente, de aceea trebuie să specificați proiectul activ folosind codul acestuia:

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

Apoi creăm un cluster. Pentru demo, am creat un cluster Kubernetes format din doar trei noduri — acesta este minimul necesar pentru o disponibilitate ridicată:

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

Următoarea comandă kubectl oferă privilegiile necesare utilizatorului nostru curent:

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

Apoi creăm un namespace și îl activăm. Namespace-ul este, pe scurt, similar cu un proiect sau un mediu, dar deja în cadrul cluster-ului Kubernetes. Este independent de proiectele Google Cloud:

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

Pornim cluster-ul

După ce am trecut prin acești câțiva pași, putem porni cluster-ul format din trei noduri cu această comandă simplă:

# 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

Cum să te conectezi la cluster

Implicitly, it is only accessible within Kubernetes. That is, from the server where you issued the 'Create' command, it is not accessible. To make it accessible, for example, for client tests, you need to forward the port via Port Mapping:

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

Then connect your MySQL client:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Advanced cluster management commands

Database on public IP

If you want a more permanent solution for cluster availability, you can obtain an external IP address. In this case, the database will be accessible from anywhere. This is less secure but often more convenient. To get the external IP, use the following command:

# 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

Explicitly set the password

Instead of the system generating the password randomly, you can set the password explicitly:

# 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

I am displaying script outputs in a readable format, but JSON format is also supported.

Disable high availability

The next command can disable high availability to deploy a single 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

This solution is for testing tasks, to quickly and easily set up MySQL, test it, and then either shut it down or use it for development.

The Percona DBaaS CLI tool helps to obtain a Kubernetes solution similar to DBaaS. We continue to work on its functionality and usability.

Această prezentare a avut loc pentru prima dată la @Databases Meetup by Mail.ru Cloud Solutions&Tarantool. Vezi video alte prezentări și abonează-te la anunțurile evenimentelor în Telegram În jurul Kubernetes în Mail.ru Group.

What else to read on the topic:

  1. Databases in a modern IIoT platform.
  2. How to choose a database for a project to avoid having to choose again.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster