Kuinka rakentaa hybridipilvi käyttämällä Kubernetesia, joka voi korvata DBaaS:n

Nimeni on Petr Zaitsev, olen toimitusjohtaja, perustaja percona ja haluan kertoa sinulle:

  • miten pääsimme avoimen lähdekoodin ratkaisuista tietokantaan palveluna;
  • mitä lähestymistapoja on olemassa tietokantojen käyttöönottamiseksi pilvessä;
  • kuinka Kubernetes voi korvata DBaaS:n poistamalla toimittajariippuvuuden ja säilyttäen DBMS:n yksinkertaisuuden palveluna.

Artikkeli on laadittu @Databases Meetupissa Mail.ru Cloud Solutions & Tarantoolin tekemän raportin perusteella. Jos et halua lukea, voit katsoa:


Kuinka pääsimme avoimesta lähdekoodista tietokantaan pilvipalveluna

Olen työskennellyt avoimen lähdekoodin parissa 90-luvun lopulta lähtien. Kaksikymmentä vuotta sitten avoimen lähdekoodin, kuten tietokantojen, käyttö ei ollut niin helppoa. Oli tarpeen ladata lähdekoodi, korjata se, kääntää se ja vasta sitten käyttää sitä.

Avoin lähdekoodi kävi sitten läpi useita yksinkertaistuksia:

  • Tar.gz ja INSTALL lähteet, jotka piti kääntää;
  • paketit, joissa on riippuvuuksia, kuten .deb ja .rpm, joissa sinun tarvitsee asentaa vain joukko paketteja;
  • pakettivarastot, kuten APT ja YUM, joiden kanssa asennus on automaattista;
  • ratkaisuja, kuten Docker ja Snap, joiden avulla voit vastaanottaa paketteja asentamalla ilman ulkoisia riippuvuuksia.

Tämän seurauksena avoimen lähdekoodin ohjelmistojen käyttö helpottuu ja myös tällaisten sovellusten kehittämisen esteitä alennetaan.

Samaan aikaan, toisin kuin 20 vuotta sitten, jolloin kaikki olivat kokoonpanoasiantuntijoita, nyt useimmat kehittäjät eivät voi rakentaa käyttämiään työkaluja lähteestä.

Itse asiassa tämä ei ole huono, koska:

  1. Voimme käyttää monimutkaisempia, mutta käyttäjäystävällisempiä ohjelmistoja. Esimerkiksi selain on kätevä käyttää, mutta se sisältää monia avoimen lähdekoodin osia ja sitä on hankala rakentaa tyhjästä.
  2. Avoimen lähdekoodin ja muiden ohjelmistojen kehittäjiksi voi tulla useampia ihmisiä, yritykset käyttävät enemmän ohjelmistoja ja niiden tarve on suurempi.

Haittapuolena on, että seuraava askel yksinkertaistamisessa liittyy pilviratkaisujen käyttöön, mikä johtaa tiettyyn toimittajan lukkiutumiseen eli yhteen toimittajaan sitoutumiseen. Käytämme yksinkertaisia ​​ratkaisuja ja palveluntarjoajat käyttävät avoimen lähdekoodin komponentteja, mutta itse asiassa ne on naulattu yhteen isoista pilvistä. Toisin sanoen helpoin ja nopein tapa ottaa käyttöön avoin lähdekoodi (ja sen kanssa yhteensopiva ohjelmisto) on pilvissä käyttämällä patentoitua APIa.

Mitä tulee pilven tietokantoihin, on kaksi lähestymistapaa:

  1. Kokoa tietokantainfrastruktuuri, kuten tavallisessa datakeskuksessa. Eli ota tavallisia rakennuspalikoita: laskenta, tallennus ja niin edelleen, asenna Linux ja tietokanta niihin ja määritä ne.
  2. Käytä tietokantaa palveluna, jossa palveluntarjoaja tarjoaa valmiin tietokannan pilven sisällä.

DBaaS on tällä hetkellä nopeasti kasvava markkina, koska sen avulla kehittäjät voivat työskennellä suoraan tietokantojen kanssa ja minimoi rutiinityöt. Palveluntarjoaja sitoutuu varmistamaan korkean käytettävyyden ja helpon skaalauksen, tietokantakorjauksen, varmuuskopiot ja suorituskyvyn virityksen.

Kahden tyyppinen tietokanta palveluna, joka perustuu avoimeen lähdekoodiin ja vaihtoehtona Kubernetesin muodossa

Avoimille tietokannoille on olemassa kahden tyyppistä tietokantaa palveluna:

  1. Vakiomuotoinen avoimen lähdekoodin tuote, joka on pakattu järjestelmänvalvojan taustajärjestelmään helppoa käyttöönottoa ja hallintaa varten.
  2. Edistyksellinen kaupallinen ratkaisu erilaisilla lisäosilla, yhteensopiva avoimen lähdekoodin kanssa.

Molemmat vaihtoehdot vähentävät mahdollisuutta siirtyä pilvien välillä ja vähentävät tietojen ja sovellusten siirrettävyyttä. Esimerkiksi huolimatta siitä, että erityyppiset pilvet tukevat olennaisesti samaa MySQL-standardia, niiden välillä on merkittäviä eroja: toiminnassa, suorituskyvyssä, varmuuskopioinnissa ja niin edelleen. Siirtyminen pilvestä toiseen voi olla haastavaa erityisesti monimutkaisissa sovelluksissa.

Ja tässä herää kysymys - onko mahdollista saada tietokannan mukavuus palveluna, mutta yksinkertaisena avoimen lähdekoodin ratkaisuna?

Huono uutinen on, että valitettavasti tällaisia ​​ratkaisuja ei vielä ole markkinoilla. Hyvä uutinen on, että on olemassa Kubernetes, jonka avulla voit toteuttaa tällaisia ​​​​ratkaisuja.

Kubernetes on pilvi- tai datakeskuksen käyttöjärjestelmä, jonka avulla voit ottaa käyttöön ja hallita sovellusta useissa palvelimissa klusterissa yksittäisen isännän sijaan.

Nyt Kubernetes on johtava tällaisten ohjelmistojen kategoriassa. Tällaisiin ongelmiin oli monia erilaisia ​​ratkaisuja, mutta siitä tuli standardi. Monet yritykset, jotka aiemmin keskittyivät vaihtoehtoisiin ratkaisuihin, keskittyvät nyt mukauttamaan tuotteitaan Kubernetesin tukemiseksi.

Lisäksi Kubernetes on universaali ratkaisu, jota tuetaan monien toimittajien yksityisissä, julkisissa ja hybridipilvissä, esimerkiksi: AWS, Google Cloud, Microsoft Azure, Mail.ru Pilviratkaisut.

Miten Kubernetes toimii tietokantojen kanssa

Kubernetes suunniteltiin alun perin tilattomille sovelluksille, jotka käsittelevät tietoja, mutta eivät tallenna mitään, kuten mikropalveluita tai verkkosovelluksia. Tietokannat ovat spektrin toisessa päässä, eli ne ovat tilallisia sovelluksia. Ja Kubernetes ei ollut alun perin tarkoitettu tällaisiin sovelluksiin.

Kubernetesiin on kuitenkin viime aikoina ilmestynyt ominaisuuksia, jotka mahdollistavat tietokantojen ja muiden tilallisten sovellusten käytön:

  1. StatefulSet-konsepti on sarja primitiivisiä tapahtumien käsittelyyn liittyen podien toiminnan pysäyttämiseen ja Graceful Shutdownin (sovelluksen ennakoitava sammutus) toteuttamiseen.
  2. Pysyvät taltiot ovat tietovarastoja, jotka liittyvät podeihin, Kubernetes-hallintaobjekteihin.
  3. Operator Framework - eli kyky luoda komponentteja tietokantojen ja muiden tilallisten sovellusten hallintaan, jotka on jaettu useisiin solmuihin.

Jo nyt julkisissa pilvissä on isoja tietokantoja palveluna, jonka taustana on Kubernetes, esimerkiksi: CockroachCloud, InfluxDB, PlanetScale. Toisin sanoen Kubernetes-tietokanta ei ole vain teoreettisesti mahdollista, vaan myös jotain, joka toimii käytännössä.

Perconalla on kaksi avoimen lähdekoodin ratkaisua Kubernetesille:

  1. Kubernetes-operaattori Percona Serverille MongoDB:lle.
  2. Kubernetes Operator for XtraDB CLUSTER on palvelu, joka on yhteensopiva MySQL:n kanssa ja tarjoaa korkean käytettävyyden ja johdonmukaisuuden. Voit myös käyttää yhtä solmua, jos korkeaa käytettävyyttä ei tarvita, esimerkiksi kehittäjätietokannassa.

Kubernetes-käyttäjät voidaan jakaa kahteen ryhmään. Jotkut ihmiset käyttävät Kubernetes Operatoreita suoraan - nämä ovat pääasiassa edistyneitä käyttäjiä, joilla on hyvä käsitys tekniikan toiminnasta. Toiset käyttävät sitä taustalla - tällaiset käyttäjät ovat kiinnostuneita jostain esimerkiksi Database as a Service -palvelusta, he eivät halua syventyä Kubernetesin vivahteisiin. Toiselle käyttäjäryhmälle meillä on toinen avoimen lähdekoodin ratkaisu - Percona DBaaS CLI Tool. Tämä on kokeellinen ratkaisu niille, jotka haluavat saada Kubernetes-pohjaisen avoimen lähdekoodin DBaaS:n ilman syvällistä ymmärrystä tekniikasta.

Perconan DBaaS:n suorittaminen Google Kubernetes Enginessä

Google Kubernetes Engine on mielestäni yksi Kubernetes-teknologian toimivimmista toteutuksista. Se on saatavilla monilla alueilla maailmassa, ja siinä on yksinkertainen ja kätevä komentorivityökalu (SDK), jonka avulla voit luoda komentosarjoja alustan manuaalisen hallinnan sijaan.

Jotta DBaaS toimisi, tarvitsemme seuraavat komponentit:

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

Asenna kubectl

Asennamme paketin käyttöjärjestelmääsi, katsomme esimerkkiä Ubuntusta. Lisätietoja täällä.

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:n asentaminen

Asennamme ohjelmistopaketin samalla tavalla. Lisätietoja täällä.

# 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:n asentaminen

Asenna Percona-varastoista. Percona DBaaS CLI Tool on vielä kokeellinen tuote, joten se sijaitsee kokeellisessa arkistossa, joka on otettava käyttöön erikseen, vaikka sinulla olisi jo asennettuna Percona-arkistot.

lisää täällä.

Asennusalgoritmi:

  1. Määritä Percona-arkistot Percona-release-työkalulla. Ensin sinun on ladattava ja asennettava virallinen Percona-julkaisupaketti:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Ota kokeellisen työkalun arkistokomponentti käyttöön seuraavasti:
    sudo percona-release enable tools experimental
    
  3. Asenna paketti percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Komponenttien toiminnan asettaminen

Lisää asetuksista täällä.

Ensin sinun on kirjauduttava sisään Google-tilillesi. Lisäksi Google Cloud sallii yhdellä käyttäjällä useita itsenäisiä projekteja, joten sinun on määritettävä toimiva projekti käyttämällä tämän projektin koodia:

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

Seuraavaksi luomme klusterin. Demoa varten loin vain kolmen solmun Kubernetes-klusterin - tämä on korkean käytettävyyden vähimmäisvaatimus:

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

Seuraava kubectl-komento antaa halutut oikeudet nykyiselle käyttäjällemme:

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

Sitten luomme nimitilan ja aktivoimme sen. Nimiavaruus on karkeasti sanottuna myös kuin projekti tai ympäristö, mutta jo Kubernetes-klusterin sisällä. Se on riippumaton Google Cloud -projekteista:

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

Klusterin käynnistäminen

Kun olemme käyneet läpi nämä muutamat vaiheet, voimme aloittaa kolmen solmun klusterin tällä yksinkertaisella komennolla:

# 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

Kuinka muodostaa yhteys klusteriin

Oletuksena se on saatavilla vain Kubernetesissa. Toisin sanoen se ei ole käytettävissä tältä palvelimelta, josta suoritit "Luo"-komennon. Jotta se olisi käytettävissä esimerkiksi asiakkaan kanssa tehtäviä testejä varten, sinun on välitettävä portti Port Mappingin kautta:

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

Sitten yhdistämme MySQL-asiakkaasi:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Kehittyneet klusterinhallintakomennot

Tietokanta julkisella IP-osoitteella

Jos haluat pysyvämmän ratkaisun klusterin saatavuuteen, voit hankkia ulkoisen IP-osoitteen. Tässä tapauksessa tietokanta on käytettävissä mistä tahansa. Tämä on vähemmän turvallinen, mutta usein kätevämpi. Ulkoiselle IP-osoitteelle käytämme seuraavaa komentoa:

# 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

Aseta salasana erikseen

Sen sijaan, että järjestelmä loisi salasanan satunnaisesti, voit asettaa salasanan eksplisiittisesti:

# 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

Näytän komentosarjojen tulosteet ihmisen luettavassa muodossa, mutta myös JSON-muotoa tuetaan.

Korkean käytettävyyden poistaminen käytöstä

Seuraavalla komennolla voit poistaa korkean käytettävyyden käytöstä yhden solmun käyttöönottamiseksi:

# 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

Tämä on ratkaisu testaustehtäviin, jotta MySQL saadaan käyntiin mahdollisimman nopeasti ja helposti, testata sitä ja sitten sulkea se tai käyttää sitä kehitystyössä.

Percona DBaaS CLI -työkalu auttaa sinua saavuttamaan DBaaS:n kaltaisen ratkaisun Kubernetesissa. Samalla jatkamme työtä sen toimivuuden ja käytettävyyden parantamiseksi.

Tämä raportti esiteltiin ensimmäisen kerran klo @Databases Meetup kirjoittanut Mail.ru Cloud Solutions&Tarantool. Katso video muita esityksiä ja tilaa tapahtumatiedotteet Telegramissa Kubernetesin ympärillä Mail.ru Groupissa.

Mitä muuta luettavaa aiheesta:

  1. Tietokannat modernilla IIoT-alustalla.
  2. Kuinka valita tietokanta projektille, jotta sinun ei tarvitse valita uudelleen.

Lähde: will.com

Lisää kommentti