Hogyan készítsünk hibrid felhőt Kubernetes segítségével, amely helyettesítheti a DBaaS-t

A nevem Péter Zaycev, ügyvezető igazgató és alapító vagyok, Percona és szeretném elmondani,

  • hogyan jutottunk el az open source megoldásoktól az adatbázis szolgáltatásig (DBaaS);
  • milyen megközelítések léteznek az adatbázisok felhőalapú telepítésére;
  • hogyan tudja a Kubernetes helyettesíteni a DBaaS-t, eltávolítva a szállítótól való függőséget, miközben megtartja az adatbázis mint szolgáltatás egyszerűségét.

A cikk a Mail.ru Cloud Solutions & Tarantool @Databases Meetup-ján elhangzott előadás alapján készült. Ha nem szeretne olvasni, itt megnézheti:

Videó lejátszása

Hogyan jutottunk el az open source-tól a felhőbeli Database as a Service-ig

1990-es évek vége óta foglalkozom open source-szal. Húsz évvel ezelőtt az open source, például az adatbázisok használata nem volt egyszerű. Le kellett tölteni a forrást, javítani, lefordítani, és csak ezután lehetett használni.

Ezután az open source egy sor egyszerűsítést élt át:

  • forráskód Tar.gz és INSTALL, amelyeket le kellett fordítani;
  • .deb és .rpm típusú függőségekkel rendelkező csomagok, ahol csak a csomagok halmazát kellett telepíteni;
  • csomagkezelő rendszerek, mint az APT és a YUM, amelyek révén a telepítés automatikusan történik;
  • olyan megoldások, mint a Docker és a Snap, lehetővé téve a csomagok egyszerű telepítését külső függőségek nélkül.

Ennek eredményeként az open source szoftver használata egyszerűbbé válik, és csökken a belépési küszöb a hasonló alkalmazások fejlesztéséhez.

Ellenben a 20 évvel ezelőtti helyzettel, amikor mindenki szakértő volt az összeállításban, manapság a fejlesztők többsége nem tudja lefordítani a használt eszközöket a forrásból.

Valójában ez nem rossz, mivel:

  1. Bonyolultabb, de kényelmesebb szoftvereket használhatunk. Például a böngésző — kényelmes, de sok open source összetevőt tartalmaz, és nem könnyű alapjáraton összeállítani.
  2. Több ember válhat open source és egyéb szoftverek fejlesztőjévé, a vállalkozások által használt szoftverek száma nő, és így a kereslet is növekszik.

A másik oldal: a következő lépés az egyszerűsítésben a felhőalapú megoldások használatával kapcsolatos, ami egy bizonyos vendor lock-in-hoz vezet, azaz egy szolgáltatóhoz való kötődéshez. Mi egyszerű megoldásokat használunk, és a szolgáltatók open source összetevőket használnak, de valójában egyike a nagy felhőszolgáltatóknak. Tehát a legegyszerűbb és leggyorsabb mód arra, hogy az open source-t (és a vele kompatibilis szoftvereket) kifejlesszük, a felhők használata, a tulajdonosi API-val.

Ha az adatbázisokról van szó a felhőben, két megközelítés létezik:

  1. Adja meg az adatbázis-infrastruktúrát, mint egy hagyományos adatközpontban. Vagyis vegyen standard komponensblokkokat: compute, storage és így tovább, telepítsen rájuk Linuxot, adatbázist, állítson be mindent.
  2. Használjon Database as a Service-t, ahol a szolgáltató már készenlétben kínál egy adatbázist a felhőben.

Jelenleg a DBaaS egy gyorsan növekvő piac, mert ez a szolgáltatás lehetővé teszi a fejlesztők számára, hogy közvetlenül dolgozzanak az adatbázisokkal, és minimalizálja a rutin munkát. A szolgáltató magára vállalja a magas rendelkezésre állás (High Availability) biztosítását, az egyszerű skálázhatóságot, az adatbázis frissítését, biztonsági mentését és a teljesítmény beállítását.

Kétféle Database as a Service létezik: nyílt forráskódú alapú és Kubernetes alternatíva.

Két típusú Database as a Service van a nyílt adatbázisok számára:

  1. Standard nyílt forráskódú termék, amelyet adminisztrációs háttérrel csomagoltak, ez leegyszerűsíti a telepítést és a kezelést.
  2. Fejlett kereskedelmi megoldás különféle kiegészítőkkel, amely kompatibilis a nyílt forráskódú megoldásokkal.

Mindkét lehetőség csökkenti a felhők közötti migrálás lehetőségét, csökkenti az adatok és alkalmazások hordozhatóságát. Például, bár különböző felhőtípusok alapvetően ugyanazt a standard MySQL-t támogatják, jelentős eltérések vannak közöttük a működés, teljesítmény, biztonsági mentés és egyéb szempontok terén. Az egyik felhőről a másikra való migrálás nem mindig egyszerű, különösen bonyolult alkalmazások esetében.

Itt merül fel a kérdés — lehet-e élvezni a Database as a Service kényelmét, mint egy egyszerű nyílt forráskódú megoldás?

A rossz hír az, hogy sajnos jelenleg nincsenek ilyen megoldások a piacon. A jó hír — van Kubernetes, amely lehetővé teszi az ilyen megoldások megvalósítását.

A Kubernetes egy operációs rendszer a felhőhöz vagy adatközponthoz, amely lehetővé teszi egy alkalmazás telepítését és kezelését egy klaszter számos szerverén, nem pedig egyetlen hoszton.

Jelenleg a Kubernetes vezető szerepet játszik az ilyen típusú szoftverek kategóriájában. Sok különféle megoldás létezett korábban, de ő lett a standard. Számos vállalat, amely korábban alternatív megoldásokkal foglalkozott, most a termékeik Kubernetes támogatásra való alkalmazására összpontosít.

Továbbá a Kubernetes egy sokoldalú megoldás, amelyet több szolgáltató magán-, nyilvános- és hibrid felhői támogatnak, mint például az AWS, a Google Cloud és a Microsoft Azure. Mail.ru Cloud Solutions.

Hogyan működik a Kubernetes az adatbázisokkal?

A Kubernetes-t eredetileg stateless alkalmazásokhoz fejlesztették ki, amelyek adatokat dolgoznak fel, de nem tárolják őket, mint például a mikroszolgáltatások vagy webalkalmazások. Az adatbázisok másik végletet képviselik, tehát ezek stateful alkalmazások. A Kubernetes ilyen alkalmazásokhoz eredetileg nem volt tervezve.

Van azonban néhány új funkció, amelyek a közelmúltban jelentek meg a Kubernetes-ben, és lehetővé teszik adatbázisok és más stateful alkalmazások használatát:

  1. A StatefulSet koncepció egy sor primitívet jelent az események kezelésére a podok leállítása kapcsán, valamint a Graceful Shutdown (előre megtervezett leállás) végrehajtására.
  2. Persistent Volumes - azok az adattárolók, amelyek a podokhoz és a Kubernetes irányító objektumokhoz kapcsolódnak.
  3. Operator Framework - tehát a lehetőség, hogy komponenseket hozzunk létre adatbázisok és más stateful alkalmazások kezelésére, amelyek több csomóponton oszlanak meg.

Már most is léteznek nagy Database as a Service szolgáltatások a nyilvános felhőkben, amelyek mögött Kubernetes áll, például: CockroachCloud, InfluxDB, PlanetScale. Tehát a Kubernetes alapú adatbázis nem csupán elméletben lehetséges, hanem a gyakorlatban is működik.

A Percona-nak két open source megoldása van Kubernetes-hez:

  1. Kubernetes Operator a Percona Server for MongoDB-hoz.
  2. Kubernetes Operator az XtraDB CLUSTER-hez - egy MySQL kompatibilis szolgáltatás, amely magas rendelkezésre állást és konzisztenciát biztosít. Egyetlen csomópont is használható, ha a magas rendelkezésre állás nem szükséges, például dev adatbázis esetén.

A Kubernetes felhasználókat két csoportra lehet osztani. Egyesek közvetlenül használják a Kubernetes Operátorokat - ők főként haladó felhasználók, akik jól értik a technológiát. Mások a hátterében futtatják - ezeknek a felhasználóknak valami olyan érdekli őket, mint a Database as a Service, és nem akarnak belemerülni a Kubernetes részleteibe. A második csoport számára van egy másik open source megoldásunk - Percona DBaaS CLI Tool. Ez egy kísérleti megoldás, amely lehetővé teszi, hogy open source DBaaS-t kapjanak Kubernetes alapú megoldásként anélkül, hogy mélyen megértenék a technológiát.

Hogyan indítsuk el a Percona DBaaS-t a Google Kubernetes Engine-en

A Google Kubernetes Engine, véleményem szerint, az egyik legfunkcionálisabb megvalósítása a Kubernetes technológiának. Elérhető sok régióban a világban, és rendelkezik egy egyszerű és felhasználóbarát Parancssori Eszközzel (SDK), amely lehetővé teszi a szkriptek létrehozását, nem pedig a platform manuális kezelését.

Ahhoz, hogy a DBaaS működjön, a következő komponensekre van szükség:

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

A kubectl telepítése

Telepítsük a csomagot az operációs rendszeréhez, az Ubuntu példáját fogjuk megvizsgálni. Bővebben itt.

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

A Google Cloud SDK telepítése

Hasonlóan telepítjük a szoftvercsomagot. Bővebben itt.

# 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

A Percona DBaaS CLI telepítése

Telepítés a Percona tárolókból. A Percona DBaaS CLI Eszköz egyelőre kísérleti termék, ezért egy külön kísérleti tárolóban található, amit külön kell bekapcsolni, még akkor is, ha a Percona tárolók már telepítve vannak.

További információ itt.

A telepítési folyamat:

  1. Állítsa be a Percona tárolókat a percona-release eszközzel. Először le kell töltenie és telepítenie a Percona hivatalos percona-release csomagját:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Kapcsolja be a tárolók kísérleti összetevőit a következőképpen:
    sudo percona-release enable tools experimental
    
  3. Telepítse a percona-dbaas-cli csomagot:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

A komponens működésének beállítása

További információ a beállításokról itt.

Először be kell jelentkeznie a Google-fiókjába. A Google Cloud lehetővé teszi egy felhasználónak, hogy több független projektje legyen, ezért meg kell adni a munkaprojektet, a projekt kódjának használatával:

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

Ezután klustercsoportot hozunk létre. A bemutatóra egy háromnodes Kubernetes klasztert hoztam létre - ez a minimum, ami a magas rendelkezésre álláshoz szükséges:

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

A következő kubectl parancs a szükséges jogosultságokat adja meg a jelenlegi felhasználónknak:

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

Ezután létrehozzuk a namespace-t és aktívvá tesszük. A namespace, durván fogalmazva, mint egy projekt vagy környezet, de már a Kubernetes klaszteren belül. Ez független a Google Cloud projektektől:

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

Klaszter indítása

Miután végigmentünk ezeken a lépéseken, egy ilyen egyszerű paranccsal elindíthatjuk a három nodes klasztert:

# 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

Hogyan csatlakozzunk a klaszterhez

Alapértelmezetten csak a Kubernetes-en belül érhető el. Ez azt jelenti, hogy az a szerver, ahonnan a 'Létrehozás' parancsot kiadtad, nem fér hozzá. Ahhoz, hogy elérhetővé váljon, például az ügyféltesztekhez, porttovábbítást kell beállítanod:

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

Ezután csatlakozunk az MySQL-klienshez:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Haladó parancsok a klaszter kezelésére

Adatbázis nyilvános IP-n

Ha egy tartósabb megoldást szeretnél a klaszter elérhetőségére, külső IP-címet is kérhetsz. Ebben az esetben az adatbázis bárhonnan elérhető lesz. Ez kevésbé biztonságos, de gyakran kényelmesebb. Külső IP-hoz az alábbi parancsot használjuk:

# 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

Kifejezetten megadjuk a jelszót

Ahelyett, hogy a rendszer véletlenszerűen generálna jelszót, kifejezetten megadhatod a jelszót:

# 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

Megjelenítem a szkriptek kimenetét olvasható formátumban, de a JSON formátum is támogatott.

Kikapcsoljuk a magas rendelkezésre állást

A következő paranccsal kikapcsolhatjuk a magas rendelkezésre állást, hogy egyetlen csomópontot telepítsünk:

# 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

Ez a megoldás tesztfeladatokhoz készült, hogy a lehető leggyorsabban és egyszerűbben felállíthassuk az MySQL-t, tesztelhetjük, majd leállíthatjuk vagy fejlesztés céljából használhatjuk.

A Percona DBaaS CLI eszköz segít egy Kubernetes-alapú DBaaS megoldás létrehozásában. Eközben folyamatosan dolgozunk a funkcionalitásán és a használhatóságán.

Ez a beszéd először hangzott el @Adatbázis Meetup by Mail.ru Cloud Solutions&Tarantool. Tekintse meg videón más előadásokat, és iratkozz fel az események értesítéseire a Telegramon A Kubernetes körül a Mail.ru Groupban.

További olvasmányok a témában:

  1. Adatbázisok a modern IIoT-platformon.
  2. Hogyan válasszuk ki az adatbázist a projekthez, hogy ne kelljen újra választani.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster