Com crear un núvol híbrid amb Kubernetes que pot substituir DBaaS

Em dic Petr Zaitsev, sóc el CEO, fundador Percona i et vull dir:

  • com vam passar de solucions de codi obert a Database as a Service;
  • quins enfocaments existeixen per desplegar bases de dades al núvol;
  • com Kubernetes pot substituir DBaaS, eliminant la dependència dels proveïdors i mantenint la simplicitat del SGBD com a servei.

L'article es va preparar a partir d'un informe a @Databases Meetup de Mail.ru Cloud Solutions & Tarantool. Si no voleu llegir, podeu mirar:


Com vam passar del codi obert a la base de dades com a servei al núvol

He estat treballant en codi obert des de finals dels anys 90. Fa vint anys, utilitzar codi obert, com les bases de dades, no era tan fàcil. Calia descarregar el codi font, pedaxar-lo, compilar-lo i només després utilitzar-lo.

Llavors, el codi obert va passar per una sèrie de simplificacions:

  • Fonts Tar.gz i INSTALL que calia compilar;
  • paquets amb dependències com .deb i .rpm, on només cal instal·lar un conjunt de paquets;
  • repositoris de paquets com APT i YUM, amb els quals la instal·lació és automàtica;
  • solucions com Docker i Snap, que permeten rebre paquets per instal·lació sense dependències externes.

Com a resultat, es fa més fàcil utilitzar programari de codi obert i també redueix la barrera d'accés al desenvolupament d'aquestes aplicacions.

Al mateix temps, a diferència de la situació de fa 20 anys, quan tothom era expert en muntatge, ara la majoria de desenvolupadors no poden crear les eines que utilitzen des de la font.

De fet, això no està malament, perquè:

  1. Podem utilitzar programari més complex però més fàcil d'utilitzar. Per exemple, un navegador és còmode d'utilitzar, però inclou molts components de codi obert i és incòmode construir-lo des de zero.
  2. Més persones poden convertir-se en desenvolupadors de programari de codi obert i altres, les empreses utilitzen més programari i la necessitat és més gran.

L'inconvenient és que el següent pas de simplificació s'associa amb l'ús de solucions al núvol, i això comporta un determinat bloqueig del proveïdor, és a dir, vinculant-se a un proveïdor. Utilitzem solucions senzilles i els proveïdors utilitzen components de codi obert, però de fet estan clavats en un dels grans núvols. És a dir, la manera més fàcil i ràpida de desplegar codi obert (i programari compatible amb ell) és als núvols, mitjançant una API propietària.

Quan es tracta de bases de dades al núvol, hi ha dos enfocaments:

  1. Muntar la infraestructura de bases de dades, com en un centre de dades normal. És a dir, agafeu els blocs de construcció estàndard: càlcul, emmagatzematge, etc., instal·leu-hi Linux i una base de dades i configureu-los.
  2. Utilitzeu la base de dades com a servei, on el proveïdor ofereix una base de dades ja feta dins del núvol.

DBaaS és un mercat en creixement ràpid ara mateix perquè permet als desenvolupadors treballar directament amb bases de dades i minimitza el treball rutinari. El proveïdor es compromet a garantir l'alta disponibilitat i l'escalat fàcil, l'aplicació de pedaços a la base de dades, les còpies de seguretat i l'ajust del rendiment.

Dos tipus de Database as a Service basat en codi obert i una alternativa en forma de Kubernetes

Hi ha dos tipus de base de dades com a servei per a bases de dades obertes:

  1. Un producte estàndard de codi obert empaquetat en un backend d'administració per facilitar el desplegament i la gestió.
  2. Una solució comercial avançada amb diversos complements, compatible amb codi obert.

Ambdues opcions redueixen la possibilitat de migració entre núvols i redueixen la portabilitat de dades i aplicacions. Per exemple, malgrat que els diferents tipus de núvols admeten essencialment el mateix MySQL estàndard, hi ha diferències significatives entre ells: en funcionament, rendiment, còpia de seguretat, etc. Migrar d'un núvol a un altre pot ser un repte, especialment per a aplicacions complexes.

I aquí sorgeix la pregunta: és possible obtenir la comoditat de la base de dades com a servei, però com a solució senzilla de codi obert?

La mala notícia és que, malauradament, encara no hi ha aquestes solucions al mercat. La bona notícia és que hi ha Kubernetes, que permet implementar aquestes solucions.

Kubernetes és un sistema operatiu per al núvol o centre de dades que us permet desplegar i gestionar una aplicació en diversos servidors d'un clúster en lloc d'un sol amfitrió.

Ara Kubernetes és el líder en la categoria d'aquest programari. Hi havia moltes solucions diferents per a aquests problemes, però es va convertir en l'estàndard. Moltes empreses que solien centrar-se en solucions alternatives ara s'estan centrant a adaptar els seus productes per donar suport a Kubernetes.

A més, Kubernetes és una solució universal que és compatible amb núvols privats, públics i híbrids de molts proveïdors, per exemple: AWS, Google Cloud, Microsoft Azure, Mail.ru Solucions al núvol.

Com funciona Kubernetes amb bases de dades

Kubernetes es va dissenyar originalment per a aplicacions sense estat que processen dades però no emmagatzemen res, com ara microserveis o aplicacions web. Les bases de dades es troben a l'altre extrem de l'espectre, és a dir, són aplicacions amb estat. I Kubernetes no estava pensat originalment per a aquestes aplicacions.

Tanmateix, hi ha funcions que han aparegut recentment a Kubernetes que permeten l'ús de bases de dades i altres aplicacions amb estat:

  1. El concepte StatefulSet és tota una sèrie de primitives per processar esdeveniments sobre aturar el treball dels pods i implementar Graceful Shutdown (apagament previsible de l'aplicació).
  2. Els volums persistents són magatzems de dades associats a pods, objectes de gestió de Kubernetes.
  3. Operator Framework: és a dir, la capacitat de crear components per gestionar bases de dades i altres aplicacions amb estat distribuïdes en molts nodes.

Ja en els núvols públics hi ha grans bases de dades com a servei, el backend de les quals és Kubernetes, per exemple: CockroachCloud, InfluxDB, PlanetScale. És a dir, una base de dades a Kubernetes no només és una cosa teòricament possible, sinó també una cosa que funciona a la pràctica.

Percona té dues solucions de codi obert per a Kubernetes:

  1. Operador de Kubernetes per al servidor Percona per a MongoDB.
  2. Kubernetes Operator for XtraDB CLUSTER és un servei compatible amb MySQL i que proporciona una alta disponibilitat i coherència. També podeu utilitzar un sol node si no cal una alta disponibilitat, per exemple, per a una base de dades de desenvolupament.

Els usuaris de Kubernetes es poden dividir en dos grups. Algunes persones utilitzen els operadors de Kubernetes directament; aquests són principalment usuaris avançats que entenen bé com funciona la tecnologia. Altres l'executen al backend: aquests usuaris estan interessats en alguna cosa com Database as a Service, no volen aprofundir en els matisos de Kubernetes. Per al segon grup d'usuaris, tenim una altra solució de codi obert: Percona DBaaS CLI Tool. Aquesta és una solució experimental per a aquells que volen obtenir un DBaaS de codi obert basat en Kubernetes sense una comprensió profunda de la tecnologia.

Com executar el DBaaS de Percona a Google Kubernetes Engine

Google Kubernetes Engine, al meu entendre, és una de les implementacions més funcionals de la tecnologia Kubernetes. Està disponible a moltes regions del món i té una eina de línia d'ordres (SDK) senzilla i còmoda, que us permet crear scripts en lloc de gestionar manualment la plataforma.

Perquè el nostre DBaaS funcioni, necessitem els components següents:

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

Instal·leu kubectl

Instal·lem el paquet per al vostre sistema operatiu, mirarem l'exemple d'Ubuntu. Més detalls aquí.

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

S'està instal·lant l'SDK de Google Cloud

Instal·lem el paquet de programari de la mateixa manera. Més detalls aquí.

# 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·lació de la CLI DBaaS de Percona

Instal·leu des dels repositoris de Percona. Percona DBaaS CLI Tool encara és un producte experimental, per la qual cosa es troba al repositori experimental, que s'ha d'habilitar per separat, encara que ja tingueu instal·lats els repositoris de Percona.

més aquí.

Algorisme d'instal·lació:

  1. Configureu els dipòsits de Percona mitjançant l'eina percona-release. Primer heu de descarregar i instal·lar el paquet oficial percona-release de Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Activeu el component del dipòsit d'eines experimentals de la manera següent:
    sudo percona-release enable tools experimental
    
  3. Instal·leu el paquet percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Configuració del funcionament dels components

Més informació sobre la configuració aquí.

Primer heu d'iniciar sessió al vostre compte de Google. A més, Google Cloud permet que un usuari tingui molts projectes independents, de manera que cal que especifiqueu un projecte de treball mitjançant el codi d'aquest projecte:

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

A continuació, creem un clúster. Per a la demostració, vaig crear un clúster Kubernetes de només tres nodes; aquest és el mínim necessari per a una alta disponibilitat:

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

La següent comanda kubectl dóna els privilegis desitjats al nostre usuari actual:

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

Després creem un espai de noms i el fem actiu. L'espai de noms és, a grans trets, també com un projecte o entorn, però ja dins d'un clúster de Kubernetes. És independent dels projectes de Google Cloud:

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

Iniciant el clúster

Un cop hem fet aquests pocs passos, podem iniciar un clúster de tres nodes amb aquesta senzilla ordre:

# 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

Com connectar-se a un clúster

Per defecte, només està disponible dins de Kubernetes. És a dir, no és accessible des d'aquest servidor des del qual heu executat l'ordre "Crea". Per fer-lo disponible, per exemple, per a proves amb un client, heu de reenviar el port mitjançant Port Mapping:

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

A continuació connectem el vostre client MySQL:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Ordres avançades de gestió de clúster

Base de dades sobre IP pública

Si voleu una solució més permanent per a la disponibilitat del clúster, podeu obtenir una adreça IP externa. En aquest cas, la base de dades serà accessible des de qualsevol lloc. Això és menys segur, però sovint més còmode. Per a IP externa fem servir la següent comanda:

# 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

Establiu explícitament la contrasenya

En lloc que el sistema generi una contrasenya aleatòriament, podeu establir-la de manera explícita:

# 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

Estic mostrant la sortida dels scripts en format llegible per humans, però també s'admet el format JSON.

S'està desactivant l'alta disponibilitat

Amb l'ordre següent, podeu desactivar l'alta disponibilitat per desplegar un sol 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

Aquesta és una solució per provar tasques per posar MySQL en funcionament de la manera més ràpida i senzilla possible, provar-lo i després tancar-lo o utilitzar-lo per al desenvolupament.

L'eina Percona DBaaS CLI us ajuda a aconseguir una solució semblant a DBaaS a Kubernetes. Al mateix temps, continuem treballant en la seva funcionalitat i usabilitat.

Aquest informe es va presentar per primera vegada a @Databases Meetup per Mail.ru Cloud Solutions&Tarantool. Mira vídeo altres actuacions i subscriu-te als anuncis d'esdeveniments a Telegram Al voltant de Kubernetes al grup Mail.ru.

Què més cal llegir sobre el tema:

  1. Bases de dades en una plataforma IIoT moderna.
  2. Com triar una base de dades per a un projecte perquè no hagis de tornar a triar.

Font: www.habr.com

Afegeix comentari