Jak vytvořit hybridní cloud pomocí Kubernetes, který může nahradit DBaaS

Jmenuji se Petr Zaitsev, jsem CEO, zakladatel percona a chci ti říct:

  • jak jsme se dostali od open source řešení k Database as a Service;
  • jaké existují přístupy k nasazování databází v cloudu;
  • jak může Kubernetes nahradit DBaaS, odstranit závislost na dodavateli a zachovat jednoduchost DBMS jako služby.

Článek byl připraven na základě zprávy na @Databases Meetup od Mail.ru Cloud Solutions & Tarantool. Pokud se vám nechce číst, můžete se podívat:


Jak jsme se dostali od open source k databázi jako službě v cloudu

V open source pracuji od konce 90. let. Před dvaceti lety nebylo používání open source, jako jsou databáze, tak snadné. Bylo potřeba stáhnout zdrojový kód, opatchovat, zkompilovat a teprve poté používat.

Open source pak prošel řadou zjednodušení:

  • Tar.gz a INSTALL zdroje, které bylo potřeba zkompilovat;
  • balíčky se závislostmi jako .deb a .rpm, kde stačí nainstalovat sadu balíčků;
  • repozitáře balíčků jako APT a YUM, u kterých je instalace automatická;
  • řešení, jako jsou Docker a Snap, které umožňují přijímat balíčky instalací bez externích závislostí.

V důsledku toho je snazší používat software s otevřeným zdrojovým kódem a také se snižuje překážka vstupu do vývoje takových aplikací.

Současně, na rozdíl od situace před 20 lety, kdy byl každý odborníkem na montáž, nyní většina vývojářů nemůže vytvářet nástroje, které používají, ze zdroje.

Ve skutečnosti to není špatné, protože:

  1. Můžeme použít složitější, ale uživatelsky přívětivější software. Například prohlížeč je vhodný k použití, ale obsahuje mnoho komponent s otevřeným zdrojovým kódem a je nepohodlné sestavit od začátku.
  2. Více lidí se může stát vývojáři open source a dalšího softwaru, podniky používají více softwaru a jeho potřeba je větší.

Nevýhodou je, že další krok ve zjednodušení je spojen s využitím cloudových řešení a to vede k určitému vendor lock-in, tedy vázání na jednoho dodavatele. Používáme jednoduchá řešení a poskytovatelé používají open source komponenty, ale ve skutečnosti jsou přibiti k jednomu z velkých cloudů. To znamená, že nejjednodušší a nejrychlejší způsob nasazení open source (a softwaru s ním kompatibilního) je v cloudu pomocí proprietárního API.

Pokud jde o databáze v cloudu, existují dva přístupy:

  1. Sestavte databázovou infrastrukturu jako v běžném datovém centru. To znamená, že vezměte standardní stavební bloky: výpočet, úložiště atd., nainstalujte na ně Linux a databázi a nakonfigurujte je.
  2. Použijte Database as a Service, kdy poskytovatel nabízí hotovou databázi uvnitř cloudu.

DBaaS je nyní rychle rostoucí trh, protože umožňuje vývojářům pracovat přímo s databázemi a minimalizuje rutinní práci. Poskytovatel se zavazuje zajistit vysokou dostupnost a snadné škálování, záplatování databáze, zálohování a ladění výkonu.

Dva typy Database as a Service založené na open source a alternativa v podobě Kubernetes

Existují dva typy Databáze jako služba pro otevřené databáze:

  1. Standardní open source produkt zabalený v administračním backendu pro snadné nasazení a správu.
  2. Pokročilé komerční řešení s různými doplňky, kompatibilní s open source.

Obě možnosti snižují možnost migrace mezi cloudy a snižují přenositelnost dat a aplikací. Například navzdory tomu, že různé typy cloudů podporují v podstatě stejný standard MySQL, existují mezi nimi značné rozdíly: v provozu, výkonu, zálohování a tak dále. Migrace z jednoho cloudu do druhého může být náročná, zejména u složitých aplikací.

A zde se nabízí otázka – je možné získat pohodlí Databáze jako služby, ale jako jednoduché open source řešení?

Špatná zpráva je, že taková řešení na trhu zatím bohužel nejsou. Dobrou zprávou je, že existuje Kubernetes, který umožňuje implementovat taková řešení.

Kubernetes je operační systém pro cloud nebo datové centrum, který umožňuje nasadit a spravovat aplikaci na více serverech v clusteru, nikoli na jednom hostiteli.

Nyní je Kubernetes lídrem v kategorii takového softwaru. Pro takové problémy existovalo mnoho různých řešení, ale stalo se standardem. Mnoho společností, které se dříve zaměřovaly na alternativní řešení, se nyní zaměřuje na přizpůsobení svých produktů pro podporu Kubernetes.

Kubernetes je navíc univerzální řešení, které je podporováno v privátních, veřejných a hybridních cloudech mnoha dodavatelů, například: AWS, Google Cloud, Microsoft Azure, Cloudová řešení Mail.ru.

Jak Kubernetes pracuje s databázemi

Kubernetes byl původně navržen pro bezstavové aplikace, které zpracovávají data, ale nic neukládají, jako jsou mikroslužby nebo webové aplikace. Databáze jsou na druhém konci spektra, to znamená, že jsou to stavové aplikace. A Kubernetes nebyl původně určen pro takové aplikace.

V Kubernetes se však nedávno objevily funkce, které umožňují použití databází a dalších stavových aplikací:

  1. Koncept StatefulSet je celá řada primitiv pro zpracování událostí o zastavení práce podů a implementaci Graceful Shutdown (předvídatelné vypnutí aplikace).
  2. Trvalé svazky jsou datová úložiště, která jsou spojena s pody, objekty správy Kubernetes.
  3. Operator Framework – tedy schopnost vytvářet komponenty pro správu databází a dalších stavových aplikací distribuovaných napříč mnoha uzly.

Již nyní ve veřejných cloudech existují velké Databáze jako služba, jejichž backendem je Kubernetes, například: CockroachCloud, InfluxDB, PlanetScale. To znamená, že databáze na Kubernetes není jen něco, co je teoreticky možné, ale také něco, co funguje v praxi.

Percona má dvě open source řešení pro Kubernetes:

  1. Kubernetes Operator pro Percona Server pro MongoDB.
  2. Kubernetes Operator for XtraDB CLUSTER je služba, která je kompatibilní s MySQL a poskytuje vysokou dostupnost a konzistenci. Můžete také použít jeden uzel, pokud není potřeba vysoká dostupnost, například pro dev databázi.

Uživatelé Kubernetes se dají rozdělit do dvou skupin. Někteří lidé používají přímo Kubernetes Operators – jde především o pokročilé uživatele, kteří dobře rozumí tomu, jak technologie funguje. Jiní to provozují na backendu – takové uživatele zajímá něco jako Database as a Service, nechtějí se pouštět do nuancí Kubernetes. Pro druhou skupinu uživatelů máme další open source řešení – Percona DBaaS CLI Tool. Toto je experimentální řešení pro ty, kteří chtějí získat open source DBaaS založený na Kubernetes bez hlubokého porozumění této technologii.

Jak spustit DBaaS Percona na Google Kubernetes Engine

Google Kubernetes Engine je podle mého názoru jednou z nejfunkčnějších implementací technologie Kubernetes. Je k dispozici v mnoha oblastech světa a má jednoduchý a pohodlný nástroj příkazového řádku (SDK), který vám umožňuje vytvářet skripty namísto ruční správy platformy.

Aby naše DBaaS fungovala, potřebujeme následující komponenty:

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

Nainstalujte kubectl

Nainstalujeme balíček pro váš operační systém, podíváme se na příklad Ubuntu. Více informací zde.

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

Instalace Google Cloud SDK

Softwarový balíček nainstalujeme stejným způsobem. Více informací zde.

# 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

Instalace Percona DBaaS CLI

Nainstalujte z úložišť Percona. Percona DBaaS CLI Tool je stále experimentální produkt, takže je umístěn v experimentálním úložišti, které je nutné povolit samostatně, i když již máte nainstalované úložiště Percona.

více zde.

Instalační algoritmus:

  1. Nastavte úložiště 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. Povolte komponentu úložiště experimentálních nástrojů takto:
    sudo percona-release enable tools experimental
    
  3. Nainstalujte balíček percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Nastavení provozu komponent

Více o nastavení zde.

Nejprve se musíte přihlásit ke svému účtu Google. Google Cloud dále umožňuje jednomu uživateli mít mnoho nezávislých projektů, takže musíte určit fungující projekt pomocí kódu pro tento projekt:

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

Dále vytvoříme cluster. Pro ukázku jsem vytvořil cluster Kubernetes pouze se třemi uzly – to je minimum požadované pro vysokou dostupnost:

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

Následující příkaz kubectl dává požadovaná 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 jmenný prostor a aktivujeme jej. Namespace je, zhruba řečeno, také jako projekt nebo prostředí, ale již uvnitř clusteru Kubernetes. Je nezávislý na projektech Google Cloud:

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

Spuštění clusteru

Jakmile projdeme těmito několika kroky, můžeme spustit tříuzlový cluster pomocí tohoto jednoduchého příkazu:

# 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 ke clusteru

Ve výchozím nastavení je k dispozici pouze uvnitř Kubernetes. To znamená, že není přístupný z tohoto serveru, ze kterého jste spustili příkaz „Vytvořit“. Chcete-li jej zpřístupnit například pro testy s klientem, musíte port předat prostřednictvím mapování portů:

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

Poté připojíme vašeho klienta MySQL:

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í dostupnosti clusteru, můžete získat externí IP adresu. V tomto případě bude databáze přístupná odkudkoli. To je méně bezpečné, ale často pohodlnější. Pro externí IP používáme 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ě nastavte heslo

Místo toho, aby systém náhodně generoval heslo, můžete heslo nastavit 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

Zobrazuji výstup skriptů ve formátu čitelném pro člověka, ale je podporován i formát JSON.

Vypnutí vysoké dostupnosti

Pomocí následujícího příkazu můžete zakázat vysokou dostupnost pro nasazení jednoho uzlu:

# 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 je řešení pro testovací úlohy, aby se MySQL co nejrychleji a nejsnáze zprovoznilo, otestovalo a poté se vypnulo nebo použilo pro vývoj.

Nástroj Percona DBaaS CLI vám pomůže dosáhnout řešení podobného DBaaS na Kubernetes. Zároveň i nadále pracujeme na jeho funkčnosti a použitelnosti.

Tato zpráva byla poprvé prezentována na @Setkání s databázemi od Mail.ru Cloud Solutions&Tarantool. Dívej se видео další představení a přihlaste se k odběru oznámení o událostech na Telegramu Kolem Kubernetes ve skupině Mail.ru.

Co si ještě přečíst k tématu:

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

Zdroj: www.habr.com

Přidat komentář