Cara membina awan hibrid menggunakan Kubernetes yang boleh menggantikan DBaaS

Nama saya Petr Zaitsev, saya CEO, pengasas percona dan saya ingin memberitahu anda:

  • bagaimana kami datang daripada penyelesaian sumber terbuka kepada Pangkalan Data sebagai Perkhidmatan;
  • apakah pendekatan yang wujud untuk menggunakan pangkalan data dalam awan;
  • bagaimana Kubernetes boleh menggantikan DBaaS, menghapuskan pergantungan vendor dan mengekalkan kesederhanaan DBMS sebagai perkhidmatan.

Artikel itu disediakan berdasarkan laporan di @Databases Meetup oleh Mail.ru Cloud Solutions & Tarantool. Jika anda tidak mahu membaca, anda boleh menonton:


Bagaimana kami datang daripada sumber terbuka kepada Pangkalan Data sebagai Perkhidmatan dalam awan

Saya telah bekerja dalam sumber terbuka sejak lewat 90-an. Dua puluh tahun yang lalu, menggunakan sumber terbuka, seperti pangkalan data, tidak begitu mudah. Ia perlu memuat turun kod sumber, menampalnya, menyusunnya dan kemudian menggunakannya.

Sumber terbuka kemudian melalui satu siri pemudahan:

  • Tar.gz dan PASANG sumber yang perlu disusun;
  • pakej dengan kebergantungan seperti .deb dan .rpm, di mana anda hanya perlu memasang satu set pakej;
  • repositori pakej seperti APT dan YUM, dengan pemasangan adalah automatik;
  • penyelesaian seperti Docker dan Snap, yang membolehkan anda menerima pakej melalui pemasangan tanpa kebergantungan luaran.

Akibatnya, ia menjadi lebih mudah untuk menggunakan perisian sumber terbuka dan juga mengurangkan halangan untuk masuk ke dalam membangunkan aplikasi tersebut.

Pada masa yang sama, tidak seperti situasi 20 tahun lalu, apabila semua orang adalah pakar pemasangan, kini kebanyakan pembangun tidak dapat membina alatan yang mereka gunakan daripada sumber.

Sebenarnya, ini tidak buruk, kerana:

  1. Kita boleh menggunakan perisian yang lebih kompleks tetapi lebih mesra pengguna. Sebagai contoh, penyemak imbas mudah digunakan, tetapi ia termasuk banyak komponen sumber terbuka dan menyusahkan untuk dibina dari awal.
  2. Lebih ramai orang boleh menjadi pembangun sumber terbuka dan perisian lain, lebih banyak perisian digunakan oleh perniagaan, dan keperluan untuknya lebih besar.

Kelemahannya ialah langkah seterusnya dalam penyederhanaan dikaitkan dengan penggunaan penyelesaian awan, dan ini membawa kepada penguncian vendor tertentu, iaitu, mengikat kepada satu pembekal. Kami menggunakan penyelesaian mudah dan pembekal menggunakan komponen sumber terbuka, tetapi sebenarnya ia dipaku pada salah satu awan besar. Iaitu, cara termudah dan terpantas untuk menggunakan sumber terbuka (dan perisian yang serasi dengannya) adalah dalam awan, menggunakan API proprietari.

Apabila ia datang kepada pangkalan data dalam awan, terdapat dua pendekatan:

  1. Pasang infrastruktur pangkalan data, seperti dalam pusat data biasa. Iaitu, ambil blok binaan standard: pengiraan, penyimpanan, dan sebagainya, pasang Linux dan pangkalan data padanya, dan konfigurasikannya.
  2. Gunakan Pangkalan Data sebagai Perkhidmatan, di mana pembekal menawarkan pangkalan data siap sedia di dalam awan.

DBaaS ialah pasaran yang berkembang pesat sekarang kerana ia membolehkan pembangun bekerja secara langsung dengan pangkalan data dan meminimumkan kerja rutin. Pembekal berjanji untuk memastikan Ketersediaan Tinggi dan penskalaan mudah, tampalan pangkalan data, sandaran dan penalaan prestasi.

Dua jenis Pangkalan Data sebagai Perkhidmatan berdasarkan sumber terbuka dan alternatif dalam bentuk Kubernetes

Terdapat dua jenis Pangkalan Data sebagai Perkhidmatan untuk pangkalan data terbuka:

  1. Produk sumber terbuka standard yang dibungkus dalam bahagian belakang pentadbiran untuk penggunaan dan pengurusan yang mudah.
  2. Penyelesaian komersial termaju dengan pelbagai alat tambah, serasi dengan sumber terbuka.

Kedua-dua pilihan mengurangkan kemungkinan penghijrahan antara awan dan mengurangkan kemudahalihan data dan aplikasi. Sebagai contoh, walaupun pada hakikatnya jenis awan yang berbeza menyokong MySQL standard yang sama, terdapat perbezaan yang ketara antara mereka: dalam operasi, prestasi, sandaran dan sebagainya. Berhijrah dari satu awan ke awan lain boleh menjadi mencabar, terutamanya untuk aplikasi yang kompleks.

Dan di sini timbul persoalan - adakah mungkin untuk mendapatkan kemudahan Pangkalan Data sebagai Perkhidmatan, tetapi sebagai penyelesaian sumber terbuka yang mudah?

Berita buruknya ialah, malangnya, belum ada penyelesaian sedemikian di pasaran. Berita baiknya ialah terdapat Kubernetes, yang membolehkan anda melaksanakan penyelesaian sedemikian.

Kubernetes ialah sistem pengendalian untuk awan atau pusat data yang membolehkan anda mengatur dan mengurus aplikasi merentas berbilang pelayan dalam satu kluster dan bukannya pada satu hos.

Kini Kubernetes adalah peneraju dalam kategori perisian tersebut. Terdapat banyak penyelesaian yang berbeza untuk masalah sedemikian, tetapi ia menjadi standard. Banyak syarikat yang dahulunya menumpukan pada penyelesaian alternatif kini menumpukan pada menyesuaikan produk mereka untuk menyokong Kubernetes.

Selain itu, Kubernetes ialah penyelesaian universal yang disokong dalam awan peribadi, awam dan hibrid bagi banyak vendor, contohnya: AWS, Google Cloud, Microsoft Azure, Penyelesaian Awan Mail.ru.

Cara Kubernetes berfungsi dengan pangkalan data

Kubernetes pada asalnya direka untuk aplikasi tanpa negara yang memproses data tetapi tidak menyimpan apa-apa, seperti perkhidmatan mikro atau aplikasi web. Pangkalan data berada di hujung spektrum yang lain, iaitu, ia adalah aplikasi stateful. Dan Kubernetes pada asalnya tidak dimaksudkan untuk aplikasi sedemikian.

Walau bagaimanapun, terdapat ciri yang telah muncul dalam Kubernetes baru-baru ini yang membenarkan penggunaan pangkalan data dan aplikasi stateful lain:

  1. Konsep StatefulSet ialah keseluruhan siri primitif untuk memproses peristiwa tentang menghentikan kerja pod dan melaksanakan Penutupan Anggun (penutupan aplikasi yang boleh diramalkan).
  2. Jilid Berterusan ialah storan data yang dikaitkan dengan pod, objek pengurusan Kubernetes.
  3. Rangka Kerja Operator - iaitu, keupayaan untuk mencipta komponen untuk mengurus pangkalan data dan aplikasi stateful lain yang diedarkan merentasi banyak nod.

Kini di awan awam terdapat Pangkalan Data yang besar sebagai Perkhidmatan, bahagian belakangnya ialah Kubernetes, contohnya: CockroachCloud, InfluxDB, PlanetScale. Iaitu, pangkalan data pada Kubernetes bukan sahaja sesuatu yang mungkin secara teori, tetapi juga sesuatu yang berfungsi dalam amalan.

Percona mempunyai dua penyelesaian sumber terbuka untuk Kubernetes:

  1. Operator Kubernetes untuk Pelayan Percona untuk MongoDB.
  2. Operator Kubernetes untuk KLUSTER XtraDB ialah perkhidmatan yang serasi dengan MySQL dan menyediakan ketersediaan dan ketekalan yang tinggi. Anda juga boleh menggunakan satu nod jika ketersediaan tinggi tidak diperlukan, contohnya untuk pangkalan data dev.

Pengguna Kubernetes boleh dibahagikan kepada dua kumpulan. Sesetengah orang menggunakan Operator Kubernetes secara langsung - ini terutamanya pengguna lanjutan yang mempunyai pemahaman yang baik tentang cara teknologi berfungsi. Yang lain menjalankannya di bahagian belakang - pengguna sedemikian berminat dengan sesuatu seperti Pangkalan Data sebagai Perkhidmatan, mereka tidak mahu menyelidiki nuansa Kubernetes. Untuk kumpulan kedua pengguna, kami mempunyai satu lagi penyelesaian sumber terbuka - Percona DBaaS CLI Tool. Ini adalah penyelesaian percubaan untuk mereka yang ingin mendapatkan DBaaS sumber terbuka berdasarkan Kubernetes tanpa pemahaman yang mendalam tentang teknologi.

Bagaimana untuk menjalankan DBaaS Percona pada Enjin Google Kubernetes

Enjin Google Kubernetes, pada pendapat saya, adalah salah satu pelaksanaan teknologi Kubernetes yang paling berfungsi. Ia tersedia di banyak wilayah di dunia dan mempunyai Alat Baris Perintah (SDK) yang ringkas dan mudah, yang membolehkan anda membuat skrip dan bukannya mengurus platform secara manual.

Untuk membolehkan DBaaS kami berfungsi, kami memerlukan komponen berikut:

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

Pasang kubectl

Kami memasang pakej untuk sistem pengendalian anda, kami akan melihat contoh Ubuntu. Maklumat lanjut di sini.

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

Memasang SDK Awan Google

Kami memasang pakej perisian dengan cara yang sama. Maklumat lanjut di sini.

# 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

Memasang Percona DBaaS CLI

Pasang dari repositori Percona. Alat Percona DBaaS CLI masih merupakan produk percubaan, jadi ia terletak dalam repositori percubaan, yang mesti didayakan secara berasingan, walaupun jika anda sudah memasang repositori Percona.

lebih di sini.

Algoritma pemasangan:

  1. Sediakan repositori Percona menggunakan alat pelepas percona. Mula-mula anda perlu memuat turun dan memasang pakej keluaran percona rasmi daripada Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Dayakan komponen repositori alat eksperimen seperti berikut:
    sudo percona-release enable tools experimental
    
  3. Pasang pakej percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Menyediakan operasi komponen

Lagi tentang tetapan di sini.

Mula-mula anda perlu log masuk ke akaun Google anda. Selanjutnya, Google Cloud membenarkan seorang pengguna mempunyai banyak projek bebas, jadi anda perlu menentukan projek yang berfungsi menggunakan kod untuk projek ini:

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

Seterusnya, kami membuat kluster. Untuk demo, saya mencipta gugusan Kubernetes yang mengandungi hanya tiga nod - ini adalah minimum yang diperlukan untuk ketersediaan tinggi:

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

Perintah kubectl berikut memberikan keistimewaan yang diingini kepada pengguna semasa kami:

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

Kemudian kami mencipta ruang nama dan menjadikannya aktif. Ruang nama, secara kasarnya, juga seperti projek atau persekitaran, tetapi sudah berada di dalam gugusan Kubernetes. Ia bebas daripada projek Google Cloud:

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

Memulakan kluster

Sebaik sahaja kami telah melalui beberapa langkah ini, kami boleh memulakan kluster tiga nod dengan arahan mudah ini:

# 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

Cara menyambung ke kluster

Secara lalai, ia hanya tersedia di dalam Kubernetes. Iaitu, ia tidak boleh diakses dari pelayan ini dari mana anda menjalankan arahan "Buat". Untuk menyediakannya, sebagai contoh, untuk ujian dengan klien, anda perlu memajukan port melalui Pemetaan Port:

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

Kemudian kami menyambungkan klien MySQL anda:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Perintah pengurusan kluster lanjutan

Pangkalan data pada IP awam

Jika anda mahukan penyelesaian yang lebih kekal untuk ketersediaan kluster, anda boleh mendapatkan alamat IP luaran. Dalam kes ini, pangkalan data akan boleh diakses dari mana-mana sahaja. Ini kurang selamat, tetapi selalunya lebih mudah. Untuk IP luaran kami menggunakan arahan berikut:

# 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

Tetapkan kata laluan secara eksplisit

Daripada sistem menjana kata laluan secara rawak, anda boleh menetapkan kata laluan secara eksplisit:

# 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

Saya menunjukkan output skrip dalam format yang boleh dibaca manusia, tetapi format JSON juga disokong.

Mematikan ketersediaan tinggi

Dengan arahan berikut anda boleh melumpuhkan ketersediaan tinggi untuk menggunakan satu nod:

# 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

Ini ialah penyelesaian untuk tugasan ujian untuk mengaktifkan dan menjalankan MySQL secepat dan semudah mungkin, mengujinya, dan kemudian menutupnya atau menggunakannya untuk pembangunan.

Alat Percona DBaaS CLI membantu anda mencapai penyelesaian seperti DBaaS pada Kubernetes. Pada masa yang sama, kami terus mengusahakan fungsi dan kebolehgunaannya.

Laporan ini pertama kali dibentangkan di @Pertemuan Pangkalan Data oleh Mail.ru Cloud Solutions&Tarantool. Tengok video persembahan lain dan melanggan pengumuman acara di Telegram Sekitar Kubernetes di Mail.ru Group.

Apa lagi yang perlu dibaca mengenai topik:

  1. Pangkalan data dalam platform IIoT moden.
  2. Bagaimana untuk memilih pangkalan data untuk projek supaya anda tidak perlu memilih lagi.

Sumber: www.habr.com

Tambah komen