Menerapkan cluster CockroachDB di Amazon EKS dengan menggunakan Terraform - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menerapkan cluster CockroachDB di Amazon EKS dengan menggunakan Terraform

Sandip Gangapadhyay dan Kalyan Senthilnathan, Amazon Web Services

Ringkasan

Pola ini menyediakan modul HashiCorp Terraform untuk menerapkan cluster CockroachDB multi-node di Amazon Elastic Kubernetes Service (Amazon EKS) dengan menggunakan operator CockroachDB. CockroachDB adalah database SQL terdistribusi yang menyediakan sharding horizontal otomatis, ketersediaan tinggi, dan kinerja yang konsisten di seluruh cluster yang didistribusikan secara geografis. Pola ini menggunakan Amazon EKS sebagai platform Kubernetes yang dikelola dan mengimplementasikan cert-manager untuk komunikasi node yang diamankan TLS. Ini juga menggunakan Network Load Balancer untuk distribusi lalu lintas dan menciptakan CockroachDB StatefulSetsdengan pod yang secara otomatis mereplikasi data untuk toleransi kesalahan dan kinerja.

Audiens yang dituju

Untuk menerapkan pola ini, kami sarankan Anda terbiasa dengan hal-hal berikut:

  • HashiCorp Konsep dan infrastruktur Terraform sebagai praktik kode (IAc)

  • Layanan AWS, khususnya Amazon EKS

  • Dasar-dasar Kubernetes, termasuk, operator StatefulSets, dan konfigurasi layanan

  • Database SQL terdistribusi

  • Konsep keamanan, seperti manajemen sertifikat TLS.

  • DevOps praktik, CI/CD alur kerja, dan otomatisasi infrastruktur

Prasyarat dan batasan

Prasyarat

Batasan

Versi produk

  • CockroachDB versi 22.2.2

Arsitektur

Arsitektur target

Diagram berikut menunjukkan penyebaran CockroachDB yang sangat tersedia di tiga AWS Availability Zone dalam virtual private cloud (VPC). Pod CockroachDB dikelola melalui Amazon EKS. Arsitektur menggambarkan bagaimana pengguna mengakses database melalui Network Load Balancer, yang mendistribusikan lalu lintas ke pod CockroachDB. Pod berjalan di instans Amazon Elastic Compute Cloud (Amazon EC2) di setiap Availability Zone, yang memberikan ketahanan dan toleransi kesalahan.

Penyebaran CockroachDB yang sangat tersedia di tiga AWS Availability Zone dalam VPC.

Sumber daya dibuat

Menerapkan modul Terraform yang digunakan dalam pola ini menciptakan sumber daya berikut:

  1. Network Load Balancer - Sumber daya ini berfungsi sebagai titik masuk untuk permintaan klien dan mendistribusikan lalu lintas secara merata di seluruh instance CockroachDB.

  2. CockroachDB StatefulSet — StatefulSet Mendefinisikan keadaan yang diinginkan dari penyebaran CockroachDB dalam cluster Amazon EKS. Ini mengelola penyebaran, penskalaan, dan pembaruan pod CockroachDB yang dipesan.

  3. Pod CockroachDB — Pod ini adalah contoh dari CockroachDB yang berjalan sebagai kontainer di dalam pod Kubernetes. Pod ini menyimpan dan mengelola data di seluruh cluster terdistribusi.

  4. Database CockroachDB — Ini adalah database terdistribusi yang dikelola oleh CockroachDB, mencakup beberapa pod. Ini mereplikasi data untuk ketersediaan tinggi, toleransi kesalahan, dan kinerja.

Alat

Layanan AWS

Alat-alat lainnya

  • HashiCorp Terraform adalah alat infrastruktur sebagai kode (IAc) yang membantu Anda menggunakan kode untuk menyediakan dan mengelola infrastruktur dan sumber daya cloud.

  • kubectl adalah antarmuka baris perintah yang membantu Anda menjalankan perintah terhadap klaster Kubernetes.

Repositori kode

Kode untuk pola ini tersedia di cluster GitHub Deploy a CockroachDB di Amazon EKS menggunakan repositori Terraform. Repositori kode berisi file dan folder berikut untuk Terraform:

  • modulesfolder - Folder ini berisi modul Terraform untuk CockroachDB

  • mainfolder - Folder ini berisi modul root yang memanggil modul anak CockroachDB untuk membuat cluster database CockroachDB.

Praktik terbaik

  • Jangan mengurangi hingga kurang dari tiga node. Ini dianggap sebagai anti-pola pada CockroachDB dan dapat menyebabkan kesalahan. Untuk informasi selengkapnya, lihat Penskalaan Cluster dalam dokumentasi CockroachDB.

  • Terapkan penskalaan otomatis Amazon EKS dengan menggunakan Karpernter atau Cluster Autoscaler. Hal ini memungkinkan cluster CockroachDB untuk skala horizontal dan node baru secara otomatis. Untuk informasi selengkapnya, lihat Komputasi klaster skala dengan Karpenter dan Cluster Autoscaler di dokumentasi Amazon EKS.

    catatan

    Karena aturan penjadwalan podAntiAffinity Kubernetes, hanya satu pod CockroachDB yang dapat dijadwalkan dalam satu node Amazon EKS.

  • Untuk praktik terbaik keamanan Amazon EKS, lihat Praktik Terbaik untuk Keamanan dalam dokumentasi Amazon EKS.

  • Untuk praktik terbaik kinerja SQL untuk CockroachDB, lihat Praktik Terbaik Kinerja SQL dalam dokumentasi CockroachDB.

  • Untuk informasi selengkapnya tentang menyiapkan backend jarak jauh Amazon Simple Storage Service (Amazon S3) untuk file status Terraform, lihat Amazon S3 di dokumentasi Terraform.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Kloning repositori kode.

Masukkan perintah berikut untuk mengkloning repositori:

git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git
DevOps insinyur, Git

Perbarui variabel Terraform.

  1. Masukkan perintah berikut untuk menavigasi ke folder utama di repositori kloning:

    cd crdb-cluster-eks-terraform/main
  2. Buka file variabel.tf.

  3. Konfigurasikan nilai default untuk variabel berikut:

    • region— Masukkan target Wilayah AWS

    • eks_cluster_name— Masukkan nama untuk kluster Amazon EKS target

    • number_of_nodes— Masukkan jumlah node yang akan digunakan

  4. Simpan dan tutup file variabel.tf.

DevOps insinyur, Terraform
TugasDeskripsiKeterampilan yang dibutuhkan

Menyebarkan infrastruktur.

  1. Masukkan perintah berikut untuk menginisialisasi penerapan Terraform:

    terraform init
  2. Masukkan perintah berikut untuk menghasilkan rencana eksekusi:

    terraform plan
  3. Tinjau rencana, dan validasi sumber daya dan komponen infrastruktur yang akan dibuat.

  4. Masukkan perintah berikut untuk menyebarkan infrastruktur:

    terraform apply
  5. Saat diminta, masukkan ya untuk mengonfirmasi penerapan.

  6. Tunggu hingga penerapan selesai.

DevOps insinyur, Terraform
TugasDeskripsiKeterampilan yang dibutuhkan

Verifikasi pembuatan sumber daya.

  1. Masukkan perintah berikut untuk mengatur konteks Amazon EKS menggunakan AWS CLI:

    aws eks update-kubeconfig —name <eks_cluster_name>
  2. Masukkan perintah berikut untuk memverifikasi jumlah pod yang menggunakan CockroachDB:

    kubectl get pods -n <namespace>

    Berikut ini adalah contoh output.

    NAME READY STATUS RESTARTS AGE cockroach-operator-655fbf7847-zn9v8 1/1 Running 0 30m cockroachdb-0 1/1 Running 0 24m cockroachdb-1 1/1 Running 0 24m cockroachdb-2 1/1 Running 0 24m
  3. Verifikasi bahwa jumlah pod sesuai dengan nilai yang Anda tentukan dalam file variable.tf.

DevOps insinyur

(Opsional) Skala naik atau turun.

  1. Dalam file variabel.tf, tambah atau kurangi jumlah node dan kemudian simpan file.

  2. Ulangi langkah-langkah untuk menerapkan infrastruktur melalui Terraform. Terraform menambahkan atau menghapus pod.

  3. Ulangi langkah-langkah untuk memverifikasi jumlah pod yang menggunakan Cockroach DB. Misalnya, jika Anda meningkatkan jumlah node dari tiga menjadi empat, Anda sekarang akan melihat empat pod berjalan.

DevOps insinyur, Terraform
TugasDeskripsiKeterampilan yang dibutuhkan

Hapus infrastruktur.

Menskalakan node ke 0 akan mengurangi biaya komputasi. Namun, Anda masih akan dikenakan biaya untuk volume Amazon EBS persisten yang dibuat oleh modul ini. Untuk menghilangkan biaya penyimpanan, ikuti langkah-langkah berikut untuk menghapus semua volume:

  1. Masukkan perintah berikut untuk menghapus infrastruktur:

    terraform destroy
  2. Saat diminta, masukkan ya untuk mengonfirmasi.

Terraform

Pemecahan masalah

IsuSolusi

Kesalahan memvalidasi kredensyal penyedia

Saat Anda menjalankan Terraform apply atau destroy perintah, Anda mungkin mengalami kesalahan berikut:

Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.

Kesalahan ini disebabkan oleh kedaluwarsa token keamanan untuk kredensil yang digunakan dalam konfigurasi mesin lokal Anda. Untuk petunjuk tentang cara mengatasi kesalahan, lihat Mengatur dan melihat pengaturan konfigurasi dalam AWS CLI dokumentasi.

Pod CockroachDB dalam status tertunda

  1. Karena aturan penjadwalan podAntiAffinity Kubernetes, hanya satu pod CockroachDB yang dapat dijadwalkan dalam satu node Amazon EKS. Jika jumlah pod CockroachDB melebihi jumlah node Amazon EKS yang tersedia, maka pod CockroachDB mungkin dalam status tertunda. Dalam hal ini, Anda perlu menerapkan Cluster Autoscaler atau Karpenter sehingga skala node Amazon EKS secara otomatis. Untuk informasi selengkapnya, lihat Komputasi klaster skala dengan Karpenter dan Cluster Autoscaler.

  2. Periksa apakah node pekerja Kubernetes memiliki node=cockroachdb label dengan memasukkan perintah berikut:

    kubectl get nodes --show-labels

    Jika tidak, Anda perlu memastikan bahwa semua node pekerja diberi label dengan benar. Untuk informasi selengkapnya, lihat Mengedit konfigurasi grup node dalam dokumentasi Amazon EKS.

Sumber daya terkait

Lampiran

Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip