Wie man mit Kubernetes eine hybride Cloud erstellt, die DBaaS ersetzen kann

Mein Name ist Peter Zaitsev, ich bin der Geschäftsführer und Gründer Percona und ich möchte erzählen:

  • wie wir von Open Source-Lösungen zu Database as a Service kamen;
  • welche Ansätze es für die Bereitstellung von Datenbanken in der Cloud gibt;
  • wie Kubernetes DBaaS ersetzen kann, indem es die Abhängigkeit von Anbietern beseitigt und die Einfachheit von Datenbankdiensten als Service bewahrt.

Der Artikel basiert auf einem Vortrag beim @Databases Meetup von Mail.ru Cloud Solutions & Tarantool. Wenn Sie nicht lesen möchten, können Sie zuschauen:

Video abspielen

Wie wir von Open Source zu Database as a Service in der Cloud kamen

Ich beschäftige mich seit den späten 90er Jahren mit Open Source. Vor zwanzig Jahren war es nicht so einfach, Open Source zu nutzen, beispielsweise Datenbanken. Man musste den Quellcode herunterladen, patchen, kompilieren und erst dann verwenden.

Dann erlebte Open Source eine Reihe von Vereinfachungen:

  • Quellcodes in Tar.gz und INSTALL, die man kompilieren musste;
  • Pakete mit Abhängigkeiten wie .deb und .rpm, bei denen man nur einen Paketensatz installieren musste;
  • Paket-Repositories wie APT und YUM, mit denen die Installation automatisch erfolgt;
  • Lösungen wie Docker und Snap, die es ermöglichen, Pakete ohne externe Abhängigkeiten zu installieren.

In der Tat wird die Verwendung von Open-Source-Software einfacher, und die Einstiegshürden für die Entwicklung solcher Anwendungen sinken.

Im Gegensatz zur Situation vor 20 Jahren, als jeder Experte im Zusammenbauen war, können die meisten Entwickler heute keine verwendeten Werkzeuge aus dem Quellcode erstellen.

Das ist tatsächlich nicht schlecht, denn:

  1. Wir können komplexere, aber benutzerfreundlichere Software nutzen. Ein Beispiel ist der Browser – er ist einfach zu bedienen, enthält jedoch viele Open-Source-Komponenten und es ist unpraktisch, ihn von Grund auf neu zu erstellen.
  2. Mehr Menschen können Entwickler von Open-Source-Software und anderer Software werden, mehr Software wird von Unternehmen verwendet, und die Nachfrage danach steigt.

Die Rückseite — der nächste Schritt zur Vereinfachung hängt mit der Nutzung von Cloud-Lösungen zusammen, was zu einem gewissen Vendor Lock-in führt, also einer Bindung an einen Anbieter. Wir setzen auf einfache Lösungen, und die Anbieter verwenden Open-Source-Komponenten, sind aber faktisch an eine der großen Cloud-Plattformen gebunden. Das bedeutet, dass der einfachste und schnellste Weg, Open Source (und kompatible Software) bereitzustellen, in der Cloud besteht, wobei proprietäre APIs verwendet werden.

Wenn es um Datenbanken in der Cloud geht, gibt es zwei Ansätze:

  1. Die Infrastruktur einer Datenbank wie in einem herkömmlichen Rechenzentrum aufzubauen. Das heißt, man nimmt die standardmäßigen Bausteine: Compute, Storage und so weiter, installiert darauf Linux, eine Datenbank und konfiguriert sie.
  2. Database as a Service (DBaaS) zu nutzen, bei dem der Anbieter bereits eine fertige Datenbank in der Cloud bereitstellt.

Derzeit ist DBaaS ein schnell wachsender Markt, da ein solcher Service Entwicklern ermöglicht, direkt mit Datenbanken zu arbeiten und die Routineaufgaben zu minimieren. Der Anbieter übernimmt die Gewährleistung von hoher Verfügbarkeit (High Availability) und einfacher Skalierbarkeit, das Patchen der Datenbank, Backups und die Leistungsoptimierung.

Zwei Arten von Database as a Service basierend auf Open Source und eine Alternative in Form von Kubernetes

Es gibt zwei Arten von Database as a Service für offene Datenbanken:

  1. Ein Standard-Open-Source-Produkt, das in ein Backend zur Verwaltung integriert ist, was die Bereitstellung und Verwaltung vereinfacht.
  2. Eine fortschrittliche kommerzielle Lösung mit verschiedenen Ergänzungen, kompatibel mit Open Source.

Beide Optionen verringern die Möglichkeit der Migration zwischen den Clouds und reduzieren die Portabilität von Daten und Anwendungen. Beispielsweise gibt es trotz der grundlegenden Unterstützung des gleichen Standard-MySQL in verschiedenen Cloud-Umgebungen wesentliche Unterschiede in Bezug auf Funktionalität, Leistung, Backup und so weiter. Die Migration von einer Cloud zur anderen kann besonders bei komplexen Anwendungen schwierig sein.

Hier stellt sich die Frage – kann man die Vorteile von Database as a Service auch als einfache Open-Source-Lösung erhalten?

Die schlechte Nachricht ist, dass es leider derzeit keine solchen Lösungen auf dem Markt gibt. Die gute Nachricht ist, dass es Kubernetes gibt, das die Umsetzung solcher Lösungen ermöglicht.

Kubernetes ist ein Betriebssystem für Cloud- oder Rechenzentrumsanwendungen, das die Bereitstellung und Verwaltung von Anwendungen auf vielen Servern eines Clusters anstelle eines einzelnen Hosts ermöglicht.

Heute ist Kubernetes der Marktführer in dieser Softwarekategorie. Es gab viele verschiedene Lösungen für solche Aufgaben, aber Kubernetes hat sich als Standard etabliert. Viele Unternehmen, die zuvor alternative Lösungen verfolgten, konzentrieren sich jetzt darauf, ihre Produkte für die Unterstützung von Kubernetes anzupassen.

Darüber hinaus ist Kubernetes eine universelle Lösung, die in privaten, öffentlichen und hybriden Clouds vieler Anbieter unterstützt wird, darunter: AWS, Google Cloud, Microsoft Azure. Mail.ru Cloud Lösungen.

Wie Kubernetes mit Datenbanken arbeitet

Kubernetes wurde ursprünglich für zustandslose Anwendungen entwickelt, die Daten verarbeiten, aber nichts speichern, z. B. Microservices oder Webanwendungen. Datenbanken befinden sich am anderen Ende des Spektrums und sind zustandsbehaftete Anwendungen. Für solche Anwendungen war Kubernetes ursprünglich nicht konzipiert.

Es gibt jedoch Funktionen, die kürzlich in Kubernetes eingeführt wurden und die Nutzung von Datenbanken und anderen zustandsbehafteten Anwendungen ermöglichen:

  1. Das Konzept des StatefulSet ist eine Reihe von Primitiven zur Handhabung von Ereignissen beim Stoppen von Pods und zur Durchführung eines Graceful Shutdown (vorhersehbares Beenden der Anwendung).
  2. Persistent Volumes sind Speicherorte für Daten, die mit Pods und Kubernetes-Verwaltungsobjekten verbunden sind.
  3. Operator Framework bedeutet die Möglichkeit, Komponenten zur Verwaltung von Datenbanken und anderen zustandsbehafteten Anwendungen zu erstellen, die auf mehreren Knoten verteilt sind.

Bereits jetzt gibt es in öffentlichen Clouds große Database as a Service-Lösungen, die Kubernetes im Backend nutzen, wie beispielsweise: CockroachCloud, InfluxDB, PlanetScale. Das bedeutet, dass Datenbanken auf Kubernetes nicht nur theoretisch möglich sind, sondern auch tatsächlich funktionieren.

Percona bietet zwei Open-Source-Lösungen für Kubernetes an:

  1. Kubernetes Operator für Percona Server für MongoDB.
  2. Kubernetes Operator für XtraDB CLUSTER – ein Dienst, der mit MySQL kompatibel ist und hohe Verfügbarkeit und Konsistenz bietet. Es kann auch ein Single-Node verwendet werden, wenn keine hohe Verfügbarkeit benötigt wird, zum Beispiel für eine Entwicklungsdatenbank.

Kubernetes-Anwender lassen sich in zwei Gruppen unterteilen. Die eine Gruppe nutzt Kubernetes-Operatoren direkt – hauptsächlich erfahrene Nutzer, die ein fundiertes Verständnis für die Technologie haben. Die andere Gruppe startet es im Hintergrund – diese Nutzer interessieren sich eher für Angebote wie Database as a Service und möchten sich nicht mit den Feinheiten von Kubernetes auseinandersetzen. Für die zweite Gruppe haben wir eine weitere Open-Source-Lösung: das Percona DBaaS CLI Tool. Diese experimentelle Lösung ist für diejenigen gedacht, die eine Open-Source-DBaaS auf Basis von Kubernetes nutzen möchten, ohne sich tief in die Technologie einarbeiten zu müssen.

Wie man Percona DBaaS auf Google Kubernetes Engine startet

Google Kubernetes Engine ist meiner Meinung nach eine der funktionsreichsten Implementierungen der Kubernetes-Technologie. Es ist in vielen Regionen der Welt verfügbar und bietet ein einfaches, benutzerfreundliches Command Line Tool (SDK), mit dem Skripte erstellt werden können, anstatt die Plattform manuell zu verwalten.

Um unser DBaaS zum Laufen zu bringen, benötigen wir die folgenden Komponenten:

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

Installieren von kubectl

Installieren Sie das Paket für Ihr Betriebssystem, wir werden es am Beispiel von Ubuntu erläutern. Mehr dazu hier.

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

Installieren Sie das Google Cloud SDK

Installieren Sie das Softwarepaket auf die gleiche Weise. Weitere Informationen hier.

# 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

Installieren Sie das Percona DBaaS CLI

Installieren Sie es aus den Percona-Repositories. Das Percona DBaaS CLI-Tool ist derzeit ein experimentelles Produkt und befindet sich daher in einem experimentellen Repository, das separat aktiviert werden muss, auch wenn Sie bereits Percona-Repositories installiert haben.

Mehr erfahren hier.

Installationsalgorithmus:

  1. Konfigurieren Sie die Percona-Repositories mit dem Tool percona-release. Zunächst müssen Sie das offizielle Paket percona-release von Percona herunterladen und installieren:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Aktivieren Sie den experimentellen Komponenten des Tool-Repositories wie folgt:
    sudo percona-release enable tools experimental
    
  3. Installieren Sie das Paket percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Konfigurieren Sie die Funktionsweise der Komponenten

Weitere Informationen zu den Einstellungen hier.

Zuerst müssen Sie sich in Ihr Google-Konto einloggen. Google Cloud ermöglicht es einem Benutzer, viele unabhängige Projekte zu haben, daher ist es erforderlich, das Arbeitsprojekt anzugeben, indem der Code dieses Projekts verwendet wird:

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

Als nächstes erstellen wir ein Cluster. Für die Demo habe ich ein Kubernetes-Cluster mit nur drei Knoten erstellt – das ist das Minimum, das für hohe Verfügbarkeit erforderlich ist:

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

Der nächste kubectl-Befehl gibt unserem aktuellen Benutzer die erforderlichen Berechtigungen:

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

Dann erstellen wir einen Namespace und aktivieren ihn. Ein Namespace ist im Grunde genommen wie ein Projekt oder eine Umgebung, aber innerhalb des Kubernetes-Clusters. Er ist unabhängig von Google Cloud-Projekten:

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

Starten des Clusters

Nachdem wir diese Schritte durchlaufen haben, können wir das Cluster mit folgendem einfachen Befehl aus drei Knoten starten:

# 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

Wie man sich mit dem Cluster verbindet

Standardmäßig ist er nur innerhalb von Kubernetes verfügbar. Das bedeutet, dass er von dem Server, auf dem Sie den Befehl „Erstellen“ ausgeführt haben, nicht zugänglich ist. Um ihn beispielsweise für Tests mit einem Client verfügbar zu machen, müssen Sie den Port über Port Mapping weiterleiten:

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

Dann verbinden wir Ihren MySQL-Client:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Erweiterte Clusterverwaltungsbefehle

Datenbank mit öffentlicher IP

Wenn Sie eine dauerhaftere Lösung zur Verfügbarkeit des Clusters wünschen, können Sie eine externe IP-Adresse erhalten. In diesem Fall ist die Datenbank von überall zugänglich. Dies ist weniger sicher, aber oft bequemer. Verwenden Sie den folgenden Befehl für die externe IP:

# 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

Passwort explizit festlegen

Statt dass das System ein Passwort zufällig generiert, können Sie das Passwort auch explizit festlegen:

# 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

Ich zeige die Ausgaben der Skripte in einem leserfreundlichen Format, aber auch das JSON-Format wird unterstützt.

Hochverfügbarkeit deaktivieren

Mit dem folgenden Befehl können Sie die Hochverfügbarkeit deaktivieren, um einen Single Node bereitzustellen:

# 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

Dies ist eine Lösung für Testaufgaben, um MySQL schnell und einfach bereitzustellen, zu testen und dann entweder einzustellen oder für die Entwicklung zu nutzen.

Das Percona DBaaS CLI-Tool ermöglicht eine Kubernetes-basierte Lösung, die DBaaS ähnelt. Wir arbeiten weiterhin an den Funktionen und der Benutzerfreundlichkeit.

Dieser Vortrag wurde erstmals gehalten auf @Databases Meetup by Mail.ru Cloud Solutions&Tarantool. Sehen Sie sich das Video anderer Vorträge an und abonnieren Sie die Veranstaltungshinweise auf Telegram. Rund um Kubernetes in der Mail.ru Group.

Weitere lesenswerte Artikel zu diesem Thema:

  1. Datenbanken in modernen IIoT-Plattformen.
  2. Wie man eine Datenbank für ein Projekt auswählt, um nicht erneut wählen zu müssen.

Quelle: habr.com

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster