Ako vytvoriť hybridný cloud pomocou Kubernetes, ktorý môže nahradiť DBaaS

Volám sa Petr Zaitsev, som generálny riaditeľ, zakladateľ percona a chcem ti povedať:

  • ako sme sa dostali od open source riešení k databáze ako službe;
  • aké prístupy existujú k nasadzovaniu databáz v cloude;
  • ako môže Kubernetes nahradiť DBaaS, eliminovať závislosť od dodávateľa a zachovať jednoduchosť DBMS ako služby.

Článok bol pripravený na základe správy na @Databases Meetup od Mail.ru Cloud Solutions & Tarantool. Ak sa vám nechce čítať, môžete si pozrieť:


Ako sme sa dostali od open source k databáze ako službe v cloude

V open source pracujem od konca 90-tych rokov. Pred dvadsiatimi rokmi nebolo používanie open source, napríklad databáz, také jednoduché. Bolo potrebné stiahnuť zdrojový kód, opraviť ho, skompilovať a až potom použiť.

Open source potom prešiel radom zjednodušení:

  • Tar.gz a INSTALL zdroje, ktoré bolo potrebné skompilovať;
  • balíky so závislosťami ako .deb a .rpm, kde stačí nainštalovať sadu balíkov;
  • repozitáre balíkov ako APT a YUM, s ktorými je inštalácia automatická;
  • riešenia ako Docker a Snap, ktoré vám umožňujú prijímať balíčky inštaláciou bez externých závislostí.

Výsledkom je, že je jednoduchšie používať softvér s otvoreným zdrojovým kódom a tiež sa znižuje prekážka vstupu do vývoja takýchto aplikácií.

Zároveň, na rozdiel od situácie pred 20 rokmi, keď bol každý odborníkom na montáž, teraz väčšina vývojárov nemôže zostavovať nástroje, ktoré používajú, zo zdroja.

V skutočnosti to nie je zlé, pretože:

  1. Môžeme použiť zložitejší, ale užívateľsky príjemnejší softvér. Napríklad prehliadač je vhodný na používanie, ale obsahuje veľa komponentov s otvoreným zdrojovým kódom a je nepohodlné ho zostavovať od začiatku.
  2. Viac ľudí sa môže stať vývojármi open source a iného softvéru, podniky používajú viac softvéru a jeho potreba je väčšia.

Nevýhodou je, že ďalší krok v zjednodušení je spojený s využívaním cloudových riešení a to vedie k určitej vendor lock-in, teda viazanosti na jedného dodávateľa. Používame jednoduché riešenia a poskytovatelia využívajú open source komponenty, no v skutočnosti sú priklincovaní k jednému z veľkých cloudov. To znamená, že najjednoduchší a najrýchlejší spôsob nasadenia open source (a softvéru s ním kompatibilného) je v cloude pomocou proprietárneho API.

Pokiaľ ide o databázy v cloude, existujú dva prístupy:

  1. Zostavte databázovú infraštruktúru ako v bežnom dátovom centre. To znamená, že vezmite štandardné stavebné bloky: výpočet, úložisko a tak ďalej, nainštalujte na ne Linux a databázu a nakonfigurujte ich.
  2. Použite Databázu ako službu, kde poskytovateľ ponúka hotovú databázu vo vnútri cloudu.

DBaaS je v súčasnosti rýchlo rastúci trh, pretože umožňuje vývojárom pracovať priamo s databázami a minimalizuje rutinnú prácu. Poskytovateľ sa zaväzuje zabezpečiť vysokú dostupnosť a jednoduché škálovanie, záplatovanie databázy, zálohovanie a ladenie výkonu.

Dva typy Databáza ako služba založená na otvorenom zdroji a alternatíva v podobe Kubernetes

Existujú dva typy databázy ako služby pre otvorené databázy:

  1. Štandardný open source produkt zabalený v administračnom backende pre jednoduché nasadenie a správu.
  2. Pokročilé komerčné riešenie s rôznymi doplnkami, kompatibilné s open source.

Obe možnosti znižujú možnosť migrácie medzi cloudmi a znižujú prenosnosť dát a aplikácií. Napríklad aj napriek tomu, že rôzne typy cloudov podporujú v podstate rovnaký štandard MySQL, existujú medzi nimi značné rozdiely: v prevádzke, výkone, zálohovaní atď. Migrácia z jedného cloudu do druhého môže byť náročná, najmä pre zložité aplikácie.

A tu vyvstáva otázka – je možné získať pohodlie Databáza ako služby, ale ako jednoduché open source riešenie?

Zlou správou je, že takéto riešenia, žiaľ, na trhu zatiaľ nie sú. Dobrou správou je, že existuje Kubernetes, ktorý umožňuje implementovať takéto riešenia.

Kubernetes je operačný systém pre cloud alebo dátové centrum, ktorý vám umožňuje nasadiť a spravovať aplikáciu na viacerých serveroch v klastri, a nie na jednom hostiteľovi.

Teraz je Kubernetes lídrom v kategórii takéhoto softvéru. Na takéto problémy existovalo veľa rôznych riešení, ale stalo sa to štandardom. Mnoho spoločností, ktoré sa predtým zameriavali na alternatívne riešenia, sa teraz zameriavajú na prispôsobenie svojich produktov na podporu Kubernetes.

Okrem toho je Kubernetes univerzálnym riešením, ktoré je podporované v súkromných, verejných a hybridných cloudoch mnohých dodávateľov, napríklad: AWS, Google Cloud, Microsoft Azure, Cloudové riešenia Mail.ru.

Ako Kubernetes pracuje s databázami

Kubernetes bol pôvodne navrhnutý pre bezstavové aplikácie, ktoré spracúvajú dáta, ale nič neukladajú, ako sú mikroslužby alebo webové aplikácie. Databázy sú na druhom konci spektra, to znamená, že sú to stavové aplikácie. A Kubernetes nebol pôvodne určený pre takéto aplikácie.

V Kubernetes sa však nedávno objavili funkcie, ktoré umožňujú používanie databáz a iných stavových aplikácií:

  1. Koncept StatefulSet je celý rad primitív na spracovanie udalostí o zastavení práce modulov a implementácii Graceful Shutdown (predvídateľné vypnutie aplikácie).
  2. Trvalé zväzky sú dátové úložiská, ktoré sú spojené s modulmi, objektmi správy Kubernetes.
  3. Operator Framework – teda schopnosť vytvárať komponenty pre správu databáz a iných stavových aplikácií distribuovaných naprieč mnohými uzlami.

Už teraz vo verejných cloudoch existujú veľké databázy ako služba, ktorých backendom je Kubernetes, napríklad: CockroachCloud, InfluxDB, PlanetScale. To znamená, že databáza na Kubernetes nie je len niečo, čo je teoreticky možné, ale aj niečo, čo funguje v praxi.

Percona má dve open source riešenia pre Kubernetes:

  1. Operátor Kubernetes pre server Percona pre MongoDB.
  2. Kubernetes Operator for XtraDB CLUSTER je služba, ktorá je kompatibilná s MySQL a poskytuje vysokú dostupnosť a konzistenciu. Môžete tiež použiť jeden uzol, ak nie je potrebná vysoká dostupnosť, napríklad pre dev databázu.

Používatelia Kubernetes sa dajú rozdeliť do dvoch skupín. Niektorí používajú operátorov Kubernetes priamo – ide najmä o pokročilých používateľov, ktorí dobre rozumejú tomu, ako táto technológia funguje. Iní to spúšťajú na backende – takých používateľov zaujíma niečo ako Databáza ako služba, nechcú sa vŕtať v nuansách Kubernetes. Pre druhú skupinu používateľov máme ďalšie open source riešenie – Percona DBaaS CLI Tool. Toto je experimentálne riešenie pre tých, ktorí chcú získať open source DBaaS založený na Kubernetes bez hlbokého pochopenia technológie.

Ako spustiť DBaaS Percona na Google Kubernetes Engine

Google Kubernetes Engine je podľa môjho názoru jednou z najfunkčnejších implementácií technológie Kubernetes. Je k dispozícii v mnohých regiónoch sveta a má jednoduchý a pohodlný nástroj príkazového riadka (SDK), ktorý vám umožňuje vytvárať skripty namiesto manuálneho spravovania platformy.

Aby naše DBaaS fungovalo, potrebujeme nasledujúce komponenty:

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

Nainštalujte kubectl

Nainštalujeme balík pre váš operačný systém, pozrieme sa na príklad Ubuntu. Viac informácií tu.

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

Inštaluje sa Google Cloud SDK

Softvérový balík nainštalujeme rovnakým spôsobom. Viac informácií tu.

# 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

Inštalácia Percona DBaaS CLI

Nainštalujte z úložiska Percona. Percona DBaaS CLI Tool je stále experimentálny produkt, takže sa nachádza v experimentálnom úložisku, ktoré je potrebné povoliť samostatne, aj keď už máte nainštalované úložiská Percona.

viac tu.

Algoritmus inštalácie:

  1. Nastavte úložiská Percona pomocou nástroja percona-release. Najprv si musíte stiahnuť a nainštalovať oficiálny balík 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. Povoľte komponent úložiska experimentálnych nástrojov takto:
    sudo percona-release enable tools experimental
    
  3. Nainštalujte balík percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Nastavenie prevádzky komponentov

Viac o nastaveniach tu.

Najprv sa musíte prihlásiť do svojho účtu Google. Služba Google Cloud ďalej umožňuje jednému používateľovi mať mnoho nezávislých projektov, takže musíte špecifikovať pracovný projekt pomocou kódu pre tento projekt:

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

Ďalej vytvoríme klaster. Pre demo som vytvoril klaster Kubernetes iba s tromi uzlami - to je minimum potrebné pre vysokú dostupnosť:

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

Nasledujúci príkaz kubectl dáva požadované privilégiá nášmu aktuálnemu používateľovi:

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

Potom vytvoríme menný priestor a aktivujeme ho. Menný priestor je, zhruba povedané, tiež ako projekt alebo prostredie, ale už vo vnútri klastra Kubernetes. Je nezávislý od projektov Google Cloud:

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

Spustenie klastra

Keď prejdeme týmito niekoľkými krokmi, môžeme spustiť klaster s tromi uzlami pomocou tohto jednoduchého prí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

Ako sa pripojiť ku klastru

V predvolenom nastavení je k dispozícii iba vo vnútri Kubernetes. To znamená, že nie je prístupný z tohto servera, z ktorého ste spustili príkaz „Vytvoriť“. Ak ho chcete sprístupniť napríklad na testy s klientom, musíte port presmerovať cez mapovanie portov:

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

Potom pripojíme vášho klienta MySQL:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Rozšírené príkazy na správu klastrov

Databáza na verejnej IP

Ak chcete trvalejšie riešenie dostupnosti klastra, môžete získať externú IP adresu. V tomto prípade bude databáza prístupná odkiaľkoľvek. Je to menej bezpečné, ale často pohodlnejšie. Pre externú IP používame nasledujúci prí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

Explicitne nastavte heslo

Namiesto toho, aby systém náhodne generoval heslo, môžete heslo nastaviť explicitne:

# 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

Zobrazujem výstup skriptov vo formáte čitateľnom pre ľudí, ale podporuje sa aj formát JSON.

Vypnutie vysokej dostupnosti

Pomocou nasledujúceho príkazu môžete zakázať vysokú dostupnosť na nasadenie jedného uzla:

# 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 riešenie pre testovacie úlohy, ako čo najrýchlejšie a najjednoduchšie spustiť MySQL, otestovať ho a potom vypnúť alebo použiť na vývoj.

Nástroj Percona DBaaS CLI vám pomôže dosiahnuť riešenie podobné DBaaS na Kubernetes. Zároveň naďalej pracujeme na jeho funkčnosti a použiteľnosti.

Táto správa bola prvýkrát prezentovaná na @Stretnutie s databázami od Mail.ru Cloud Solutions&Tarantool. Pozri video iné predstavenia a prihláste sa na odber oznamov o udalostiach na Telegrame Okolo Kubernetes v skupine Mail.ru.

Čo si ešte prečítať k téme:

  1. Databázy na modernej platforme IIoT.
  2. Ako si vybrať databázu pre projekt, aby ste nemuseli znova vyberať.

Zdroj: hab.com

Pridať komentár