Cara membangun hybrid cloud menggunakan Kubernetes yang dapat menggantikan DBaaS

Nama saya Petr Zaitsev, saya CEO, pendiri percona dan aku ingin memberitahumu:

  • bagaimana kami beralih dari solusi sumber terbuka ke Database sebagai Layanan;
  • pendekatan apa yang ada untuk menyebarkan database di cloud;
  • bagaimana Kubernetes dapat menggantikan DBaaS, menghilangkan ketergantungan vendor dan menjaga kesederhanaan DBMS sebagai sebuah layanan.

Artikel ini disiapkan berdasarkan laporan di @Databases Meetup oleh Mail.ru Cloud Solutions & Tarantool. Jika Anda tidak ingin membaca, Anda dapat menonton:


Bagaimana kami beralih dari open source ke Database as a Service di cloud

Saya telah bekerja di open source sejak akhir tahun 90an. Dua puluh tahun yang lalu, menggunakan open source, seperti database, tidaklah mudah. Anda perlu mengunduh kode sumber, menambalnya, mengkompilasinya, dan baru kemudian menggunakannya.

Open source kemudian mengalami serangkaian penyederhanaan:

  • Tar.gz dan INSTALL sumber yang perlu dikompilasi;
  • paket dengan dependensi seperti .deb dan .rpm, di mana Anda hanya perlu menginstal satu set paket;
  • paket repositori seperti APT dan YUM, yang instalasinya otomatis;
  • solusi seperti Docker dan Snap, yang memungkinkan Anda menerima paket melalui instalasi tanpa ketergantungan eksternal.

Hasilnya, penggunaan perangkat lunak sumber terbuka menjadi lebih mudah dan juga menurunkan hambatan untuk masuk dalam pengembangan aplikasi semacam itu.

Pada saat yang sama, tidak seperti situasi 20 tahun yang lalu, ketika semua orang adalah ahli perakitan, kini sebagian besar pengembang tidak dapat membuat alat yang mereka gunakan dari sumber.

Sebenarnya ini tidak buruk, karena:

  1. Kita dapat menggunakan perangkat lunak yang lebih kompleks namun lebih ramah pengguna. Misalnya, sebuah browser mudah digunakan, tetapi browser tersebut menyertakan banyak komponen sumber terbuka dan tidak nyaman untuk dibuat dari awal.
  2. Semakin banyak orang yang dapat menjadi pengembang perangkat lunak open source dan lainnya, semakin banyak perangkat lunak yang digunakan oleh bisnis, dan kebutuhan akan perangkat lunak tersebut semakin besar.

Sisi negatifnya adalah langkah penyederhanaan selanjutnya dikaitkan dengan penggunaan solusi cloud, dan ini mengarah pada penguncian vendor tertentu, yaitu mengikat ke satu pemasok. Kami menggunakan solusi sederhana dan penyedia menggunakan komponen sumber terbuka, namun kenyataannya mereka terpaku pada salah satu cloud besar. Artinya, cara termudah dan tercepat untuk menerapkan open source (dan perangkat lunak yang kompatibel dengannya) adalah di cloud, menggunakan API berpemilik.

Terkait database di cloud, ada dua pendekatan:

  1. Merakit infrastruktur database, seperti pada pusat data biasa. Artinya, ambil blok penyusun standar: komputasi, penyimpanan, dan sebagainya, instal Linux dan database di dalamnya, dan konfigurasikan.
  2. Gunakan Database as a Service, dimana penyedia menawarkan database siap pakai di dalam cloud.

DBaaS adalah pasar yang berkembang pesat saat ini karena memungkinkan pengembang untuk bekerja secara langsung dengan database dan meminimalkan pekerjaan rutin. Penyedia berjanji untuk memastikan Ketersediaan Tinggi dan penskalaan yang mudah, patching basis data, pencadangan, dan penyesuaian kinerja.

Dua jenis Database as a Service berbasis open source dan alternatifnya berupa Kubernetes

Ada dua jenis Database sebagai Layanan untuk database terbuka:

  1. Produk sumber terbuka standar yang dikemas dalam backend administrasi untuk kemudahan penerapan dan pengelolaan.
  2. Solusi komersial tingkat lanjut dengan berbagai add-on, kompatibel dengan open source.

Kedua opsi tersebut mengurangi kemungkinan migrasi antar cloud dan mengurangi portabilitas data dan aplikasi. Misalnya, meskipun berbagai jenis cloud pada dasarnya mendukung MySQL standar yang sama, terdapat perbedaan signifikan di antara keduanya: dalam pengoperasian, kinerja, pencadangan, dan sebagainya. Bermigrasi dari satu cloud ke cloud lainnya dapat menjadi tantangan, terutama untuk aplikasi yang kompleks.

Dan di sini muncul pertanyaan - apakah mungkin untuk mendapatkan kenyamanan Database sebagai Layanan, tetapi sebagai solusi open source yang sederhana?

Kabar buruknya adalah, sayangnya, belum ada solusi seperti itu di pasaran. Kabar baiknya adalah ada Kubernetes yang memungkinkan Anda mengimplementasikan solusi tersebut.

Kubernetes adalah sistem operasi untuk cloud atau pusat data yang memungkinkan Anda menerapkan dan mengelola aplikasi di beberapa server dalam satu cluster, bukan di satu host.

Kini Kubernetes menjadi pemimpin dalam kategori perangkat lunak tersebut. Ada banyak solusi berbeda untuk masalah seperti itu, namun ini menjadi standar. Banyak perusahaan yang dulunya fokus pada solusi alternatif kini fokus mengadaptasi produk mereka untuk mendukung Kubernetes.

Selain itu, Kubernetes adalah solusi universal yang didukung di cloud privat, publik, dan hybrid dari banyak vendor, misalnya: AWS, Google Cloud, Microsoft Azure, Solusi Cloud Mail.ru.

Cara Kubernetes bekerja dengan database

Kubernetes awalnya dirancang untuk aplikasi stateless yang memproses data tetapi tidak menyimpan apa pun, seperti layanan mikro atau aplikasi web. Basis data berada di ujung lain spektrum, yaitu aplikasi stateful. Dan Kubernetes pada awalnya tidak ditujukan untuk aplikasi semacam itu.

Namun, ada beberapa fitur yang baru-baru ini muncul di Kubernetes yang memungkinkan penggunaan database dan aplikasi stateful lainnya:

  1. Konsep StatefulSet adalah serangkaian primitif untuk memproses kejadian tentang penghentian kerja pod dan penerapan Graceful Shutdown (pematian aplikasi yang dapat diprediksi).
  2. Volume Persisten adalah penyimpanan data yang terkait dengan pod, objek manajemen Kubernetes.
  3. Kerangka Operator - yaitu kemampuan untuk membuat komponen untuk mengelola database dan aplikasi stateful lainnya yang didistribusikan ke banyak node.

Saat ini di public cloud sudah terdapat Databases as a Service berukuran besar yang backendnya adalah Kubernetes, misalnya: CockroachCloud, InfluxDB, PlanetScale. Artinya, database di Kubernetes bukan hanya sesuatu yang mungkin secara teoritis, tetapi juga sesuatu yang bisa diterapkan dalam praktik.

Percona memiliki dua solusi open source untuk Kubernetes:

  1. Operator Kubernetes untuk Server Percona untuk MongoDB.
  2. Operator Kubernetes untuk XtraDB CLUSTER adalah layanan yang kompatibel dengan MySQL dan menyediakan ketersediaan dan konsistensi yang tinggi. Anda juga dapat menggunakan satu node jika ketersediaan tinggi tidak diperlukan, misalnya untuk database dev.

Pengguna Kubernetes dapat dibagi menjadi dua kelompok. Beberapa orang menggunakan Operator Kubernetes secara langsung - sebagian besar adalah pengguna tingkat lanjut yang memiliki pemahaman yang baik tentang cara kerja teknologi. Yang lain menjalankannya di backend - pengguna tersebut tertarik pada sesuatu seperti Database as a Service, mereka tidak ingin mempelajari nuansa Kubernetes. Untuk kelompok pengguna kedua, kami memiliki solusi sumber terbuka lainnya - Alat CLI Percona DBaaS. Ini adalah solusi eksperimental bagi mereka yang ingin mendapatkan DBaaS open source berbasis Kubernetes tanpa pemahaman mendalam tentang teknologinya.

Cara menjalankan DBaaS Percona di Google Kubernetes Engine

Google Kubernetes Engine, menurut saya, adalah salah satu implementasi teknologi Kubernetes yang paling fungsional. Ini tersedia di banyak wilayah di dunia dan memiliki Alat Baris Perintah (SDK) yang sederhana dan nyaman, yang memungkinkan Anda membuat skrip daripada mengelola platform secara manual.

Agar DBaaS kami berfungsi, kami memerlukan komponen berikut:

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

Instal kubectl

Kami menginstal paket untuk sistem operasi Anda, kami akan melihat contoh Ubuntu. Keterangan lebih 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 Google Cloud SDK

Kami menginstal paket perangkat lunak dengan cara yang sama. Keterangan lebih 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

Menginstal Percona DBaaS CLI

Instal dari repositori Percona. Alat CLI Percona DBaaS masih merupakan produk eksperimental, sehingga terletak di repositori eksperimental, yang harus diaktifkan secara terpisah, meskipun Anda sudah menginstal repositori Percona.

lebih di sini.

Algoritma instalasi:

  1. Siapkan repositori Percona menggunakan alat rilis percona. Pertama, Anda perlu mengunduh dan menginstal paket rilis percona resmi dari Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Aktifkan komponen repositori alat eksperimental sebagai berikut:
    sudo percona-release enable tools experimental
    
  3. Instal paket percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Menyiapkan pengoperasian komponen

Lebih lanjut tentang pengaturan di sini.

Pertama, Anda perlu masuk ke akun Google Anda. Lebih jauh lagi, Google Cloud memungkinkan satu pengguna untuk memiliki banyak proyek independen, jadi Anda perlu menentukan proyek yang berfungsi menggunakan kode untuk proyek ini:

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

Selanjutnya, kita membuat cluster. Untuk demonya, saya membuat cluster Kubernetes yang hanya terdiri dari tiga node - ini adalah jumlah 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 hak istimewa yang diinginkan kepada pengguna kami saat ini:

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

Kemudian kita membuat namespace dan mengaktifkannya. Namespace, secara kasar, juga seperti proyek atau lingkungan, tetapi sudah berada di dalam cluster Kubernetes. Ini tidak bergantung pada proyek Google Cloud:

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

Memulai cluster

Setelah kita melakukan beberapa langkah ini, kita dapat memulai cluster tiga node dengan perintah sederhana 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 terhubung ke cluster

Secara default, ini hanya tersedia di dalam Kubernetes. Artinya, ini tidak dapat diakses dari server tempat Anda menjalankan perintah β€œBuat”. Agar tersedia, misalnya, untuk pengujian dengan klien, Anda perlu meneruskan port melalui Pemetaan Port:

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

Kemudian kami menghubungkan klien MySQL Anda:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Perintah manajemen cluster tingkat lanjut

Basis data pada IP publik

Jika Anda menginginkan solusi yang lebih permanen untuk ketersediaan cluster, Anda bisa mendapatkan alamat IP eksternal. Dalam hal ini, database dapat diakses dari mana saja. Ini kurang aman, namun seringkali lebih nyaman. Untuk IP eksternal kami menggunakan perintah 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 sandi secara eksplisit

Daripada sistem membuat kata sandi secara acak, Anda dapat mengatur kata sandi 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 keluaran skrip dalam format yang dapat dibaca manusia, tetapi format JSON juga didukung.

Mematikan ketersediaan tinggi

Dengan perintah berikut, Anda dapat menonaktifkan ketersediaan tinggi untuk menyebarkan satu 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

Ini adalah solusi untuk tugas pengujian agar MySQL aktif dan berjalan secepat dan semudah mungkin, mengujinya, lalu mematikannya atau menggunakannya untuk pengembangan.

Alat Percona DBaaS CLI membantu Anda mencapai solusi mirip DBaaS di Kubernetes. Pada saat yang sama, kami terus mengerjakan fungsionalitas dan kegunaannya.

Laporan ini pertama kali dipresentasikan pada @Database Pertemuan oleh Solusi Cloud Mail.ru & Tarantool. Lihat Video pertunjukan lainnya dan berlangganan pengumuman acara di Telegram Sekitar Kubernetes di Mail.ru Group.

Apa lagi yang perlu dibaca tentang topik ini:

  1. Basis data dalam platform IIoT modern.
  2. Bagaimana memilih database untuk suatu proyek sehingga Anda tidak perlu memilih lagi.

Sumber: www.habr.com

Tambah komentar