Hur man bygger ett hybridmoln med Kubernetes som kan ersätta DBaaS
Jag heter Petr Zaitsev, jag är VD, grundare percona och jag vill berätta:
hur vi kom från lösningar med öppen källkod till Database as a Service;
vilka metoder finns för att distribuera databaser i molnet;
hur Kubernetes kan ersätta DBaaS, eliminera leverantörsberoende och bibehålla enkelheten hos DBMS som en tjänst.
Artikeln utarbetades baserat på en rapport på @Databases Meetup av Mail.ru Cloud Solutions & Tarantool. Om du inte vill läsa kan du titta på:
Hur vi kom från öppen källkod till Database as a Service i molnet
Jag har arbetat med öppen källkod sedan slutet av 90-talet. För tjugo år sedan var det inte så lätt att använda öppen källkod, som databaser. Det var nödvändigt att ladda ner källkoden, patcha den, kompilera den och först därefter använda den.
Öppen källkod gick sedan igenom en rad förenklingar:
Tar.gz och INSTALL källor som behövde kompileras;
paket med beroenden som .deb och .rpm, där du bara behöver installera en uppsättning paket;
paketförråd som APT och YUM, med vilka installationen är automatisk;
lösningar som Docker och Snap, som låter dig ta emot paket genom installation utan externa beroenden.
Som ett resultat blir det lättare att använda programvara med öppen källkod och sänker också inträdesbarriären för att utveckla sådana applikationer.
Samtidigt, till skillnad från situationen för 20 år sedan, när alla var monteringsexperter, kan nu de flesta utvecklare inte bygga verktygen de använder från källan.
Faktum är att detta inte är dåligt, eftersom:
Vi kan använda mer komplex men mer användarvänlig programvara. En webbläsare är till exempel bekväm att använda, men den innehåller många komponenter med öppen källkod och är obekväm att bygga från grunden.
Fler kan bli utvecklare av öppen källkod och annan programvara, mer programvara används av företag och behovet av det är större.
Nackdelen är att nästa steg i förenkling är förknippat med användningen av molnlösningar och det leder till en viss leverantörslåsning, det vill säga bindning till en leverantör. Vi använder enkla lösningar och leverantörer använder komponenter med öppen källkod, men i själva verket är de spikade till ett av de stora molnen. Det vill säga, det enklaste och snabbaste sättet att distribuera öppen källkod (och programvara som är kompatibel med den) är i molnen, med hjälp av ett proprietärt API.
När det kommer till databaser i molnet finns det två tillvägagångssätt:
Sätt ihop databasinfrastrukturen, som i ett vanligt datacenter. Det vill säga, ta standardbyggstenar: beräkna, lagring och så vidare, installera Linux och en databas på dem och konfigurera dem.
Använd Database as a Service, där leverantören erbjuder en färdig databas inuti molnet.
DBaaS är en snabbt växande marknad just nu eftersom det tillåter utvecklare att arbeta direkt med databaser och minimerar rutinarbete. Leverantören åtar sig att säkerställa hög tillgänglighet och enkel skalning, databaspatchning, säkerhetskopiering och prestandajustering.
Två typer av Database as a Service baserad på öppen källkod och ett alternativ i form av Kubernetes
Det finns två typer av Database as a Service för öppna databaser:
En standardprodukt med öppen källkod förpackad i en administrationsbackend för enkel distribution och hantering.
En avancerad kommersiell lösning med olika tillägg, kompatibel med öppen källkod.
Båda alternativen minskar möjligheten till migrering mellan moln och minskar portabiliteten av data och applikationer. Till exempel, trots att olika typer av moln stöder i huvudsak samma standard MySQL, finns det betydande skillnader mellan dem: i drift, prestanda, säkerhetskopiering och så vidare. Att migrera från ett moln till ett annat kan vara utmanande, särskilt för komplexa applikationer.
Och här uppstår frågan - är det möjligt att få bekvämligheten med Database as a Service, men som en enkel öppen källkodslösning?
Den dåliga nyheten är att det tyvärr inte finns några sådana lösningar på marknaden ännu. Den goda nyheten är att det finns Kubernetes, som låter dig implementera sådana lösningar.
Kubernetes är ett operativsystem för molnet eller datacentret som låter dig distribuera och hantera en applikation över flera servrar i ett kluster snarare än på en enda värd.
Nu är Kubernetes ledande inom kategorin för sådan programvara. Det fanns många olika lösningar på sådana problem, men det blev standarden. Många företag som tidigare fokuserade på alternativa lösningar fokuserar nu på att anpassa sina produkter för att stödja Kubernetes.
Dessutom är Kubernetes en universell lösning som stöds i privata, offentliga och hybridmoln från många leverantörer, till exempel: AWS, Google Cloud, Microsoft Azure, Mail.ru molnlösningar.
Hur Kubernetes fungerar med databaser
Kubernetes designades ursprungligen för tillståndslösa applikationer som bearbetar data men inte lagrar någonting, till exempel mikrotjänster eller webbapplikationer. Databaser finns i andra änden av spektrumet, det vill säga de är tillståndsfulla applikationer. Och Kubernetes var ursprungligen inte avsedd för sådana applikationer.
Det finns dock funktioner som har dykt upp i Kubernetes nyligen som tillåter användning av databaser och andra stateful applikationer:
StatefulSet-konceptet är en hel serie primitiver för att bearbeta händelser om att stoppa arbetet med poddar och implementera Graceful Shutdown (förutsägbar avstängning av applikationen).
Beständiga volymer är datalager som är associerade med poddar, Kubernetes-hanteringsobjekt.
Operator Framework - det vill säga möjligheten att skapa komponenter för hantering av databaser och andra stateful applikationer fördelade över många noder.
Redan nu i publika moln finns det stora Databaser as a Service, vars backend är Kubernetes, till exempel: CockroachCloud, InfluxDB, PlanetScale. Det vill säga att en databas på Kubernetes inte bara är något som är teoretiskt möjligt, utan också något som fungerar i praktiken.
Percona har två open source-lösningar för Kubernetes:
Kubernetes Operator för Percona Server för MongoDB.
Kubernetes Operator for XtraDB CLUSTER är en tjänst som är kompatibel med MySQL och ger hög tillgänglighet och konsekvens. Du kan också använda en enda nod om hög tillgänglighet inte behövs, till exempel för en dev-databas.
Kubernetes-användare kan delas in i två grupper. Vissa använder Kubernetes Operators direkt – det är främst avancerade användare som har god förståelse för hur tekniken fungerar. Andra kör det på backend - sådana användare är intresserade av något som Database as a Service, de vill inte fördjupa sig i Kubernetes nyanser. För den andra gruppen användare har vi en annan öppen källkodslösning - Percona DBaaS CLI Tool. Detta är en experimentell lösning för dig som vill skaffa en öppen källkod DBaaS baserad på Kubernetes utan en djup förståelse för tekniken.
Hur man kör Perconas DBaaS på Google Kubernetes Engine
Google Kubernetes Engine, enligt min mening, är en av de mest funktionella implementeringarna av Kubernetes-teknik. Det är tillgängligt i många regioner i världen och har ett enkelt och bekvämt kommandoradsverktyg (SDK), som låter dig skapa skript istället för att manuellt hantera plattformen.
För att vår DBaaS ska fungera behöver vi följande komponenter:
Kubectl.
Google Cloud SDK.
Percona DBaaS CLI.
Installera kubectl
Vi installerar paketet för ditt operativsystem, vi kommer att titta på exemplet med Ubuntu. Fler detaljer här.
Vi installerar mjukvarupaketet på samma sätt. Fler detaljer här.
# 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
Installerar Percona DBaaS CLI
Installera från Perconas arkiv. Percona DBaaS CLI Tool är fortfarande en experimentell produkt, så den finns i experimentförrådet, som måste aktiveras separat, även om du redan har Percona-förråd installerade.
Ställ in Percona-förråd med hjälp av percona-release-verktyget. Först måste du ladda ner och installera det officiella percona-release-paketet från Percona:
Först måste du logga in på ditt Google-konto. Dessutom tillåter Google Cloud en användare att ha många oberoende projekt, så du måste ange ett fungerande projekt med koden för detta projekt:
gcloud auth login
gcloud config set project hidden-brace-236921
Därefter skapar vi ett kluster. För demon skapade jag ett Kubernetes-kluster med endast tre noder - detta är det minimum som krävs för hög tillgänglighet:
Sedan skapar vi ett namnutrymme och gör det aktivt. Namnutrymme är, grovt sett, också som ett projekt eller en miljö, men redan inne i ett Kubernetes-kluster. Det är oberoende av Google Cloud-projekt:
När vi har gått igenom dessa få steg kan vi starta ett tre-nodskluster med detta enkla kommando:
# 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
Hur man ansluter till ett kluster
Som standard är det bara tillgängligt i Kubernetes. Det vill säga, det är inte tillgängligt från den här servern från vilken du körde kommandot "Skapa". För att göra den tillgänglig, till exempel för tester med en klient, måste du vidarebefordra porten via Port Mapping:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Avancerade kommandon för klusterhantering
Databas om offentlig IP
Om du vill ha en mer permanent lösning för klustertillgänglighet kan du få en extern IP-adress. I det här fallet kommer databasen att vara tillgänglig var som helst. Detta är mindre säkert, men ofta mer bekvämt. För extern IP använder vi följande kommando:
# 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
Ange lösenordet uttryckligen
Istället för att systemet slumpmässigt genererar ett lösenord, kan du ange lösenordet uttryckligen:
Detta är en lösning för att testa uppgifter för att få igång MySQL så snabbt och enkelt som möjligt, testa det och sedan stänga av det eller använda det för utveckling.
Percona DBaaS CLI-verktyget hjälper dig att uppnå en DBaaS-liknande lösning på Kubernetes. Samtidigt fortsätter vi att arbeta med dess funktionalitet och användbarhet.
Denna rapport presenterades först kl @Databas Meetup av Mail.ru Cloud Solutions&Tarantool. Se video andra föreställningar och prenumerera på evenemangsmeddelanden på Telegram Runt Kubernetes på Mail.ru Group.