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:

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

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

  1. Et standard open source-produkt pakket i en administrations-backend for nem implementering og administration.
  2. 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:

  1. 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).
  2. Vedvarende volumener er datalagre, der er knyttet til pods, Kubernetes-styringsobjekter.
  3. 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:

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

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

Installer kubectl

Vi installerer pakken til dit operativsystem, vi vil se på eksemplet med Ubuntu. Flere detaljer her.

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

Installation af Google Cloud SDK

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.

mere her.

Installationsalgoritme:

  1. Opsæt Percona-depoter ved hjælp af percona-release-værktøjet. Først skal du downloade og installere den officielle percona-release-pakke fra Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Aktiver den eksperimentelle værktøjsopbevaringskomponent som følger:
    sudo percona-release enable tools experimental
    
  3. Installer percona-dbaas-cli-pakken:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Opsætning af betjening af komponenter

Mere om indstillinger her.

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:

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

Følgende kubectl-kommando giver de ønskede privilegier til vores nuværende bruger:

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

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:

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

Start af klyngen

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:

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

Så forbinder vi din MySQL-klient:

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:

# 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

Jeg viser outputtet af scripts i menneskeligt læsbart format, men JSON-formatet understøttes også.

Deaktiverer høj tilgængelighed

Med følgende kommando kan du deaktivere høj tilgængelighed for at implementere en enkelt 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

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.

Denne rapport blev første gang præsenteret kl @Databaser Meetup af Mail.ru Cloud Solutions&Tarantool. Se видео andre forestillinger og abonner på begivenhedsannonceringer på Telegram Omkring Kubernetes på Mail.ru Group.

Hvad skal man ellers læse om emnet:

  1. Databaser i en moderne IIoT-platform.
  2. Sådan vælger du en database til et projekt, så du ikke behøver at vælge igen.

Kilde: www.habr.com

Tilføj en kommentar