Cara Membangun Hybrid Cloud dengan Kubernetes untuk Mengganti DBaaS

Nama saya Petr Zaitsev, saya adalah CEO, pendiri Percona dan saya ingin memberi tahu Anda:



  • bagaimana kami datang dari solusi open source ke Database sebagai Layanan;
  • apa pendekatan untuk menyebarkan database di cloud;
  • Bagaimana Kubernetes dapat menggantikan DBaaS dengan menghapus ketergantungan vendor dan menjaga DBMS sebagai layanan sesederhana mungkin.


Artikel ini didasarkan pada laporan di @Databases Meetup oleh Mail.ru Cloud Solutions & Tarantool. Jika Anda tidak ingin membaca, Anda dapat melihat:







Bagaimana dari open source datang ke Database sebagai Layanan di cloud



Saya telah melakukan open source sejak akhir 90-an. Dua puluh tahun lalu, menggunakan open source seperti database tidaklah mudah. Itu perlu untuk mengunduh sumber, menambal, mengkompilasi, dan hanya kemudian digunakan.



Kemudian open source melalui serangkaian penyederhanaan:



  • Tar.gz dan INSTAL sumber yang perlu dikompilasi;
  • paket dengan dependensi seperti .deb dan .rpm, di mana Anda hanya perlu menginstal satu set paket;
  • repositori paket seperti APT dan YUM, di mana penginstalan terjadi secara otomatis;
  • solusi seperti Docker dan Snap, yang memungkinkan Anda mendapatkan paket saat penginstalan tanpa ketergantungan eksternal.


Hasilnya, penggunaan perangkat lunak open source menjadi lebih mudah, dan penghalang untuk masuk ke dalam pengembangan aplikasi semacam itu berkurang.



Pada saat yang sama, tidak seperti situasi 20 tahun lalu, ketika semua orang adalah ahli perakitan, sekarang sebagian besar pengembang tidak dapat merakit alat yang digunakan dari sumbernya.



Faktanya, ini tidak buruk karena:



  1. Kami dapat menggunakan perangkat lunak yang lebih kompleks, tetapi lebih nyaman. Misalnya, browser nyaman digunakan, tetapi menyertakan banyak komponen open source, tidak nyaman untuk membuatnya dari awal.
  2. Semakin banyak orang dapat menjadi pengembang open source dan perangkat lunak lain, lebih banyak perangkat lunak yang digunakan oleh bisnis, dan kebutuhan akan perangkat lunak tersebut semakin tinggi.


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



Ada dua pendekatan untuk database di cloud:



  1. Bangun infrastruktur database, seperti di pusat data biasa. Yaitu, ambil blok bangunan standar: komputasi, penyimpanan, dan sebagainya, letakkan Linux di atasnya, database, konfigurasikan.
  2. Gunakan Database sebagai Layanan, di mana penyedia menawarkan database siap pakai di dalam cloud.


Sekarang DBaaS adalah pasar yang berkembang pesat, karena layanan semacam itu memungkinkan pengembang untuk bekerja dengan database secara langsung dan meminimalkan pekerjaan rutin. Penyedia mengasumsikan penyediaan Ketersediaan Tinggi (ketersediaan tinggi) dan penskalaan mudah, penambalan database, pencadangan, penyetelan kinerja.



Dua jenis Database sebagai Layanan berdasarkan open source dan alternatifnya berupa Kubernetes



Ada dua jenis Database sebagai Layanan untuk database open source:



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


Kedua opsi tersebut mengurangi kemampuan untuk bermigrasi antar cloud dan mengurangi portabilitas data dan aplikasi. Misalnya, terlepas dari kenyataan bahwa berbagai jenis awan mendukung, pada kenyataannya, standar MySQL yang sama, ada perbedaan yang signifikan di antara mereka: dalam operasi, kinerja, pencadangan, dan sebagainya. Bermigrasi dari satu cloud ke cloud lainnya bisa jadi rumit, terutama untuk aplikasi yang kompleks.



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



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



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


Kubernetes sekarang menjadi pemimpin dalam kategori perangkat lunak ini. Ada banyak solusi berbeda untuk tugas semacam itu, tetapi dialah yang menjadi standar. Banyak perusahaan yang sebelumnya mencoba solusi alternatif kini berfokus pada adaptasi produk mereka untuk mendukung Kubernetes.



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



Bagaimana Kubernetes bekerja dengan database



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



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



  1. Konsep StatefulSet adalah keseluruhan rangkaian primitif untuk menangani peristiwa penutupan pod dan melakukan Graceful Shutdown (penghentian aplikasi yang dapat diprediksi).
  2. Volume Persisten - penyimpanan data yang terkait dengan pod, objek manajemen Kubernetes.
  3. Kerangka Kerja Operator - yaitu, kemampuan untuk membuat komponen untuk mengelola database dan aplikasi berstatus lainnya yang didistribusikan ke banyak node.


Sudah ada Database besar sebagai Layanan di cloud publik, di backend yang Kubernetes, misalnya: CockroachCloud, InfluxDB, PlanetScale. Artinya, database Kubernetes tidak hanya memungkinkan secara teori, tetapi juga berfungsi dalam praktiknya.



Percona memiliki dua solusi Kubernetes open source:



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


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



Cara menjalankan DBaaS dari 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 Command Line Tool (SDK) yang sederhana dan nyaman yang memungkinkan Anda membuat skrip, daripada memanipulasi platform secara manual.



Agar DBaaS kami berfungsi, kami membutuhkan komponen-komponen berikut:



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


Instal kubectl



Menginstal paket untuk sistem operasi Anda, kita akan melihat contoh Ubuntu. Lebih lengkapnya 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



Instal paket perangkat lunak dengan cara yang sama. Lebih lengkapnya 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


Instal Percona DBaaS CLI



Instal dari repositori Percona. Alat CLI DBaaS Percona masih merupakan produk eksperimental, oleh karena itu alat ini berada dalam repositori eksperimental, yang harus disertakan secara terpisah, meskipun Anda sudah menginstal repositori Percona.



Lebih lengkapnya di sini .



Algoritma instalasi:



  1. Konfigurasikan repositori Percona menggunakan alat percona-release. 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 komponen



Baca lebih lanjut tentang pengaturan di sini .



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



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


Selanjutnya, kami membuat cluster. Untuk demo, 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 diperlukan untuk pengguna kami saat ini:



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


Kemudian kami membuat namespace dan membuatnya aktif. Namespace, secara kasar, juga seperti proyek atau lingkungan, tetapi sudah berada di dalam cluster Kubernetes. Ini tidak tergantung pada proyek Google Cloud:



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


Kami memulai cluster



Setelah kami melalui beberapa langkah ini, kami 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 menyambung ke cluster



Secara default, ini hanya tersedia di dalam Kubernetes. Artinya, dari server ini tempat Anda menjalankan perintah Buat, itu tidak tersedia. Untuk membuatnya tersedia, misalnya, untuk pengujian dengan klien, Anda harus meneruskan port melalui Port Mapping:



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 lanjutan



Database IP Publik



Jika Anda menginginkan solusi yang lebih permanen untuk ketersediaan klaster, Anda bisa mendapatkan alamat IP eksternal. Dalam hal ini, database dapat diakses dari mana saja. Ini kurang aman, tetapi seringkali lebih nyaman. Untuk IP eksternal gunakan 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


Atur kata sandi secara eksplisit



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



Matikan ketersediaan tinggi



Anda dapat menonaktifkan ketersediaan tinggi dengan perintah berikut untuk memperluas node tunggal:



# 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 masalah pengujian untuk meningkatkan MySQL dengan cepat dan mudah, mengujinya, dan kemudian menggulungnya atau menggunakannya untuk pengembangan.



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



Pembicaraan ini pertama kali dipresentasikan di @Databases Meetup oleh Mail.ru Cloud Solutions & Tarantool. Tonton video pidato lainnya dan berlangganan pengumuman acara di Telegram Around Kubernetes di Mail.ru Group .



Apa lagi yang harus dibaca tentang topik ini:



  1. Basis data dalam platform IIoT modern.
  2. Bagaimana memilih database untuk suatu proyek, agar tidak memilih lagi.



All Articles