Jak postavit hybridní cloud pomocí Kubernetes, který může nahradit DBaaS

Jmenuji se Petr Zajcev, jsem generální ředitel a zakladatel Percona 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:

Přehrát video

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:

  1. 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é.
  2. 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:

  1. 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.
  2. 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:

  1. Standardní open source produkt, zabalený do backendu pro správu, což usnadňuje nasazení a správu.
  2. 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. Mail.ru Cloud Solutions.

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:

  1. 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).
  2. Persistent Volumes jsou úložiště dat, která jsou spojena s pody, objekty řízení Kubernetes.
  3. 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:

  1. Kubernetes Operator pro Percona Server pro MongoDB.
  2. 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:

  1. Kubectl.
  2. Google Cloud SDK.
  3. 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í tady.

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í tady.

# 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í tady.

Algoritmus instalace:

  1. 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
  2. Aktivujte experimentální komponentu nástrojů repozitáře následujícím způsobem:
    sudo percona-release enable tools experimental
    
  3. 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í tady.

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 @Databases Meetup by Mail.ru Cloud Solutions&Tarantool. Podívejte se na video další vystoupení a přihlaste se k oznámením akcí na Telegramu Kolem Kubernetes v Mail.ru Group.

Co dalšího si přečíst na toto téma:

  1. Databáze v moderní IIoT platformě.
  2. Jak vybrat databázi pro projekt, abyste ji nemuseli vybírat znovu.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster