Bagaimana menjalankan Cassandra dan Kubernetes bersama

Penampung menjadi semakin populer bagi pengembang yang ingin menerapkan aplikasi di awan. Untuk mengelola aplikasi baru ini, Kubernetes telah menjadi standar de facto untuk orkestrasi container. Kubernetes memungkinkan pengembang untuk membangun aplikasi terdistribusi yang secara otomatis menskalakan secara elastis, bergantung pada permintaan.

Kubernetes dikembangkan untuk dengan mudah menerapkan, menskalakan, dan mengelola beban kerja aplikasi stateless dalam produksi. Dalam hal data stateful, cloud-native, terdapat kebutuhan akan kemudahan penerapan dan skala yang sama.

Dalam database terdistribusi, Cassandra menarik bagi pengembang yang tahu bahwa mereka harus menskalakan data mereka - Cassandra menyediakan database yang sepenuhnya toleran terhadap kesalahan dan pendekatan manajemen data yang dapat berjalan dengan cara yang sama di beberapa lokasi dan layanan cloud. Karena semua node di Cassandra sama, dan setiap node mampu menangani permintaan baca dan tulis, tidak ada satu titik kegagalan pun dalam model Cassandra. Data secara otomatis direplikasi di antara zona kegagalan untuk mencegah hilangnya satu instance yang memengaruhi aplikasi.

Menghubungkan Cassandra ke Kubernetes

Langkah logis berikutnya adalah menggunakan Cassandra dan Kubernetes bersama-sama. Bagaimanapun, mendapatkan database terdistribusi untuk dijalankan bersama dengan lingkungan aplikasi terdistribusi membuatnya lebih mudah untuk membuat operasi data dan aplikasi berlangsung berdekatan satu sama lain. Hal ini tidak hanya menghindari latensi, tetapi juga membantu meningkatkan kinerja dalam skala besar.

Untuk mencapai ini, bagaimanapun, berarti memahami sistem mana yang bertanggung jawab. Cassandra sudah memiliki toleransi kesalahan dan penempatan node yang dapat diberikan oleh Kubernetes, jadi penting untuk mengetahui sistem mana yang bertanggung jawab untuk membuat keputusan. Ini dicapai dengan menggunakan operator Kubernetes.

Operator mengotomatiskan proses penerapan dan pengelolaan aplikasi yang lebih kompleks yang memerlukan informasi khusus domain dan perlu berinteraksi dengan sistem eksternal. Hingga operator dikembangkan, komponen aplikasi stateful seperti instans database menyebabkan tanggung jawab tambahan untuk tim developer, karena mereka harus melakukan pekerjaan manual untuk menyiapkan instans mereka dan berjalan dengan cara yang stateful.

Ada beberapa operator untuk Cassandra yang telah dikembangkan oleh komunitas Cassandra. Untuk contoh ini, kita akan menggunakan cass-operator, yang disatukan dan bersumber terbuka oleh DataStax. Ini mendukung Kubernetes sumber terbuka, Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS), dan Pivotal Container Service (PKS), sehingga Anda dapat menggunakan layanan Kubernetes yang paling sesuai dengan lingkungan Anda.

Menginstal cass-operator di cluster Kubernetes Anda sendiri adalah proses yang sederhana jika Anda memiliki pengetahuan dasar tentang menjalankan cluster Kubernetes. Setelah cluster Kubernetes Anda diautentikasi, menggunakan kubectl, alat baris perintah cluster Kubernetes, dan instance cloud Kubernetes Anda (baik Kubernetes sumber terbuka, GKE, EKS, atau PKS) terhubung ke mesin lokal Anda, Anda dapat mulai menerapkan cass- file YAML konfigurasi operator ke cluster Anda.

Menyiapkan definisi cass-operator Anda

Tahap selanjutnya adalah menerapkan definisi untuk manifes cass-operator, kelas penyimpanan, dan pusat data ke cluster Kubernetes.

Catatan singkat tentang definisi pusat data. Ini didasarkan pada definisi yang digunakan di Cassandra daripada referensi ke pusat data fisik.

Hierarki untuk ini adalah sebagai berikut:

  • Node mengacu pada sistem komputer yang menjalankan instance Cassandra. Node bisa menjadi host fisik, instance mesin di cloud, atau bahkan container Docker.
  • Rak mengacu pada satu set simpul Cassandra yang berdekatan satu sama lain. Rak dapat menjadi rak fisik yang berisi node yang terhubung ke sakelar jaringan umum. Namun, dalam penerapan cloud, rak sering kali mengacu pada kumpulan instance mesin yang berjalan di zona ketersediaan yang sama.
  • Pusat data mengacu pada kumpulan rak logis, umumnya berada di gedung yang sama dan terhubung oleh jaringan yang andal. Dalam penerapan cloud, pusat data umumnya memetakan ke wilayah cloud.
  • Sebuah cluster mengacu pada kumpulan pusat data yang mendukung aplikasi yang sama. Kluster Cassandra dapat berjalan di satu lingkungan cloud atau pusat data fisik, atau didistribusikan di beberapa lokasi untuk ketahanan yang lebih baik dan pengurangan latensi

Sekarang kami telah mengonfirmasi konvensi penamaan kami, saatnya menyiapkan definisi. Contoh kami menggunakan GKE, tetapi prosesnya serupa untuk mesin Kubernetes lainnya. Ada tiga langkah. 

Langkah 1

Pertama, kita perlu menjalankan perintah kubectl yang mereferensikan file konfigurasi YAML. Ini menerapkan definisi manifes cass-operator ke cluster Kubernetes yang terhubung. Manifes adalah deskripsi objek API, yang mendeskripsikan status objek yang diinginkan, dalam hal ini, operator Cassandra Anda. Untuk satu set lengkap manifes khusus versi, lihat halaman GitHub ini.

Berikut adalah contoh perintah kubectl untuk cloud GKE yang menjalankan Kubernetes 1.16:

kubectl create -f //raw.githubusercontent.com/datastax/cass-operator/v1.3.0/docs/user/cass-operator-manifests-v1.16.yaml

Langkah 2

Perintah kubectl berikutnya menerapkan konfigurasi YAML yang mendefinisikan pengaturan penyimpanan yang akan digunakan untuk node Cassandra dalam sebuah cluster. Kubernetes menggunakan resource StorageClass sebagai lapisan abstraksi antara pod yang membutuhkan penyimpanan persisten dan sumber daya penyimpanan fisik yang dapat disediakan oleh cluster Kubernetes tertentu. Contoh tersebut menggunakan SSD sebagai jenis penyimpanan. Untuk opsi lainnya, lihat halaman GitHub ini. Berikut tautan langsung ke YAML yang diterapkan dalam konfigurasi penyimpanan, di bawah ini:

apiVersion: storage.k8s.io/v1

jenis: StorageClass

metadata:

  nama: penyimpanan server

penyedia: kubernetes.io/gce-pd

parameter:

  ketik: pd-ssd

  replikasi-type: tidak ada

volumeBindingMode: WaitForFirstConsumer

reclaimPolicy: Hapus

LANGKAH 3

Akhirnya, menggunakan kubectl lagi, kami menerapkan YAML yang mendefinisikan Pusat Data Cassandra kami.

# Berukuran untuk bekerja pada node pekerja 3 k8s dengan 1 inti / 4 GB RAM

# Lihat contoh tetangga-cassdc-full.yaml untuk dokumen untuk setiap parameter

apiVersion: cassandra.datastax.com/v1beta1

jenis: CassandraDatacenter

metadata:

  nama: dc1

spesifikasi:

  clusterName: cluster1

  serverType: cassandra

  serverVersion: "3.11.6"

  managementApiAuth:

    tidak aman: {}

  ukuran: 3

  storageConfig:

    cassandraDataVolumeClaimSpec:

      storageClassName: penyimpanan-server

      accessModes:

        - ReadWriteOnce

      sumber:

        permintaan:

          penyimpanan: 5Gi

  config:   

    cassandra-yaml:

      pengautentikasi: org.apache.cassandra.auth.PasswordAuthenticator

      authorizer: org.apache.cassandra.auth.CassandraAuthorizer

      role_manager: org.apache.cassandra.auth.CassandraRoleManager

    jvm-options:

      ukuran_mulai_awal: "800 juta"

      max_heap_size: "800M"

Contoh YAML ini adalah untuk gambar Apache Cassandra 3.11.6 open-source, dengan tiga node di satu rak, di cluster Kubernetes. Ini tautan langsungnya. Ada satu set lengkap konfigurasi pusat data khusus database di halaman GitHub ini.

Pada titik ini, Anda akan dapat melihat sumber daya yang telah Anda buat. Ini akan terlihat di konsol cloud Anda. Di Google Cloud Console, misalnya, Anda dapat mengklik tab Clusters untuk melihat apa yang sedang berjalan dan melihat beban kerjanya. Ini adalah unit komputasi yang dapat diterapkan yang dapat dibuat dan dikelola di cluster Kubernetes.

Untuk terhubung ke database Cassandra yang di-deploy sendiri, Anda dapat menggunakan cqlsh, shell baris perintah, dan membuat kueri Cassandra menggunakan CQL dari dalam cluster Kubernetes Anda. Setelah diautentikasi, Anda akan dapat mengirimkan perintah DDL untuk membuat atau mengubah tabel, dll., Dan memanipulasi data dengan instruksi DML, seperti menyisipkan dan memperbarui di CQL.

Apa selanjutnya untuk Cassandra dan Kubernetes?

Meskipun ada beberapa operator yang tersedia untuk Apache Cassandra, ada kebutuhan akan operator yang umum. Perusahaan yang terlibat dalam komunitas Cassandra, seperti Sky, Orange, DataStax, dan Instaclustr berkolaborasi untuk membentuk operator umum untuk Apache Cassandra di Kubernetes. Upaya kolaborasi ini sejalan dengan operator sumber terbuka yang ada, dan tujuannya adalah untuk menyediakan perusahaan dan pengguna tumpukan skala keluar yang konsisten untuk komputasi dan data.

Seiring waktu, perpindahan ke aplikasi cloud-native juga harus didukung dengan data cloud-native. Ini akan mengandalkan lebih banyak otomatisasi, didorong oleh alat seperti Kubernetes. Dengan menggunakan Kubernetes dan Cassandra secara bersamaan, Anda dapat melakukan pendekatan terhadap data cloud-native.

Untuk mempelajari lebih lanjut tentang Cassandra dan Kubernetes, silakan kunjungi //www.datastax.com/dev/kubernetes. Untuk informasi lebih lanjut tentang menjalankan Cassandra di cloud, lihat DataStax Astra. 

Patrick McFadin adalah VP hubungan pengembang di DataStax, di mana dia memimpin tim yang mengabdikan diri untuk menyukseskan pengguna Apache Cassandra. Dia juga bekerja sebagai penginjil utama untuk Apache Cassandra dan konsultan untuk DataStax, di mana dia membantu membangun beberapa penerapan terbesar dan menarik dalam produksi. Sebelumnya di DataStax, dia adalah kepala arsitek di Hobsons dan Oracle DBA / developer selama lebih dari 15 tahun.

-

Forum Teknologi Baru menyediakan tempat untuk mengeksplorasi dan mendiskusikan teknologi perusahaan yang sedang berkembang secara mendalam dan luas. Pemilihannya subjektif, berdasarkan pilihan teknologi yang kami yakini penting dan paling menarik bagi pembaca. tidak menerima jaminan pemasaran untuk publikasi dan berhak untuk mengedit semua konten yang dikontribusikan. Kirim semua pertanyaan ke [email protected]