Sådan bygger du et hybrid-sky med Kubernetes, der kan erstatte DBaaS

Mit navn er Peter Zaitsev, jeg er administrerende direktør og stifter Percona og jeg vil gerne fortælle:

  • hvordan vi kom fra open source-løsninger til Database as a Service;
  • hvilke tilgange der findes til udrulning af databaser i skyen;
  • hvordan Kubernetes kan erstatte DBaaS ved at fjerne afhængigheden fra leverandøren og samtidig bevare enkelheden ved DBMS som en service.

Artiklen er udarbejdet på baggrund af en præsentation på @Databases Meetup af Mail.ru Cloud Solutions & Tarantool. Hvis du ikke ønsker at læse, kan du se:

Afspil video

Hvordan vi gik fra open source til Database as a Service i skyen

Jeg har beskæftiget mig med open source siden slutningen af 90'erne. For tyve år siden var det ikke så let at bruge open source, f.eks. databaser. Man skulle downloade koden, patching, kompilere og først derefter bruge den.

Derefter gennemgik open source en række forenklinger:

  • kildefiler Tar.gz og INSTALL, som skulle kompliceres;
  • pakker med afhængigheder som .deb og .rpm, hvor man kun skal installere et sæt pakker;
  • pakkerespositoryer som APT og YUM, der muliggør automatisk installation;
  • løsninger som Docker og Snap, der tillader installation af pakker uden eksterne afhængigheder.

Som følge heraf bliver det lettere at bruge open source software, og barriererne for at deltage i udviklingen af sådanne applikationer sænkes.

I modsætning til situationen for 20 år siden, hvor alle var eksperter i kompilering, kan de fleste udviklere nu ikke kompilere de værktøjer, de bruger.

Faktisk er det ikke dårligt, for:

  1. Vi kan bruge mere komplekse, men mere brugervenlige software. For eksempel er en browser nem at bruge, men den indeholder mange open source-komponenter, og det er besværligt at kompilere den fra bunden.
  2. Flere mennesker kan blive udviklere af open source og anden software, flere virksomheder bruger software, og efterspørgslen er højere.

Den anden side er, at det næste skridt i forenklingen relaterer til brugen af cloud-løsninger, hvilket fører til en vis vendor lock-in, dvs. binding til en enkelt leverandør. Vi bruger enkle løsninger, og udbyderne bruger open source-komponenter, men de er faktisk knyttet til et af de store cloud-systemer. Det vil sige, at den enkleste og hurtigste måde at rulle open source (og kompatibel software) ud på er i skyen ved at bruge proprietære API’er.

Når vi taler om databaser i skyen, er der to tilgange:

  1. Opbyg en databaseinfrastruktur som i et almindeligt datacenter. Det vil sige at tage standardkomponenter: compute, storage osv., installere Linux på dem, opsætte databasen.
  2. Brug Database as a Service, hvor udbyderen tilbyder en færdig database i skyen.

DBaaS er i dag et hastigt voksende marked, fordi denne service giver udviklere mulighed for at arbejde direkte med databaser og minimerer det rutineprægede arbejde. Udbyderen tager sig af at sikre høj tilgængelighed og let skalering, samt patching af databasen, backup og performance tuning.

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 til åbne databaser:

  1. Standard open source-produkt, pakket som backend til administration, hvilket forenkler implementering og styring.
  2. Avanceret kommerciel løsning med forskellige tilføjelser, kompatibel med open source.

Begge varianter reducerer muligheden for migration mellem skyer, mindsker portabiliteten af data og applikationer. For eksempel, selvom forskellige typer skyer i princippet understøtter den samme standard MySQL, er der betydelige forskelle mellem dem: i drift, ydeevne, backup osv. Det kan være vanskeligt at migrere fra én sky til en anden, især for komplekse applikationer.

Og her opstår spørgsmålet — kan man opnå bekvemmeligheden ved Database as a Service, men som en simpel open source-løsning?

Den dårlige nyhed er, at der desværre pt. ikke findes sådanne løsninger på markedet. Den gode nyhed er, at der er Kubernetes, som gør det muligt at implementere sådanne løsninger.

Kubernetes er et operativsystem til skyen eller datacentret, som gør det muligt at deployere en applikation og styre den på mange servere i et cluster, snarere end på en enkelt host.

I dag er Kubernetes førende i kategorien af sådanne software. Der har været mange forskellige løsninger til sådanne opgaver, men det er netop blevet standarden. Mange virksomheder, der tidligere arbejdede med alternative løsninger, fokuserer nu på at tilpasse deres produkter til at støtte Kubernetes.

Derudover er Kubernetes en universel løsning, der understøttes i private, offentlige og hybride skyer fra mange udbydere, såsom: AWS, Google Cloud, Microsoft Azure. Mail.ru Cloud Solutions.

Hvordan fungerer Kubernetes med databaser

Kubernetes blev oprindeligt udviklet til stateless-applikationer, der behandler data, men ikke gemmer noget, såsom mikrotjenester eller webapplikationer. Databaser befinder sig i den modsatte ende af spektret, altså er det stateful-applikationer. Og Kubernetes var oprindeligt ikke designet til sådanne applikationer.

Der er dog funktioner, der for nylig er blevet introduceret i Kubernetes, som gør det muligt at bruge databaser og andre stateful-applikationer:

  1. Konceptet StatefulSet er en serie primitivere til håndtering af hændelser ved nedlukning af pods og gennemførelse af Graceful Shutdown (forudsigelig nedlukning af applikationen).
  2. Persistent Volumes er datalagringssteder, der er tilknyttet pods, Kubernetes-kontrolobjekter.
  3. Operator Framework giver mulighed for at skabe komponenter til at styre databaser og andre stateful-applikationer, der distribueres på mange noder.

Der findes allerede store Database as a Service-løsninger i offentlige skyer, hvor Kubernetes fungerer som backend, eksempelvis: CockroachCloud, InfluxDB, PlanetScale. Det vil sige, at databaser på Kubernetes ikke kun er teoretisk mulige, men også praktisk anvendelige.

Percona har to open source-løsninger til Kubernetes:

  1. Kubernetes Operator til Percona Server for MongoDB.
  2. Kubernetes Operator til XtraDB CLUSTER — en service, der er kompatibel med MySQL, og som sikrer høj tilgængelighed og konsistens. Det er også muligt at bruge en enkelt node, hvis høj tilgængelighed ikke er nødvendig, eksempelvis til en udviklingsdatabase.

Brugere af Kubernetes kan opdeles i to grupper. Nogle anvender Kubernetes Operators direkte — dette er for det meste avancerede brugere, der har en god forståelse af, hvordan teknologien fungerer. Andre kører det på backend — disse brugere er interesserede i noget som Database as a Service og ønsker ikke at dykke ned i detaljerne omkring Kubernetes. For den anden gruppe brugere har vi endnu en open source-løsning — Percona DBaaS CLI Tool. Dette er en eksperimentel løsning for dem, der ønsker at få open source DBaaS baseret på Kubernetes uden et dybtgående kendskab til teknologien.

Hvordan man lancerer DBaaS fra Percona på Google Kubernetes Engine

Google Kubernetes Engine er efter min mening en af de mest funktionelle implementeringer af Kubernetes-teknologien. Den er tilgængelig i mange regioner verden over og har et enkelt og brugervenligt kommandolinjeværktøj (SDK), der muliggør oprettelse af scripts i stedet for at styre platformen manuelt.

For at vores DBaaS kan fungere, skal følgende komponenter være tilstede:

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

Installer kubectl

Installer pakken til dit operativsystem, vi viser et eksempel på Ubuntu. Læs mere 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

Installer Google Cloud SDK

Installer også softwarepakken. 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

Installer Percona DBaaS CLI

Installer fra Percona-repositories. Percona DBaaS CLI Tool er et eksperimentelt produkt, så det findes i et eksperimentelt repository, som skal aktiveres separat, selvom du allerede har installeret Percona-repositories.

Mere information her.

Installationsalgoritme:

  1. Konfigurer Percona-repositories med percona-release værktøjet. Først skal du downloade og installere det officielle percona-release paket 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øjsrepositoryet 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

Konfigurer komponenters funktionalitet

Læs mere om indstillingerne her.

Først skal du logge ind på din Google-konto. Google Cloud tillader, at én bruger har mange uafhængige projekter, så du skal angive det aktive projekt ved at bruge projektets kode:

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

Dernæst opretter vi en klynge. Til demonstration har jeg oprettet en Kubernetes-klynge med kun tre noder — dette er minimumskravet for høj tilgængelighed:

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

Den næste kubectl-kommando giver de nødvendige rettigheder til vores nuværende bruger:

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

Dernæst opretter vi et namespace og gør det aktivt. Namespace er groft sagt ligesom et projekt eller miljø, men inden for Kubernetes-klyngen. Det er uafhængigt af Google Cloud-projekter:

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

Starter klyngen

Efter at have gennemgået disse få trin kan vi starte klyngen af tre noder 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

Hvordan man opretter forbindelse til klyngen

Som standard er det kun tilgængeligt indenfor Kubernetes. Det vil sige, at det ikke er tilgængeligt fra serveren, hvor du kørte kommanden 'Opret'. For at det skal være tilgængeligt, for eksempel til test med kunden, skal du videreføre porten gennem Port Mapping:

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

Derefter tilslutter du din MySQL-klient:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Avancerede clusterstyringskommandoer

Database på offentlig IP

Hvis du ønsker en mere permanent løsning for tilgængeligheden af clusteret, 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 praktisk. For 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

Definerer adgangskoden eksplicit

I stedet for at systemet genererer adgangskoden tilfældigt, kan du definere 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 output fra scripts i læseligt format, men JSON-format understøttes også.

Deaktiverer høj tilgængelighed

Med følgende kommando kan du deaktivere høj tilgængelighed for at deployere 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, for hurtigt og nemt at opsætte MySQL, teste og derefter lukke eller bruge til udvikling.

Percona DBaaS CLI-værktøjet hjælper med at få en løsning på Kubernetes, der ligner DBaaS. Vi fortsætter dog med at arbejde på dets funktionalitet og brugervenlighed.

Denne præsentation blev første gang præsenteret ved @Databases Meetup by Mail.ru Cloud Solutions&Tarantool. Se en video andre præsentationer og tilmeld dig nyhedsbreve om arrangementer på Telegram Omkring Kubernetes i Mail.ru Group.

Hvad andet at læse om emnet:

  1. Databaser i moderne IIoT-platform.
  2. Hvordan man vælger en database til et projekt, så man ikke skal vælge igen.

Kilde: habr.com

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