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:
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.
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:
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.
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:
'n Standaard oopbronproduk verpak in 'n administrasie-agterkant vir maklike ontplooiing en bestuur.
'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:
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).
Aanhoudende volumes is datawinkels wat geassosieer word met peule, Kubernetes-bestuursobjekte.
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:
Kubernetes Operator vir Percona Server vir MongoDB.
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:
Kubectl.
Google Wolk SDK.
Percona DBaaS CLI.
Installeer kubectl
Ons installeer die pakket vir jou bedryfstelsel, ons sal kyk na die voorbeeld van Ubuntu. Meer besonderhede hier.
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.
Stel Percona-bewaarplekke op met die percona-release-instrument. Eerstens moet u die amptelike percona-vrystellingspakket van Percona aflaai en installeer:
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:
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:
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:
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:
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.