Jmenuji se Petr Zajcev, jsem generální ředitel a zakladatel a chci říct:
- jak jsme přešli z open source řešení na Database as a Service;
- jaké existují přístupy k nasazení databází v cloudu;
- jak může Kubernetes nahradit DBaaS, odstraněním závislosti na dodavateli a zachováním jednoduchosti DBMS jako služby.
Článek byl připraven na základě prezentace na @Databases Meetup od Mail.ru Cloud Solutions & Tarantool. Pokud se vám nechce číst, můžete se podívat na:

Jak jsme přešli z open source na Database as a Service v cloudu
Open source se zabývám od konce 90. let. Před dvaceti lety bylo používání open source, například databází, daleko složitější. Bylo nutné stáhnout zdrojové kódy, opravit, zkompilovat a až poté používat.
Poté open source prošlo řadou zjednodušení:
- zdrojové kódy Tar.gz a INSTALL, které bylo třeba kompilovat;
- balíčky se závislostmi jako .deb a .rpm, kde stačilo pouze nainstalovat sadu balíčků;
- repozitáře balíčků jako APT a YUM, díky nimž probíhá instalace automaticky;
- taková řešení jako Docker a Snap, která umožňují získat balíčky při instalaci bez externích závislostí.
Výsledkem je, že používání otevřeného softwaru se stává jednodušším a také se snižuje prahová hodnota pro vývoj takových aplikací.
Na rozdíl od situace před 20 lety, kdy byli všichni experti na kompilaci, dnes většina vývojářů nedokáže sestavit používané nástroje ze zdrojových kódů.
Ve skutečnosti to není špatné, protože:
- Můžeme používat složitější, ale pohodlnější software. Například prohlížeč – je pohodlné ho používat, ale obsahuje spoustu open source komponentů, jeho sestavení od nuly je nepohodlné.
- Více lidí se může stát vývojáři open source a jiného softwaru, více softwaru využívá podnikání, roste poptávka po něm.
Na druhé straně – následující krok v zjednodušení souvisí s používáním cloudových řešení, což vede k jistému vendor lock-in, tedy vázání na jednoho dodavatele. Používáme jednoduchá řešení a poskytovatelé využívají open source komponenty, ale ve skutečnosti jsou přibity hřebíky k jednomu z velkých cloudů. To znamená, že nejjednodušší a nejrychlejší způsob, jak nasadit open source (a s ním kompatibilní software), je v cloudech, s využitím proprietárního API.
Pokud mluvíme o databázích v cloudu, existují dva přístupy:
- Vytvořte infrastrukturní databázi, jako v běžném datovém centru. To znamená vzít standardní stavební bloky: výpočet, úložiště a tak dále, nainstalovat na ně Linux, databázi, nakonfigurovat.
- Používejte Database as a Service, kde poskytovatel nabízí již připravenou databázi uvnitř cloudu.
V současnosti je DBaaS rychle rostoucím trhem, protože tento servis umožňuje vývojářům pracovat s databázemi přímo a minimalizuje rutinní práci. Poskytovatel se zavazuje zajištění vysoké dostupnosti a jednoduchého škálování, patchování databáze, zálohování, konfiguraci výkonu.
Dva typy Database as a Service na základě open source a alternativa v podobě Kubernetes.
Existují dva typy Database as a Service pro otevřené databáze:
- Standardní open source produkt, zabalený do backendu pro správu, což usnadňuje nasazení a správu.
- Pokročilé komerční řešení s různými doplňky, kompatibilní s open source.
Oba varianty snižují možnost migrace mezi cloudy, snižují přenositelnost dat a aplikací. Například, i když různé typy cloudů podporují v zásadě stejný standardní MySQL, mezi nimi jsou podstatné rozdíly: v provozu, výkonnosti, zálohování a tak dále. Migrace z jednoho cloudu do druhého může být obtížná, zejména pro složité aplikace.
A zde vyvstává otázka — je možné získat pohodlí Database as a Service, ale jako jednoduché open source řešení?
Špatná zpráva je, že bohužel v současné době taková řešení na trhu neexistují. Dobrá zpráva — existuje Kubernetes, který umožňuje tato řešení realizovat.
Kubernetes je operační systém pro cloud nebo datové centrum, který umožňuje nasazení aplikace a její správu na mnoha serverech clusteru, nikoli na jednom hostiteli.
Kubernetes je v současnosti lídrem v kategorii podobného softwaru. Pro takové úkoly existovalo mnoho různých řešení, ale právě on se stal standardem. Mnoho společností, které se dříve věnovaly alternativním řešením, se nyní soustředí na přizpůsobení svých produktů pro podporu Kubernetes.
Kromě toho je Kubernetes univerzálním řešením, které je podporováno v privátních, veřejných i hybridních cloudech mnoha dodavatelů, například: AWS, Google Cloud, Microsoft Azure. .
Jak Kubernetes pracuje s databázemi
Kubernetes byl původně vyvinut pro stateless aplikace, které zpracovávají data, ale nic neukládají, například mikroservisy nebo webové aplikace. Databáze jsou na opačném konci spektra, což znamená, že jsou to stateful aplikace. A Kubernetes pro takové aplikace původně nebyl určen.
Existují však funkce, které se v Kubernetes nedávno objevily a umožňují používat databáze a další stateful aplikace:
- Koncept StatefulSet je celá série primitiv pro zpracování událostí o zastavení podů a provádění Graceful Shutdown (předvídatelného ukončení aplikace).
- Persistent Volumes jsou úložiště dat, která jsou spojena s pody, objekty řízení Kubernetes.
- Operator Framework znamená možnost vytvářet komponenty pro správu databází a dalších stateful aplikací, rozložených na mnoha uzlech.
Na veřejných cloudech již existují velké Database as a Service, jejichž backendem je Kubernetes, například: CockroachCloud, InfluxDB, PlanetScale. To znamená, že databáze na Kubernetes není jen teoreticky možná, ale skutečně funguje v praxi.
Percona má dvě open source řešení pro Kubernetes:
- Kubernetes Operator pro Percona Server pro MongoDB.
- Kubernetes Operator pro XtraDB CLUSTER — služba, která je kompatibilní s MySQL, zajišťuje vysokou dostupnost a konzistentnost. Také je možné použít jednokolový uzel, pokud vysoká dostupnost není potřeba, například pro dev database.
Uživatelé Kubernetes se dají rozdělit do dvou skupin. Někteří používají Kubernetes Operators přímo — to jsou většinou pokročilí uživatelé, kteří dobře rozumějí tomu, jak technologie funguje. Jiní ji spouštějí na backendu — těmto uživatelům jde o něco jako Database as a Service, nechtějí se zabývat nuancemi fungování Kubernetes. Pro druhou skupinu uživatelů máme další open source řešení — Percona DBaaS CLI Tool. To je experimentální řešení pro ty, kteří chtějí získat open source DBaaS založené na Kubernetes bez hlubokého porozumění technologii.
Jak spustit DBaaS od Percona na Google Kubernetes Engine
Google Kubernetes Engine je podle mě jednou z nejfunkčnějších realizací technologie Kubernetes. Je dostupný v mnoha regionech světa a disponuje jednoduchým a uživatelsky přívětivým nástrojem příkazového řádku (SDK), který umožňuje vytvářet skripty, místo aby se platforma spravovala ručně.
Aby náš DBaaS fungoval, potřebujeme následující komponenty:
- Kubectl.
- Google Cloud SDK.
- Percona DBaaS CLI.
Instalujeme kubectl
Instalujeme balíček pro váš operační systém, ukážeme si to na příkladu Ubuntu. Více informací .
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
Instalujeme Google Cloud SDK
Podobně instalujeme balíček softwaru. Více informací .
# 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
Instalujeme Percona DBaaS CLI
Instalujeme z repozitářů Percona. Nástroj Percona DBaaS CLI je zatím experimentální produkt, a proto se nachází v experimentálním repozitáři, který je potřeba aktivovat zvlášť, i když již máte nainstalované repozitáře Percona.
Více informací .
Algoritmus instalace:
- Nastavte repozitáře Percona pomocí nástroje percona-release. Nejprve si musíte stáhnout a nainstalovat oficiální balíček percona-release od Percona:
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb - Aktivujte experimentální komponentu nástrojů repozitáře následujícím způsobem:
sudo percona-release enable tools experimental - Nainstalujte balíček percona-dbaas-cli:
sudo apt-get update sudo apt-get install percona-dbaas-cli
Nastavujeme funkčnost komponentů
Více o nastavení .
Nejprve se musíte přihlásit do svého účtu Google. Dále Google Cloud umožňuje jednomu uživateli mít mnoho nezávislých projektů, proto je potřeba uvést pracovní projekt pomocí kódu tohoto projektu:
gcloud auth login
gcloud config set project hidden-brace-236921
Následně vytvoříme cluster. Pro demo jsem vytvořil Kubernetes cluster ze tří uzlů — to je minimum potřebné pro vysokou dostupnost:
gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
Další příkaz kubectl dává potřebná oprávnění našemu aktuálnímu uživateli:
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)Poté vytvoříme namespace a aktivujeme ho. Namespace je v podstatě jako projekt nebo prostředí, ale už uvnitř Kubernetes clusteru. Je nezávislý na projektech Google Cloud:
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
Spouštíme cluster
Po dokončení těchto několika kroků můžeme spustit cluster ze tří uzlů jednoduchým příkazem:
# 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
Jak se připojit k clusteru
Ve výchozím nastavení je k dispozici pouze uvnitř Kubernetes. To znamená, že z tohoto serveru, ze kterého jste spustili příkaz „Vytvořit“, není dostupný. Aby byl k dispozici, například pro testy s klientem, je třeba přesměrovat port prostřednictvím Port Mapping:
kubectl port-forward svc/example-proxysql 3306:3306 $Poté připojíme váš MySQL klient:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Pokročilé příkazy pro správu clusteru
Databáze na veřejné IP
Pokud chcete trvalejší řešení pro přístup k clusteru, můžete získat externí IP adresu. V tomto případě bude databáze dostupná odkudkoli. Je to méně bezpečné, ale často pohodlnější. Pro externí IP použijte následující příkaz:
# 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
Explicitně nastavujeme heslo
Místo toho, aby systém generoval heslo náhodně, můžete nastavit heslo explicitně:
# 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
Ukazuji výstup skriptů ve čitelném formátu, ale také je podporován formát JSON.
Vypínáme vysokou dostupnost
Následujícím příkazem můžete vypnout vysokou dostupnost pro nasazení 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
Toto řešení je určeno pro testovací úkoly, abyste co nejrychleji a nejjednodušeji zprovoznili MySQL, otestovali ho a poté zrušili nebo použili pro vývoj.
Nástroj Percona DBaaS CLI pomáhá získat řešení na Kubernetes podobné DBaaS. Pokračujeme také v práci na jeho funkcích a použitelnosti.
Tento referát byl poprvé představen na by Mail.ru Cloud Solutions&Tarantool. Podívejte se na další vystoupení a přihlaste se k oznámením akcí na Telegramu .
Co dalšího si přečíst na toto téma:
Zdroj: habr.com
