Πώς να δημιουργήσετε ένα υβριδικό σύννεφο χρησιμοποιώντας Kubernetes που μπορεί να αντικαταστήσει το DBaaS

Ονομάζομαι Petr Zaitsev, είμαι ο Διευθύνων Σύμβουλος, ο ιδρυτής Περόνα και θέλω να σου πω:

  • πώς ήρθαμε από λύσεις ανοιχτού κώδικα στη βάση δεδομένων ως υπηρεσία.
  • ποιες προσεγγίσεις υπάρχουν για την ανάπτυξη βάσεων δεδομένων στο cloud;
  • πώς το Kubernetes μπορεί να αντικαταστήσει το DBaaS, εξαλείφοντας την εξάρτηση από τον προμηθευτή και διατηρώντας την απλότητα του DBMS ως υπηρεσίας.

Το άρθρο ετοιμάστηκε με βάση μια αναφορά στο @Databases Meetup από τη Mail.ru Cloud Solutions & Tarantool. Αν δεν θέλετε να διαβάσετε, μπορείτε να παρακολουθήσετε:


Πώς φτάσαμε από το ανοιχτό κώδικα στη βάση δεδομένων ως υπηρεσία στο cloud

Δουλεύω σε ανοιχτό κώδικα από τα τέλη της δεκαετίας του '90. Πριν από είκοσι χρόνια, η χρήση ανοιχτού κώδικα, όπως οι βάσεις δεδομένων, δεν ήταν τόσο εύκολη. Ήταν απαραίτητο να κατεβάσετε τον πηγαίο κώδικα, να τον επιδιορθώσετε, να τον μεταγλωττίσετε και μόνο μετά να τον χρησιμοποιήσετε.

Στη συνέχεια, ο ανοιχτός κώδικας πέρασε από μια σειρά απλοποιήσεων:

  • Tar.gz και INSTALL πηγές που έπρεπε να μεταγλωττιστούν.
  • πακέτα με εξαρτήσεις όπως .deb και .rpm, όπου χρειάζεται μόνο να εγκαταστήσετε ένα σύνολο πακέτων.
  • αποθετήρια πακέτων όπως το APT και το YUM, με τα οποία η εγκατάσταση είναι αυτόματη.
  • λύσεις όπως το Docker και το Snap, που σας επιτρέπουν να λαμβάνετε πακέτα με εγκατάσταση χωρίς εξωτερικές εξαρτήσεις.

Ως αποτέλεσμα, γίνεται ευκολότερη η χρήση λογισμικού ανοιχτού κώδικα και επίσης μειώνεται το εμπόδιο εισόδου στην ανάπτυξη τέτοιων εφαρμογών.

Ταυτόχρονα, σε αντίθεση με την κατάσταση πριν από 20 χρόνια, όταν όλοι ήταν ειδικοί στη συναρμολόγηση, τώρα οι περισσότεροι προγραμματιστές δεν μπορούν να δημιουργήσουν τα εργαλεία που χρησιμοποιούν από την πηγή.

Στην πραγματικότητα, αυτό δεν είναι κακό, γιατί:

  1. Μπορούμε να χρησιμοποιήσουμε πιο σύνθετο αλλά πιο φιλικό προς τον χρήστη λογισμικό. Για παράδειγμα, ένα πρόγραμμα περιήγησης είναι βολικό στη χρήση, αλλά περιλαμβάνει πολλά στοιχεία ανοιχτού κώδικα και δεν είναι βολικό να δημιουργηθεί από την αρχή.
  2. Περισσότεροι άνθρωποι μπορούν να γίνουν προγραμματιστές ανοιχτού κώδικα και άλλου λογισμικού, περισσότερο λογισμικό χρησιμοποιείται από τις επιχειρήσεις και η ανάγκη για αυτό είναι μεγαλύτερη.

Το μειονέκτημα είναι ότι το επόμενο βήμα στην απλούστευση σχετίζεται με τη χρήση λύσεων cloud, και αυτό οδηγεί σε ένα συγκεκριμένο προμηθευτή κλειδώματος, δηλαδή δέσμευση με έναν προμηθευτή. Χρησιμοποιούμε απλές λύσεις και οι πάροχοι χρησιμοποιούν στοιχεία ανοιχτού κώδικα, αλλά στην πραγματικότητα είναι καρφωμένα σε ένα από τα μεγάλα σύννεφα. Δηλαδή, ο ευκολότερος και ταχύτερος τρόπος για την ανάπτυξη ανοιχτού κώδικα (και συμβατό με αυτό λογισμικό) είναι στα σύννεφα, χρησιμοποιώντας ένα ιδιόκτητο API.

Όταν πρόκειται για βάσεις δεδομένων στο cloud, υπάρχουν δύο προσεγγίσεις:

  1. Συναρμολογήστε την υποδομή της βάσης δεδομένων, όπως σε ένα κανονικό κέντρο δεδομένων. Δηλαδή, πάρτε τυπικά δομικά στοιχεία: υπολογισμό, αποθήκευση και ούτω καθεξής, εγκαταστήστε το Linux και μια βάση δεδομένων σε αυτά και διαμορφώστε τα.
  2. Χρησιμοποιήστε τη βάση δεδομένων ως υπηρεσία, όπου ο πάροχος προσφέρει μια έτοιμη βάση δεδομένων μέσα στο cloud.

Το DBaaS είναι μια ταχέως αναπτυσσόμενη αγορά αυτή τη στιγμή, επειδή επιτρέπει στους προγραμματιστές να εργάζονται απευθείας με βάσεις δεδομένων και ελαχιστοποιεί τις εργασίες ρουτίνας. Ο πάροχος αναλαμβάνει να εξασφαλίσει Υψηλή Διαθεσιμότητα και εύκολη κλιμάκωση, επιδιόρθωση βάσεων δεδομένων, δημιουργία αντιγράφων ασφαλείας και ρύθμιση απόδοσης.

Δύο τύποι βάσης δεδομένων ως υπηρεσία που βασίζεται σε ανοιχτό κώδικα και μια εναλλακτική με τη μορφή Kubernetes

Υπάρχουν δύο τύποι βάσης δεδομένων ως υπηρεσία για ανοιχτές βάσεις δεδομένων:

  1. Ένα τυπικό προϊόν ανοιχτού κώδικα συσκευασμένο σε υποστήριξη διαχείρισης για εύκολη ανάπτυξη και διαχείριση.
  2. Μια προηγμένη εμπορική λύση με διάφορα πρόσθετα, συμβατή με ανοιχτό κώδικα.

Και οι δύο επιλογές μειώνουν την πιθανότητα μετανάστευσης μεταξύ cloud και μειώνουν τη φορητότητα δεδομένων και εφαρμογών. Για παράδειγμα, παρά το γεγονός ότι διαφορετικοί τύποι cloud υποστηρίζουν ουσιαστικά το ίδιο πρότυπο MySQL, υπάρχουν σημαντικές διαφορές μεταξύ τους: στη λειτουργία, την απόδοση, τη δημιουργία αντιγράφων ασφαλείας και ούτω καθεξής. Η μετάβαση από το ένα σύννεφο στο άλλο μπορεί να είναι προκλητική, ειδικά για πολύπλοκες εφαρμογές.

Και εδώ τίθεται το ερώτημα - είναι δυνατόν να αποκτήσετε την ευκολία της Βάσης Δεδομένων ως Υπηρεσία, αλλά ως απλή λύση ανοιχτού κώδικα;

Τα κακά νέα είναι ότι, δυστυχώς, δεν υπάρχουν ακόμα τέτοιες λύσεις στην αγορά. Τα καλά νέα είναι ότι υπάρχει το Kubernetes, το οποίο σας επιτρέπει να εφαρμόσετε τέτοιες λύσεις.

Το Kubernetes είναι ένα λειτουργικό σύστημα για το cloud ή το κέντρο δεδομένων που σας επιτρέπει να αναπτύξετε και να διαχειριστείτε μια εφαρμογή σε πολλούς διακομιστές σε ένα σύμπλεγμα και όχι σε έναν μόνο κεντρικό υπολογιστή.

Τώρα η Kubernetes είναι ο ηγέτης στην κατηγορία τέτοιου λογισμικού. Υπήρχαν πολλές διαφορετικές λύσεις για τέτοια προβλήματα, αλλά έγινε το πρότυπο. Πολλές εταιρείες που συνήθιζαν να επικεντρώνονται σε εναλλακτικές λύσεις τώρα εστιάζουν στην προσαρμογή των προϊόντων τους για να υποστηρίζουν την Kubernetes.

Επιπλέον, το Kubernetes είναι μια καθολική λύση που υποστηρίζεται σε ιδιωτικά, δημόσια και υβριδικά σύννεφα πολλών προμηθευτών, για παράδειγμα: AWS, Google Cloud, Microsoft Azure, Mail.ru Cloud Solutions.

Πώς λειτουργεί το Kubernetes με βάσεις δεδομένων

Το Kubernetes σχεδιάστηκε αρχικά για εφαρμογές χωρίς ιθαγένεια που επεξεργάζονται δεδομένα αλλά δεν αποθηκεύουν τίποτα, όπως μικροϋπηρεσίες ή εφαρμογές Ιστού. Οι βάσεις δεδομένων βρίσκονται στο άλλο άκρο του φάσματος, δηλαδή είναι κρατικές εφαρμογές. Και το Kubernetes δεν προοριζόταν αρχικά για τέτοιες εφαρμογές.

Ωστόσο, υπάρχουν χαρακτηριστικά που εμφανίστηκαν πρόσφατα στο Kubernetes που επιτρέπουν τη χρήση βάσεων δεδομένων και άλλων κρατικών εφαρμογών:

  1. Η έννοια StatefulSet είναι μια ολόκληρη σειρά από πρωτόγονα για την επεξεργασία συμβάντων σχετικά με τη διακοπή της εργασίας των pod και την εφαρμογή Graceful Shutdown (προβλέψιμος τερματισμός λειτουργίας της εφαρμογής).
  2. Οι μόνιμοι τόμοι είναι χώροι αποθήκευσης δεδομένων που σχετίζονται με pods, αντικείμενα διαχείρισης Kubernetes.
  3. Πλαίσιο χειριστή - δηλαδή, η δυνατότητα δημιουργίας στοιχείων για τη διαχείριση βάσεων δεδομένων και άλλων καταστάσεων εφαρμογών κατανεμημένων σε πολλούς κόμβους.

Ήδη τώρα στα δημόσια σύννεφα υπάρχουν μεγάλες Βάσεις Δεδομένων ως Υπηρεσία, το backend των οποίων είναι το Kubernetes, για παράδειγμα: CockroachCloud, InfluxDB, PlanetScale. Δηλαδή, μια βάση δεδομένων στο Kubernetes δεν είναι μόνο κάτι που είναι θεωρητικά δυνατό, αλλά και κάτι που λειτουργεί στην πράξη.

Η Percona έχει δύο λύσεις ανοιχτού κώδικα για το Kubernetes:

  1. Kubernetes Operator for Percona Server για MongoDB.
  2. Το Kubernetes Operator for XtraDB CLUSTER είναι μια υπηρεσία που είναι συμβατή με την MySQL και παρέχει υψηλή διαθεσιμότητα και συνέπεια. Μπορείτε επίσης να χρησιμοποιήσετε έναν μεμονωμένο κόμβο εάν δεν απαιτείται υψηλή διαθεσιμότητα, για παράδειγμα για μια βάση δεδομένων dev.

Οι χρήστες του Kubernetes μπορούν να χωριστούν σε δύο ομάδες. Μερικοί άνθρωποι χρησιμοποιούν απευθείας τους χειριστές Kubernetes - αυτοί είναι κυρίως προχωρημένοι χρήστες που έχουν καλή κατανόηση του τρόπου λειτουργίας της τεχνολογίας. Άλλοι το εκτελούν στο backend - τέτοιοι χρήστες ενδιαφέρονται για κάτι σαν τη βάση δεδομένων ως υπηρεσία, δεν θέλουν να εμβαθύνουν στις αποχρώσεις του Kubernetes. Για τη δεύτερη ομάδα χρηστών, έχουμε μια άλλη λύση ανοιχτού κώδικα - το Percona DBaaS CLI Tool. Αυτή είναι μια πειραματική λύση για όσους θέλουν να αποκτήσουν ένα DBaaS ανοιχτού κώδικα βασισμένο στο Kubernetes χωρίς να έχουν βαθιά κατανόηση της τεχνολογίας.

Πώς να εκτελέσετε το DBaaS της Percona στο Google Kubernetes Engine

Το Google Kubernetes Engine, κατά τη γνώμη μου, είναι μια από τις πιο λειτουργικές υλοποιήσεις της τεχνολογίας Kubernetes. Είναι διαθέσιμο σε πολλές περιοχές του κόσμου και διαθέτει ένα απλό και βολικό Εργαλείο Γραμμής Εντολών (SDK), το οποίο σας επιτρέπει να δημιουργείτε σενάρια αντί να διαχειρίζεστε χειροκίνητα την πλατφόρμα.

Για να λειτουργήσει το DBaaS μας, χρειαζόμαστε τα ακόλουθα στοιχεία:

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

Εγκαταστήστε το kubectl

Εγκαθιστούμε το πακέτο για το λειτουργικό σας σύστημα, θα δούμε το παράδειγμα του Ubuntu. Περισσότερες λεπτομέρειες εδώ.

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

Εγκατάσταση του Google Cloud SDK

Εγκαθιστούμε το πακέτο λογισμικού με τον ίδιο τρόπο. Περισσότερες λεπτομέρειες εδώ.

# 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

Εγκατάσταση του Percona DBaaS CLI

Εγκαταστήστε από τα αποθετήρια Percona. Το Percona DBaaS CLI Tool εξακολουθεί να είναι ένα πειραματικό προϊόν, επομένως βρίσκεται στο πειραματικό αποθετήριο, το οποίο πρέπει να ενεργοποιηθεί ξεχωριστά, ακόμα κι αν έχετε ήδη εγκαταστήσει τα αποθετήρια Percona.

Περισσότερα εδώ.

Αλγόριθμος εγκατάστασης:

  1. Ρυθμίστε τα αποθετήρια Percona χρησιμοποιώντας το εργαλείο percona-release. Πρώτα πρέπει να κατεβάσετε και να εγκαταστήσετε το επίσημο πακέτο percona-release από την Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Ενεργοποιήστε το στοιχείο αποθήκης πειραματικού εργαλείου ως εξής:
    sudo percona-release enable tools experimental
    
  3. Εγκαταστήστε το πακέτο percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Ρύθμιση της λειτουργίας των εξαρτημάτων

Περισσότερα για τις ρυθμίσεις εδώ.

Πρώτα πρέπει να συνδεθείτε στον λογαριασμό σας Google. Επιπλέον, το Google Cloud επιτρέπει σε έναν χρήστη να έχει πολλά ανεξάρτητα έργα, επομένως πρέπει να καθορίσετε ένα έργο που λειτουργεί χρησιμοποιώντας τον κώδικα για αυτό το έργο:

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

Στη συνέχεια, δημιουργούμε ένα σύμπλεγμα. Για την επίδειξη, δημιούργησα ένα σύμπλεγμα Kubernetes με τρεις μόνο κόμβους - αυτό είναι το ελάχιστο που απαιτείται για υψηλή διαθεσιμότητα:

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

Η ακόλουθη εντολή kubectl δίνει τα επιθυμητά δικαιώματα στον τρέχοντα χρήστη μας:

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

Στη συνέχεια δημιουργούμε έναν χώρο ονομάτων και τον κάνουμε ενεργό. Ο χώρος ονομάτων είναι, σε γενικές γραμμές, σαν έργο ή περιβάλλον, αλλά ήδη βρίσκεται μέσα σε ένα σύμπλεγμα Kubernetes. Είναι ανεξάρτητο από έργα Google Cloud:

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

Έναρξη του συμπλέγματος

Αφού ολοκληρώσουμε αυτά τα λίγα βήματα, μπορούμε να ξεκινήσουμε ένα σύμπλεγμα τριών κόμβων με αυτήν την απλή εντολή:

# 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

Πώς να συνδεθείτε σε ένα σύμπλεγμα

Από προεπιλογή, είναι διαθέσιμο μόνο μέσα στο Kubernetes. Δηλαδή, δεν είναι προσβάσιμο από αυτόν τον διακομιστή από τον οποίο εκτελέσατε την εντολή "Δημιουργία". Για να το καταστήσετε διαθέσιμο, για παράδειγμα, για δοκιμές με πελάτη, πρέπει να προωθήσετε τη θύρα μέσω του Port Mapping:

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

Στη συνέχεια συνδέουμε τον πελάτη MySQL:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Προηγμένες εντολές διαχείρισης συμπλέγματος

Βάση δεδομένων για δημόσια IP

Εάν θέλετε μια πιο μόνιμη λύση για τη διαθεσιμότητα συμπλέγματος, μπορείτε να λάβετε μια εξωτερική διεύθυνση IP. Σε αυτήν την περίπτωση, η βάση δεδομένων θα είναι προσβάσιμη από οπουδήποτε. Αυτό είναι λιγότερο ασφαλές, αλλά συχνά πιο βολικό. Για εξωτερική 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

Ορίστε ρητά τον κωδικό πρόσβασης

Αντί το σύστημα να δημιουργεί τυχαία κωδικό πρόσβασης, μπορείτε να ορίσετε ρητά τον κωδικό πρόσβασης:

# 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

Δείχνω την έξοδο των σεναρίων σε μορφή αναγνώσιμη από τον άνθρωπο, αλλά υποστηρίζεται επίσης η μορφή JSON.

Απενεργοποίηση υψηλής διαθεσιμότητας

Με την ακόλουθη εντολή μπορείτε να απενεργοποιήσετε την υψηλή διαθεσιμότητα για την ανάπτυξη ενός μόνο κόμβου:

# 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

Αυτή είναι μια λύση για τη δοκιμή εργασιών για να τεθεί σε λειτουργία η MySQL όσο το δυνατόν πιο γρήγορα και εύκολα, να τη δοκιμάσετε και, στη συνέχεια, να την τερματίσετε ή να τη χρησιμοποιήσετε για ανάπτυξη.

Το εργαλείο Percona DBaaS CLI σάς βοηθά να επιτύχετε μια λύση παρόμοια με το DBaaS στο Kubernetes. Ταυτόχρονα, συνεχίζουμε να εργαζόμαστε για τη λειτουργικότητα και τη χρηστικότητά του.

Αυτή η έκθεση παρουσιάστηκε για πρώτη φορά στο @Databases Meetup από τη Mail.ru Cloud Solutions&Tarantool. Κοίτα βίντεο άλλες παραστάσεις και εγγραφείτε σε ανακοινώσεις εκδηλώσεων στο Telegram Γύρω από το Kubernetes στο Mail.ru Group.

Τι άλλο να διαβάσετε για το θέμα:

  1. Βάσεις δεδομένων σε μια σύγχρονη πλατφόρμα IIoT.
  2. Πώς να επιλέξετε μια βάση δεδομένων για ένα έργο, ώστε να μην χρειάζεται να επιλέξετε ξανά.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο