ProHoster > Blog > administration > Sådan bygger du en hybridsky ved hjælp af Kubernetes, der kan erstatte DBaaS
Sådan bygger du en hybridsky ved hjælp af Kubernetes, der kan erstatte DBaaS
Mit navn er Petr Zaitsev, jeg er CEO, grundlægger percona og jeg vil gerne fortælle dig:
hvordan vi kom fra open source-løsninger til Database as a Service;
hvilke tilgange findes til at implementere databaser i skyen;
hvordan Kubernetes kan erstatte DBaaS, eliminere leverandørafhængighed og bevare enkelheden af DBMS som en tjeneste.
Artiklen blev udarbejdet baseret på en rapport på @Databases Meetup af Mail.ru Cloud Solutions & Tarantool. Hvis du ikke vil læse, kan du se:
Hvordan vi kom fra open source til Database as a Service i skyen
Jeg har arbejdet i open source siden slutningen af 90'erne. For XNUMX år siden var det ikke så let at bruge open source, såsom databaser. Det var nødvendigt at downloade kildekoden, patche den, kompilere den og først derefter bruge den.
Open source gennemgik derefter en række forenklinger:
Tar.gz og INSTALL kilder, der skulle kompileres;
pakker med afhængigheder som .deb og .rpm, hvor du kun behøver at installere et sæt pakker;
pakkedepoter som APT og YUM, hvor installationen er automatisk;
løsninger som Docker og Snap, som giver dig mulighed for at modtage pakker ved installation uden eksterne afhængigheder.
Som et resultat bliver det lettere at bruge open source-software og sænker også barrieren for adgang til at udvikle sådanne applikationer.
På samme tid, i modsætning til situationen for 20 år siden, hvor alle var montageeksperter, kan de fleste udviklere nu ikke bygge de værktøjer, de bruger, fra kilden.
Faktisk er dette ikke dårligt, fordi:
Vi kan bruge mere kompleks, men mere brugervenlig software. For eksempel er en browser praktisk at bruge, men den indeholder mange open source-komponenter og er ubelejlig at bygge fra bunden.
Flere mennesker kan blive udviklere af open source og anden software, mere software bruges af virksomheder, og behovet for det er større.
Ulempen er, at næste skridt i forenkling er forbundet med brugen af cloud-løsninger, og det fører til en vis leverandør-lock-in, det vil sige binding til én leverandør. Vi bruger simple løsninger og udbydere bruger open source-komponenter, men faktisk er de naglet til en af de store skyer. Det vil sige, at den nemmeste og hurtigste måde at implementere open source (og software, der er kompatibel med det) er i skyerne ved hjælp af en proprietær API.
Når det kommer til databaser i skyen, er der to tilgange:
Saml databaseinfrastrukturen, som i et almindeligt datacenter. Det vil sige, tag standard byggeklodser: beregning, lagring og så videre, installer Linux og en database på dem, og konfigurer dem.
Brug Database as a Service, hvor udbyderen tilbyder en færdiglavet database inde i skyen.
DBaaS er et hurtigt voksende marked lige nu, fordi det giver udviklere mulighed for at arbejde direkte med databaser og minimerer rutinearbejde. Udbyderen forpligter sig til at sikre høj tilgængelighed og nem skalering, databaserettelse, sikkerhedskopiering og justering af ydeevne.
To typer Database as a Service baseret på open source og et alternativ i form af Kubernetes
Der er to typer Database as a Service for åbne databaser:
Et standard open source-produkt pakket i en administrations-backend for nem implementering og administration.
En avanceret kommerciel løsning med forskellige tilføjelser, kompatibel med open source.
Begge muligheder reducerer muligheden for migrering mellem skyer og reducerer portabiliteten af data og applikationer. For eksempel, på trods af at forskellige typer skyer i det væsentlige understøtter den samme standard MySQL, er der betydelige forskelle mellem dem: i drift, ydeevne, backup og så videre. Migrering fra en sky til en anden kan være udfordrende, især for komplekse applikationer.
Og her opstår spørgsmålet - er det muligt at få bekvemmeligheden ved Database as a Service, men som en simpel open source-løsning?
Den dårlige nyhed er, at der desværre ikke findes sådanne løsninger på markedet endnu. Den gode nyhed er, at der er Kubernetes, som giver dig mulighed for at implementere sådanne løsninger.
Kubernetes er et operativsystem til skyen eller datacentret, der giver dig mulighed for at implementere og administrere en applikation på tværs af flere servere i en klynge i stedet for på en enkelt vært.
Nu er Kubernetes førende inden for kategorien af sådan software. Der var mange forskellige løsninger på sådanne problemer, men det blev standarden. Mange virksomheder, der før fokuserede på alternative løsninger, fokuserer nu på at tilpasse deres produkter til at understøtte Kubernetes.
Derudover er Kubernetes en universel løsning, der understøttes i private, offentlige og hybride skyer fra mange leverandører, for eksempel: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud-løsninger.
Sådan fungerer Kubernetes med databaser
Kubernetes blev oprindeligt designet til statsløse applikationer, der behandler data, men ikke gemmer noget, såsom mikrotjenester eller webapplikationer. Databaser er i den anden ende af spektret, det vil sige, de er stateful applikationer. Og Kubernetes var ikke oprindeligt beregnet til sådanne applikationer.
Der er dog funktioner, der er dukket op i Kubernetes for nylig, som tillader brugen af databaser og andre stateful applikationer:
StatefulSet-konceptet er en hel række primitiver til behandling af hændelser om at stoppe arbejdet med pods og implementere Graceful Shutdown (forudsigelig nedlukning af applikationen).
Vedvarende volumener er datalagre, der er knyttet til pods, Kubernetes-styringsobjekter.
Operator Framework - det vil sige evnen til at skabe komponenter til styring af databaser og andre stateful applikationer fordelt på tværs af mange noder.
Allerede nu i offentlige skyer er der store Databaser as a Service, hvis backend er Kubernetes, for eksempel: CockroachCloud, InfluxDB, PlanetScale. Det vil sige, at en database på Kubernetes ikke kun er noget, der er teoretisk muligt, men også noget, der fungerer i praksis.
Percona har to open source-løsninger til Kubernetes:
Kubernetes Operator til Percona Server til MongoDB.
Kubernetes Operator for XtraDB CLUSTER er en tjeneste, der er kompatibel med MySQL og giver høj tilgængelighed og konsistens. Du kan også bruge en enkelt node, hvis høj tilgængelighed ikke er nødvendig, for eksempel til en udviklerdatabase.
Kubernetes-brugere kan opdeles i to grupper. Nogle bruger Kubernetes Operators direkte – det er hovedsageligt avancerede brugere, som har en god forståelse for, hvordan teknologien fungerer. Andre kører det på backend - sådanne brugere er interesserede i noget som Database as a Service, de ønsker ikke at dykke ned i nuancerne af Kubernetes. Til den anden gruppe af brugere har vi en anden open source-løsning - Percona DBaaS CLI Tool. Dette er en eksperimentel løsning for dem, der ønsker at få en open source DBaaS baseret på Kubernetes uden en dyb forståelse af teknologien.
Sådan kører du Perconas DBaaS på Google Kubernetes Engine
Google Kubernetes Engine er efter min mening en af de mest funktionelle implementeringer af Kubernetes-teknologi. Det er tilgængeligt i mange regioner i verden og har et enkelt og bekvemt kommandolinjeværktøj (SDK), som giver dig mulighed for at oprette scripts i stedet for manuelt at administrere platformen.
For at vores DBaaS kan fungere, har vi brug for følgende komponenter:
Kubectl.
Google Cloud SDK.
Percona DBaaS CLI.
Installer kubectl
Vi installerer pakken til dit operativsystem, vi vil se på eksemplet med Ubuntu. Flere detaljer her.
Vi installerer softwarepakken på samme måde. Flere detaljer her.
# 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
Installation af Percona DBaaS CLI
Installer fra Percona-lagrene. Percona DBaaS CLI Tool er stadig et eksperimentelt produkt, så det er placeret i det eksperimentelle repository, som skal aktiveres separat, selvom du allerede har Percona repositories installeret.
Først skal du logge ind på din Google-konto. Ydermere tillader Google Cloud én bruger at have mange uafhængige projekter, så du skal angive et arbejdsprojekt ved hjælp af koden til dette projekt:
gcloud auth login
gcloud config set project hidden-brace-236921
Dernæst opretter vi en klynge. Til demoen oprettede jeg en Kubernetes-klynge med kun tre noder - dette er det minimum, der kræves for høj tilgængelighed:
Så opretter vi et navneområde og gør det aktivt. Namespace er groft sagt også som et projekt eller miljø, men allerede inde i en Kubernetes-klynge. Det er uafhængigt af Google Cloud-projekter:
Når vi har gennemgået disse få trin, kan vi starte en tre-node klynge med denne enkle 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
Sådan opretter du forbindelse til en klynge
Som standard er det kun tilgængeligt i Kubernetes. Det vil sige, at den ikke er tilgængelig fra denne server, hvorfra du kørte kommandoen "Opret". For at gøre den tilgængelig, for eksempel til test med en klient, skal du videresende porten gennem Port Mapping:
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
Avancerede klyngestyringskommandoer
Database om offentlig IP
Hvis du ønsker en mere permanent løsning for klyngetilgængelighed, kan du få en ekstern IP-adresse. I dette tilfælde vil databasen være tilgængelig fra hvor som helst. Dette er mindre sikkert, men ofte mere bekvemt. Til ekstern IP bruger vi følgende 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
Indstil eksplicit adgangskoden
I stedet for at systemet tilfældigt genererer en adgangskode, kan du indstille adgangskoden eksplicit:
Dette er en løsning til at teste opgaver for at få MySQL op at køre så hurtigt og nemt som muligt, teste det og derefter lukke det ned eller bruge det til udvikling.
Percona DBaaS CLI-værktøjet hjælper dig med at opnå en DBaaS-lignende løsning på Kubernetes. Samtidig fortsætter vi med at arbejde på dens funktionalitet og brugervenlighed.