Hoe om 'n hibriede wolk te bou met Kubernetes wat DBaaS kan vervang

My naam is Petr Zaitsev, ek is die uitvoerende hoof, stigter percona en ek wil vir jou sê:

  • hoe ons van oopbronoplossings tot Databasis as 'n Diens gekom het;
  • watter benaderings bestaan ​​om databasisse in die wolk te ontplooi;
  • hoe Kubernetes DBaaS kan vervang, verskafferafhanklikheid uitskakel en die eenvoud van DBMS as 'n diens behou.

Die artikel is voorberei op grond van 'n verslag by @Databases Meetup deur Mail.ru Cloud Solutions & Tarantool. As jy nie wil lees nie, kan jy kyk:


Hoe ons van oopbron na Databasis as 'n diens in die wolk gekom het

Ek werk sedert die laat 90's in open source. Twintig jaar gelede was die gebruik van oopbron, soos databasisse, nie so maklik nie. Dit was nodig om die bronkode af te laai, dit te pleister, dit saam te stel en dit dan eers te gebruik.

Oopbron het toe deur 'n reeks vereenvoudigings gegaan:

  • Tar.gz en INSTALL bronne wat saamgestel moes word;
  • pakkette met afhanklikhede soos .deb en .rpm, waar jy net 'n stel pakkette hoef te installeer;
  • pakketbewaarplekke soos APT en YUM, waarmee installasie outomaties is;
  • oplossings soos Docker en Snap, wat jou toelaat om pakkette te ontvang deur installasie sonder eksterne afhanklikhede.

As gevolg hiervan word dit makliker om oopbronsagteware te gebruik en verlaag ook die hindernis vir toegang tot die ontwikkeling van sulke toepassings.

Terselfdertyd, anders as die situasie 20 jaar gelede, toe almal 'n monteerkundige was, kan die meeste ontwikkelaars nou nie die gereedskap wat hulle gebruik van bron af bou nie.

Trouens, dit is nie sleg nie, want:

  1. Ons kan meer komplekse maar meer gebruikersvriendelike sagteware gebruik. Byvoorbeeld, 'n blaaier is gerieflik om te gebruik, maar dit bevat baie oopbronkomponente en is ongerieflik om van nuuts af te bou.
  2. Meer mense kan ontwikkelaars van oopbron- en ander sagteware word, meer sagteware word deur besighede gebruik, en die behoefte daaraan is groter.

Die nadeel is dat die volgende stap in vereenvoudiging geassosieer word met die gebruik van wolkoplossings, en dit lei tot 'n sekere verskaffer-insluiting, dit wil sê, bindend aan een verskaffer. Ons gebruik eenvoudige oplossings en verskaffers gebruik oopbronkomponente, maar in werklikheid is hulle aan een van die groot wolke vasgespyker. Dit wil sê, die maklikste en vinnigste manier om oopbron (en sagteware wat daarmee versoenbaar is) te ontplooi is in die wolke, met behulp van 'n eie API.

As dit kom by databasisse in die wolk, is daar twee benaderings:

  1. Stel die databasis-infrastruktuur saam, soos in 'n gewone datasentrum. Dit wil sê, neem standaard boublokke: bereken, berging, ensovoorts, installeer Linux en 'n databasis daarop, en stel dit in.
  2. Gebruik Databasis as 'n diens, waar die verskaffer 'n klaargemaakte databasis binne die wolk bied.

DBaaS is tans 'n vinnig groeiende mark omdat dit ontwikkelaars in staat stel om direk met databasisse te werk en roetinewerk tot die minimum beperk. Die verskaffer onderneem om hoë beskikbaarheid en maklike skaal, databasis-patching, rugsteun en prestasie-instelling te verseker.

Twee tipes databasis as 'n diens gebaseer op oopbron en 'n alternatief in die vorm van Kubernetes

Daar is twee tipes databasis as 'n diens vir oop databasisse:

  1. 'n Standaard oopbronproduk verpak in 'n administrasie-agterkant vir maklike ontplooiing en bestuur.
  2. 'n Gevorderde kommersiële oplossing met verskeie byvoegings, versoenbaar met oopbron.

Albei opsies verminder die moontlikheid van migrasie tussen wolke en verminder die oordraagbaarheid van data en toepassings. Byvoorbeeld, ten spyte van die feit dat verskillende tipes wolke in wese dieselfde standaard MySQL ondersteun, is daar beduidende verskille tussen hulle: in werking, werkverrigting, rugsteun, ensovoorts. Migreer van een wolk na 'n ander kan uitdagend wees, veral vir komplekse toepassings.

En hier ontstaan ​​die vraag - is dit moontlik om die gerief van Databasis as 'n diens te kry, maar as 'n eenvoudige oopbron-oplossing?

Die slegte nuus is dat daar ongelukkig nog nie sulke oplossings op die mark is nie. Die goeie nuus is dat daar Kubernetes is, wat jou toelaat om sulke oplossings te implementeer.

Kubernetes is 'n bedryfstelsel vir die wolk of datasentrum wat jou toelaat om 'n toepassing oor verskeie bedieners in 'n groepie te ontplooi en te bestuur, eerder as op 'n enkele gasheer.

Nou is Kubernetes die leier in die kategorie van sulke sagteware. Daar was baie verskillende oplossings vir sulke probleme, maar dit het die standaard geword. Baie maatskappye wat vroeër op alternatiewe oplossings gefokus het, fokus nou daarop om hul produkte aan te pas om Kubernetes te ondersteun.

Daarbenewens is Kubernetes 'n universele oplossing wat ondersteun word in private, publieke en hibriede wolke van baie verskaffers, byvoorbeeld: AWS, Google Cloud, Microsoft Azure, Mail.ru Wolkoplossings.

Hoe Kubernetes met databasisse werk

Kubernetes is oorspronklik ontwerp vir staatlose toepassings wat data verwerk, maar niks stoor nie, soos mikrodienste of webtoepassings. Databasisse is aan die ander kant van die spektrum, dit wil sê, dit is statige toepassings. En Kubernetes was nie oorspronklik bedoel vir sulke toepassings nie.

Daar is egter kenmerke wat onlangs in Kubernetes verskyn het wat die gebruik van databasisse en ander statige toepassings moontlik maak:

  1. Die StatefulSet-konsep is 'n hele reeks primitiewe vir die verwerking van gebeure oor die stop van die werk van peule en die implementering van Graceful Shutdown (voorspelbare sluiting van die toepassing).
  2. Aanhoudende volumes is datawinkels wat geassosieer word met peule, Kubernetes-bestuursobjekte.
  3. Operator Framework - dit wil sê die vermoë om komponente te skep vir die bestuur van databasisse en ander statige toepassings wat oor baie nodusse versprei is.

Reeds nou in openbare wolke is daar groot databasisse as 'n diens, waarvan die agterkant Kubernetes is, byvoorbeeld: CockroachCloud, InfluxDB, PlanetScale. Dit wil sê, 'n databasis op Kubernetes is nie net iets wat teoreties moontlik is nie, maar ook iets wat in die praktyk werk.

Percona het twee oopbronoplossings vir Kubernetes:

  1. Kubernetes Operator vir Percona Server vir MongoDB.
  2. Kubernetes Operator for XtraDB CLUSTER is 'n diens wat versoenbaar is met MySQL en bied hoë beskikbaarheid en konsekwentheid. Jy kan ook 'n enkele nodus gebruik as hoë beskikbaarheid nie nodig is nie, byvoorbeeld vir 'n dev databasis.

Kubernetes-gebruikers kan in twee groepe verdeel word. Sommige mense gebruik Kubernetes Operators direk - dit is hoofsaaklik gevorderde gebruikers wat 'n goeie begrip het van hoe die tegnologie werk. Ander gebruik dit op die backend - sulke gebruikers stel belang in iets soos Database as a Service, hulle wil nie in die nuanses van Kubernetes delf nie. Vir die tweede groep gebruikers het ons nog 'n oopbron-oplossing - Percona DBaaS CLI Tool. Dit is 'n eksperimentele oplossing vir diegene wat 'n oopbron-DBaaS wil kry gebaseer op Kubernetes sonder 'n diepgaande begrip van die tegnologie.

Hoe om Percona se DBaaS op Google Kubernetes Engine te laat loop

Google Kubernetes Engine, na my mening, is een van die mees funksionele implementerings van Kubernetes-tegnologie. Dit is beskikbaar in baie streke van die wêreld en het 'n eenvoudige en gerieflike Command Line Tool (SDK), wat jou toelaat om skrifte te skep eerder as om die platform handmatig te bestuur.

Om ons DBaaS te laat werk, benodig ons die volgende komponente:

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

Installeer kubectl

Ons installeer die pakket vir jou bedryfstelsel, ons sal kyk na die voorbeeld van Ubuntu. Meer besonderhede hier.

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

Installeer tans Google Wolk SDK

Ons installeer die sagtewarepakket op dieselfde manier. Meer besonderhede hier.

# 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

Installeer Percona DBaaS CLI

Installeer vanaf die Percona-bewaarplekke. Percona DBaaS CLI Tool is steeds 'n eksperimentele produk, so dit is in die eksperimentele bewaarplek geleë, wat afsonderlik geaktiveer moet word, selfs al het u reeds Percona-bewaarplekke geïnstalleer.

meer hier.

Installasie algoritme:

  1. Stel Percona-bewaarplekke op met die percona-release-instrument. Eerstens moet u die amptelike percona-vrystellingspakket van Percona aflaai en installeer:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Aktiveer die eksperimentele gereedskapbewaarplekkomponent soos volg:
    sudo percona-release enable tools experimental
    
  3. Installeer percona-dbaas-cli pakket:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Die opstel van die werking van komponente

Meer oor instellings hier.

Eerstens moet jy by jou Google-rekening aanmeld. Verder laat Google Wolk een gebruiker toe om baie onafhanklike projekte te hê, so jy moet 'n werkende projek spesifiseer deur die kode vir hierdie projek te gebruik:

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

Vervolgens skep ons 'n groepering. Vir die demo het ek 'n Kubernetes-kluster van slegs drie nodusse geskep - dit is die minimum wat benodig word vir hoë beskikbaarheid:

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

Die volgende kubectl-opdrag gee die verlangde voorregte aan ons huidige gebruiker:

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

Dan skep ons 'n naamruimte en maak dit aktief. Naamruimte is, rofweg gesproke, ook soos 'n projek of omgewing, maar reeds binne 'n Kubernetes-kluster. Dit is onafhanklik van Google Wolk-projekte:

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

Begin die cluster

Sodra ons deur hierdie paar stappe gegaan het, kan ons 'n drie-node-kluster begin met hierdie eenvoudige opdrag:

# 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

Hoe om aan 'n groep te koppel

By verstek is dit slegs binne Kubernetes beskikbaar. Dit wil sê, dit is nie toeganklik vanaf hierdie bediener vanwaar u die "Skep"-opdrag uitgevoer het nie. Om dit beskikbaar te stel, byvoorbeeld vir toetse met 'n kliënt, moet jy die poort deur Port Mapping aanstuur:

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

Dan koppel ons jou MySQL-kliënt:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Gevorderde groepbestuuropdragte

Databasis oor openbare IP

As u 'n meer permanente oplossing vir trosbeskikbaarheid wil hê, kan u 'n eksterne IP-adres kry. In hierdie geval sal die databasis vanaf enige plek toeganklik wees. Dit is minder veilig, maar dikwels geriefliker. Vir eksterne IP gebruik ons ​​die volgende opdrag:

# 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

Stel die wagwoord uitdruklik

In plaas daarvan dat die stelsel 'n wagwoord lukraak genereer, kan jy die wagwoord eksplisiet stel:

# 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

Ek wys die uitvoer van die skrifte in leesbare formaat, maar JSON-formaat word ook ondersteun.

Skakel hoë beskikbaarheid af

Met die volgende opdrag kan u hoë beskikbaarheid deaktiveer om 'n enkele nodus te ontplooi:

# 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

Dit is 'n oplossing om take te toets om MySQL so vinnig en maklik moontlik aan die gang te kry, dit te toets en dit dan af te skakel of vir ontwikkeling te gebruik.

Die Percona DBaaS CLI-instrument help jou om 'n DBaaS-agtige oplossing op Kubernetes te bereik. Terselfdertyd gaan ons voort om aan die funksionaliteit en bruikbaarheid daarvan te werk.

Hierdie verslag is die eerste keer aangebied by @Database Meetup deur Mail.ru Cloud Solutions&Tarantool. Kyk video ander optredes en teken in op aankondigings van gebeure in Telegram Rondom Kubernetes in Mail.ru Group.

Wat anders om te lees oor die onderwerp:

  1. Databasisse in 'n moderne IIoT-platform.
  2. Hoe om 'n databasis vir 'n projek te kies sodat jy nie weer hoef te kies nie.

Bron: will.com

Voeg 'n opmerking