ProHoster > blog > administrasi > Cara membangun hybrid cloud menggunakan Kubernetes yang dapat menggantikan DBaaS
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:
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.
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:
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.
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:
Produk sumber terbuka standar yang dikemas dalam backend administrasi untuk kemudahan penerapan dan pengelolaan.
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:
Konsep StatefulSet adalah serangkaian primitif untuk memproses kejadian tentang penghentian kerja pod dan penerapan Graceful Shutdown (pematian aplikasi yang dapat diprediksi).
Volume Persisten adalah penyimpanan data yang terkait dengan pod, objek manajemen Kubernetes.
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:
Operator Kubernetes untuk Server Percona untuk MongoDB.
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:
Kubectl.
Google Cloud SDK.
CLI Percona DBaaS.
Instal kubectl
Kami menginstal paket untuk sistem operasi Anda, kami akan melihat contoh Ubuntu. Keterangan lebih lanjut di sini.
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.
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:
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:
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:
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:
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.