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 gik fra open source-løsninger til Database as a Service;
  • Hvad er tilgangene til at implementere databaser i skyen?
  • Hvordan Kubernetes kan erstatte DBaaS ved at eliminere leverandørafhængighed og samtidig bevare enkelheden af ​​DBMS som en tjeneste.

Artiklen er baseret på rapporten på @Databases Meetup af Mail.ru Cloud Solutions & Tarantool. Hvis du ikke vil læse, kan du se:

Afspil video

Hvordan Open Source kom til databasen som en tjeneste i skyen

Jeg har været involveret 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.

Derefter gennemgik open source en række forenklinger:

  • Tar.gz og INSTALL kilder, der skulle kompileres;
  • pakker med afhængigheder såsom .deb og .rpm, hvor du kun skal installere et sæt pakker;
  • pakkelager som APT og YUM, der tillader installationen at ske 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 barrieren for adgang til at udvikle sådanne applikationer sænkes.

Men i modsætning til situationen for 20 år siden, hvor alle var montageeksperter, kan de fleste udviklere nu ikke samle de værktøjer, de bruger, fra kilden.

Faktisk er dette ikke dårligt, fordi:

  1. Vi kan bruge mere kompleks, men mere bekvem 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 open source og andre softwareudviklere, mere software bruges af virksomheder, og der er større efterspørgsel efter det.

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 de er i det væsentlige naglet til en af ​​de store skyer. Det vil sige, at den nemmeste og hurtigste måde at implementere open source (og kompatibel software) 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 standardbyggestenene: beregning, lagring osv., og installer dem Linux, database, konfigurer.
  2. Brug Database as a Service, hvor udbyderen tilbyder en færdiglavet database inde i skyen.

DBaaS er i øjeblikket et hurtigt voksende marked, fordi det giver udviklere mulighed for at arbejde med databaser direkte og minimerer rutinearbejde. Udbyderen tager sig af 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 med en administrationsbackend, der gør det nemt at implementere og administrere.
  2. En avanceret kommerciel løsning med forskellige tilføjelser, kompatibel med open source.

Begge muligheder reducerer muligheden for at migrere 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, sikkerhedskopier 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 cloud- eller datacenteroperativsystem, der gør det muligt at implementere og administrere en applikation på tværs af flere servere i en klynge i stedet for en enkelt vært.

Kubernetes er i øjeblikket førende inden for denne type software. Der var mange forskellige løsninger på sådanne problemer, men det blev standarden. Mange virksomheder, der tidligere var fokuseret på alternative løsninger, fokuserer nu på at tilpasse deres produkter til at understøtte Kubernetes.

Derudover er Kubernetes en alsidig løsning, der understøttes i private, offentlige og hybride skyer fra mange leverandører, såsom 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, hvilket betyder, at de er stateful applikationer. Og Kubernetes var ikke oprindeligt designet 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 række primitiver til håndtering af pod-nedlukningshændelser og udførelse af Graceful Shutdown (forudsigelig programnedlukning).
  2. Vedvarende volumener er datalagre, der er forbundet med pods, de objekter, som Kubernetes administrerer.
  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.

Der er allerede store Database as a Service i offentlige skyer med Kubernetes i backend, 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 MySQL-kompatibel tjeneste, der 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 mennesker bruger Kubernetes Operators direkte - det er for det meste avancerede brugere, der har en god forståelse for, hvordan teknologien fungerer. Andre kører det på backend - disse brugere er interesserede i noget som Database as a Service, de ønsker ikke at dykke ned i nuancerne af, hvordan Kubernetes fungerer. 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 simpelt og brugervenligt kommandolinjeværktøj (SDK), der giver dig mulighed for at oprette scripts i stedet for manuelt at administrere platformen.

For at vores DBaaS kan fungere, er følgende komponenter nødvendige:

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

Installer kubectl

Vi installerer pakken til dit operativsystem. Vi vil se på et eksempel. 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. Læs mere 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 repositories. Percona DBaaS CLI Tool er et eksperimentelt produkt og er derfor placeret i det eksperimentelle repository, som skal aktiveres separat, selvom du allerede har Percona repositories installeret.

mere her.

Installationsalgoritme:

  1. Konfigurer Percona-repositories 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 komponent i værktøjslagret 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. Dernæst tillader Google Cloud én bruger at have mange uafhængige projekter, så du skal angive arbejdsprojektet ved hjælp af koden for det pågældende 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, hvilket 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 nødvendige 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 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

Lancering 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 den kun tilgængelig i Kubernetes. Det vil sige, at den ikke er tilgængelig fra den server, hvorfra du kørte kommandoen "Create". For at gøre den tilgængelig, for eksempel til test med en klient, skal du videresende porten via 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. Det 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

Vi angiver adgangskoden eksplicit

I stedet for at lade systemet generere en adgangskode tilfældigt, 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å.

Slå høj tilgængelighed fra

Følgende kommando kan bruges til at 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 testopgaver, til hurtigt og nemt at opsætte MySQL, teste det og derefter rulle det op eller bruge det til udvikling.

Percona DBaaS CLI-værktøjet hjælper dig med at få 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

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster