Panduan ini menunjukkan cara menggunakan operator Confluent for Kubernetes (CFK) untuk men-deploy cluster Apache Kafka di Google Kubernetes Engine (GKE).
Kafka adalah sistem pesan open source yang terdistribusi untuk menangani data streaming real-time, throughput tinggi, dan volume tinggi. Anda dapat menggunakan Kafka untuk membangun pipeline data streaming yang memindahkan data dengan andal ke berbagai sistem dan aplikasi untuk pemrosesan serta analisis.
Panduan ini ditujukan untuk para administrator platform, arsitek cloud, dan profesional operasi yang ingin men-deploy cluster Kafka di GKE.
Anda juga dapat menggunakan operator CFK untuk men-deploy komponen Confluent Platform lain, seperti pusat Confluent Control berbasis web, Schema Registry, atau KsqlDB. Namun, panduan ini hanya berfokus pada deployment Kafka.
Tujuan
- Merencanakan dan men-deploy infrastruktur GKE untuk Apache Kafka
- Men-deploy dan mengonfigurasi operator CFK
- Konfigurasikan Apache Kafka menggunakan operator CFK untuk memastikan ketersediaan, keamanan, kemampuan observasi, dan performa
Manfaat
CFK menawarkan manfaat berikut:
- Pembaruan berkelanjutan otomatis untuk perubahan konfigurasi.
- Upgrade berkelanjutan otomatis tanpa memengaruhi ketersediaan Kafka.
- Jika terjadi kegagalan, CFK akan memulihkan Kafka Pod dengan ID broker Kafka, konfigurasi, dan volume penyimpanan persisten yang sama.
- Awareness rak otomatis untuk menyebarkan replika partisi di berbagai rak (atau zona), yang meningkatkan ketersediaan broker Kafka dan membatasi risiko kehilangan data.
- Dukungan untuk ekspor metrik gabungan ke Prometheus.
Arsitektur deployment
Setiap partisi data dalam cluster Kafka memiliki satu broker leader dan dapat memiliki satu atau beberapa broker pengikut. Broker pemimpin menangani semua operasi baca dan tulis ke partisi. Setiap broker pengikut secara pasif mereplikasi broker pemimpin.
Dalam penyiapan Kafka standar, Anda juga menggunakan layanan open source yang disebut ZooKeeper untuk mengoordinasikan cluster Kafka. Layanan ini membantu dengan memilih pemimpin di antara broker dan memicu failover jika terjadi kegagalan.
Anda juga dapat men-deploy konfigurasi Kafka tanpa Zookeeper dengan mengaktifkan Mode KRaft, tetapi metode ini dianggap tidak siap produksi karena kurangnya dukungan untukResource KafkaTopic, dan autentikasi kredensial.
Ketersediaan dan pemulihan dari bencana (disaster recovery)
Tutorial ini menggunakan node pool dan zona yang terpisah untuk cluster Kafka dan ZooKeeper guna memastikan ketersediaan tinggi dan mempersiapkan proses pemulihan dari bencana (disaster recovery).
Cluster Kubernetes yang sangat tersedia di Google Cloud mengandalkan cluster regional yang mencakup beberapa node dan zona ketersediaan. Konfigurasi ini meningkatkan fault tolerance, skalabilitas, dan redundansi geografis. Dengan konfigurasi ini, Anda juga dapat melakukan update dan pemeliharaan berkelanjutan sekaligus memberikan SLA untuk waktu beroperasi dan ketersediaan. Untuk mengetahui informasi selengkapnya, lihat Cluster regional.
Diagram deployment
Diagram berikut menunjukkan cluster Kafka yang berjalan pada beberapa node dan zona dalam cluster GKE:
Dalam diagram, Kafka StatefulSet di-deploy di tiga node di tiga zona berbeda. Anda dapat mengontrol konfigurasi ini dengan menetapkan
aturan
afinitas
dan
penyebaran topologi
Pod yang diperlukan pada Kafka
spesifikasi resource kustom.
Jika satu zona gagal menggunakan konfigurasi yang direkomendasikan, GKE akan menjadwalkan ulang Pod pada node baru dan mereplikasi data dari replika yang lain, bagi Kafka dan Zookeeper.
Diagram berikut menunjukkan StatefulSet
ZooKeeper yang di-deploy ke tiga node,
di tiga zona berbeda:
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Backup for GKE, Compute Engine, Identity and Access Management, and Resource Manager APIs:
gcloud services enable compute.googleapis.com
iam.googleapis.com container.googleapis.com gkebackup.googleapis.com cloudresourcemanager.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE, Backup for GKE, Compute Engine, Identity and Access Management, and Resource Manager APIs:
gcloud services enable compute.googleapis.com
iam.googleapis.com container.googleapis.com gkebackup.googleapis.com cloudresourcemanager.googleapis.com -
Grant roles to your user account. Run the following command once for each of the following IAM roles:
role/storage.objectViewer, role/logging.logWriter, roles/container.clusterAdmin, role/container.serviceAgent, roles/iam.serviceAccountAdmin, roles/serviceusage.serviceUsageAdmin, roles/iam.serviceAccountAdmin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
- Replace
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Menyiapkan lingkungan
Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal dengan software
yang Anda perlukan untuk tutorial ini, termasuk
kubectl
,
gcloud CLI .Helm ,
dan
Terraform singkat ini.
Untuk menyiapkan lingkungan Anda dengan Cloud Shell, ikuti langkah-langkah berikut:
Luncurkan sesi Cloud Shell dari konsol Google Cloud, dengan mengklik Aktifkan Cloud Shell di konsol Google Cloud. Tindakan ini akan meluncurkan sesi di panel bawah konsol Google Cloud.
Menetapkan variabel lingkungan:
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=kafka export REGION=us-central1
Ganti
PROJECT_ID
: Google Cloud Anda dengan project ID.Buat clone repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Ubah ke direktori kerja:
cd kubernetes-engine-samples/streaming
Membuat infrastruktur cluster
Di bagian ini, Anda akan menjalankan skrip Terraform untuk membuat cluster GKE regional pribadi yang sangat tersedia. Langkah-langkah berikut memungkinkan akses publik ke bidang kontrol. Untuk membatasi akses, buat cluster pribadi.
Anda dapat menginstal operator menggunakan cluster Standard atau Autopilot.
Standard
Diagram berikut menunjukkan cluster GKE Standard regional pribadi yang di-deploy ke tiga zona yang berbeda:
Untuk men-deploy infrastruktur ini, jalankan perintah berikut dari Cloud Shell:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=kafka/terraform/gke-standard init
terraform -chdir=kafka/terraform/gke-standard apply -var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
Saat diminta, ketik yes
. Anda mungkin perlu menunggu beberapa menit agar perintah ini selesai
dan cluster akan menampilkan status siap.
Terraform membuat resource berikut:
- Jaringan VPC dan subnet pribadi untuk node Kubernetes.
- Router untuk mengakses internet melalui NAT.
- Cluster GKE pribadi di region
us-central1
. - 2 node pool dengan penskalaan otomatis aktif (1-2 node per zona, minimum 1 node per zona)
ServiceAccount
dengan izin logging dan pemantauan.- Pencadangan untuk GKE pada pemulihan dari bencana (disaster recovery).
- Google Cloud Managed Service for Prometheus untuk pemantauan cluster.
Outputnya mirip dengan hal berikut ini:
...
Apply complete! Resources: 14 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials kafka-cluster --region us-central1"
Autopilot
Diagram berikut menunjukkan cluster GKE Autopilot regional pribadi:
Untuk men-deploy infrastruktur, jalankan perintah berikut dari Cloud Shell:
export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token)
terraform -chdir=kafka/terraform/gke-autopilot init
terraform -chdir=kafka/terraform/gke-autopilot apply -var project_id=${PROJECT_ID} \
-var region=${REGION} \
-var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
Saat diminta, ketik yes
. Anda mungkin perlu menunggu beberapa menit agar perintah ini selesai
dan cluster akan menampilkan status siap.
Terraform membuat resource berikut:
- Jaringan VPC dan subnet pribadi untuk node Kubernetes.
- Router untuk mengakses internet melalui NAT.
- Cluster GKE pribadi di region
us-central1
. ServiceAccount
dengan izin logging dan pemantauan- Google Cloud Managed Service for Prometheus untuk pemantauan cluster.
Outputnya mirip dengan hal berikut ini:
...
Apply complete! Resources: 12 added, 0 changed, 0 destroyed.
Outputs:
kubectl_connection_command = "gcloud container clusters get-credentials kafka-cluster --region us-central1"
Hubungkan ke cluster
Konfigurasi kubectl
untuk berkomunikasi dengan cluster:
gcloud container clusters get-credentials ${KUBERNETES_CLUSTER_PREFIX}-cluster --region ${REGION}
Men-deploy operator CFK ke cluster Anda
Di bagian ini, Anda akan men-deploy operator Confluent for Kubernetes (CFK) menggunakan diagram Helm, lalu men-deploy cluster Kafka.
Tambahkan repositori Confluent Helm Chart:
helm repo add confluentinc https://packages.confluent.io/helm
Tambahkan namespace untuk operator CFK dan cluster Kafka:
kubectl create ns kafka
Deploy operator cluster CFK menggunakan Helm:
helm install confluent-operator confluentinc/confluent-for-kubernetes -n kafka
Untuk memungkinkan CFK mengelola resource di semua namespace, tambahkan parameter
--set-namespaced=false
ke perintah Helm.Pastikan operator Confluent telah berhasil di-deploy menggunakan Helm:
helm ls -n kafka
Outputnya mirip dengan hal berikut ini:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION confluent-operator kafka 1 2023-07-07 10:57:45.409158 +0200 CEST deployed confluent-for-kubernetes-0.771.13 2.6.0
Men-deploy Kafka
Di bagian ini, Anda akan men-deploy Kafka dalam konfigurasi dasar, lalu mencoba berbagai skenario konfigurasi lanjutan untuk memenuhi persyaratan ketersediaan, keamanan, dan kemampuan observasi.
Konfigurasi dasar
Konfigurasi dasar untuk instance Kafka mencakup komponen berikut:
- Tiga replika broker Kafka, dengan minimal dua replika yang tersedia diperlukan untuk konsistensi cluster.
- Tiga replika node ZooKeeper, yang membentuk cluster.
- Dua pemroses Kafka: satu tanpa autentikasi, dan satu lagi menggunakan autentikasi TLS dengan sertifikat yang dihasilkan oleh CFK.
- Java MaxHeapSize dan MinHeapSize ditetapkan ke 4 GB untuk Kafka.
- Alokasi resource CPU sebesar 1 permintaan CPU dan 2 batas CPU, serta permintaan dan batas memori 5 GB untuk Kafka (4 GB untuk layanan utama dan 0,5 GB untuk pengekspor metrik) dan 3 GB untuk Zookeeper (2 GB untuk layanan utama dan 0,5 GB untuk pengekspor metrik).
- Penyimpanan sebesar 100 GB dialokasikan ke setiap Pod menggunakan storageClass
premium-rwo
, 100 untuk Kafka Data, dan 90/10 untuk Zookeeper Data/Log. - Toleransi, nodeAffinities, dan podAntiAffinities dikonfigurasi untuk setiap workload, dan memastikan distribusi yang tepat di seluruh node, dengan memanfaatkan node pool masing-masing dan berbagai zona.
- Komunikasi di dalam cluster diberi keamanan dari sertifikat yang ditandatangani sendiri menggunakan Certificate Authority yang Anda berikan.
Konfigurasi ini menampilkan penyiapan minimal yang diperlukan untuk membuat cluster Kafka siap produksi. Bagian berikut menunjukkan konfigurasi kustom yang dapat menangani berbagai aspek seperti keamanan cluster, Daftar Kontrol Akses (ACL), pengelolaan topik, pengelolaan sertifikat, dan banyak lagi.
Membuat cluster Kafka dasar
Buat pasangan CA:
openssl genrsa -out ca-key.pem 2048 openssl req -new -key ca-key.pem -x509 \ -days 1000 \ -out ca.pem \ -subj "/C=US/ST=CA/L=Confluent/O=Confluent/OU=Operator/CN=MyCA"
Confluent untuk Kubernetes menyediakan sertifikat yang dihasilkan secara otomatis untuk komponen Platform Confluent agar digunakan untuk enkripsi jaringan TLS. Anda harus membuat dan menyediakan Certificate Authority (CA).
Buat Secret Kubernetes untuk certificate authority:
kubectl create secret tls ca-pair-sslcerts --cert=ca.pem --key=ca-key.pem -n kafka
Nama Secret sudah sudah ditentukan
Buat cluster Kafka baru menggunakan konfigurasi dasar:
kubectl apply -n kafka -f kafka-confluent/manifests/01-basic-cluster/my-cluster.yaml
Perintah ini membuat resource kustom Kafka dan resource kustom Zookeeper dari operator CFK yang mencakup batas dan permintaan CPU dan memori, permintaan penyimpanan blok, serta taint dan afinitas untuk mendistribusikan Pod yang disediakan di seluruh node Kubernetes.
Tunggu beberapa menit selagi Kubernetes memulai workload yang diperlukan:
kubectl wait pods -l app=my-cluster --for condition=Ready --timeout=300s -n kafka
Pastikan workload Kafka telah dibuat:
kubectl get pod,svc,statefulset,deploy,pdb -n kafka
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE pod/confluent-operator-864c74d4b4-fvpxs 1/1 Running 0 49m pod/my-cluster-0 1/1 Running 0 17m pod/my-cluster-1 1/1 Running 0 17m pod/my-cluster-2 1/1 Running 0 17m pod/zookeeper-0 1/1 Running 0 18m pod/zookeeper-1 1/1 Running 0 18m pod/zookeeper-2 1/1 Running 0 18m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/confluent-operator ClusterIP 10.52.13.164 <none> 7778/TCP 49m service/my-cluster ClusterIP None <none> 9092/TCP,8090/TCP,9071/TCP,7203/TCP,7777/TCP,7778/TCP,9072/TCP 17m service/my-cluster-0-internal ClusterIP 10.52.2.242 <none> 9092/TCP,8090/TCP,9071/TCP,7203/TCP,7777/TCP,7778/TCP,9072/TCP 17m service/my-cluster-1-internal ClusterIP 10.52.7.98 <none> 9092/TCP,8090/TCP,9071/TCP,7203/TCP,7777/TCP,7778/TCP,9072/TCP 17m service/my-cluster-2-internal ClusterIP 10.52.4.226 <none> 9092/TCP,8090/TCP,9071/TCP,7203/TCP,7777/TCP,7778/TCP,9072/TCP 17m service/zookeeper ClusterIP None <none> 2181/TCP,7203/TCP,7777/TCP,3888/TCP,2888/TCP,7778/TCP 18m service/zookeeper-0-internal ClusterIP 10.52.8.52 <none> 2181/TCP,7203/TCP,7777/TCP,3888/TCP,2888/TCP,7778/TCP 18m service/zookeeper-1-internal ClusterIP 10.52.12.44 <none> 2181/TCP,7203/TCP,7777/TCP,3888/TCP,2888/TCP,7778/TCP 18m service/zookeeper-2-internal ClusterIP 10.52.12.134 <none> 2181/TCP,7203/TCP,7777/TCP,3888/TCP,2888/TCP,7778/TCP 18m NAME READY AGE statefulset.apps/my-cluster 3/3 17m statefulset.apps/zookeeper 3/3 18m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/confluent-operator 1/1 1 1 49m NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE poddisruptionbudget.policy/my-cluster N/A 1 1 17m poddisruptionbudget.policy/zookeeper N/A 1 1 18m
Operator membuat resource berikut:
- Dua StatefulSets untuk Kafka dan ZooKeeper.
- Tiga Pod untuk replika broker Kafka.
- Tiga Pod untuk replika ZooKeeper.
- Dua resource
PodDisruptionBudget
, memastikan maksimum satu replika yang tidak tersedia untuk konsistensi cluster. my-cluster
Layanan yang berfungsi sebagai server bootstrap untuk klien Kafka yang terhubung dari dalam cluster Kubernetes. Semua pemroses Kafka internal tersedia di Layanan ini.zookeeper
Layanan yang memungkinkan broker Kafka terhubung ke node ZooKeeper sebagai klien.
Autentikasi dan pengelolaan pengguna
Bagian ini menunjukkan cara mengaktifkan autentikasi dan otorisasi untuk mengamankan Pemroses Kafka dan berbagi kredensial dengan klien.
Confluent untuk Kubernetes mendukung berbagai metode autentikasi untuk Kafka, seperti:
- Autentikasi SASL/PLAIN: Klien menggunakan nama pengguna dan sandi untuk autentikasi. Nama pengguna dan sandi disimpan di sisi server dalam secret Kubernetes.
- SASL/PLAIN dengan autentikasi LDAP: Klien menggunakan nama pengguna dan sandi untuk autentikasi. Kredensial disimpan di server LDAP.
- Autentikasi mTLS: Klien menggunakan sertifikat TLS untuk autentikasi.
Batasan
- CFK tidak menyediakan Resource Kustom untuk pengelolaan pengguna. Namun, Anda dapat menyimpan kredensial di Secret dan merujuk ke Secret di spesifikasi pemroses.
- Meskipun tidak ada Resource Kustom untuk mengelola ACL secara langsung, Confluent for Kubernetes resmi memberikan panduan tentang cara mengonfigurasi ACL menggunakan Kafka CLI.
Membuat pengguna
Bagian ini menunjukkan cara men-deploy operator CFK sebagai demonstrasi dari kemampuan pengelolaan pengguna, termasuk:
- Cluster Kafka dengan autentikasi berbasis sandi (SASL/PLAIN) yang diaktifkan di salah satu pemroses
KafkaTopic
dengan 3 replika- Kredensial pengguna dengan izin baca dan tulis
Buat Secret dengan kredensial pengguna:
export USERNAME=my-user export PASSWORD=$(openssl rand -base64 12) kubectl create secret generic my-user-credentials -n kafka \ --from-literal=plain-users.json="{\"$USERNAME\":\"$PASSWORD\"}"
Kredensial harus disimpan dalam format berikut:
{ "username1": "password1", "username2": "password2", ... "usernameN": "passwordN" }
Konfigurasikan cluster Kafka untuk menggunakan pemroses dengan autentikasi SCRAM-SHA-512, autentikasi berbasis sandi pada port 9094:
kubectl apply -n kafka -f kafka-confluent/manifests/02-auth/my-cluster.yaml
Siapkan topik dan Pod klien untuk berinteraksi dengan cluster Kafka serta jalankan perintah Kafka:
kubectl apply -n kafka -f kafka-confluent/manifests/02-auth/my-topic.yaml kubectl apply -n kafka -f kafka-confluent/manifests/02-auth/kafkacat.yaml
GKE memasang
my-user-credentials
Secret ke Pod klien sebagai Volume.Saat Pod klien sudah siap, hubungkan ke Pod dan mulai buat serta gunakan pesan menggunakan kredensial yang diberikan:
kubectl wait pod kafkacat --for=condition=Ready --timeout=300s -n kafka kubectl exec -it kafkacat -n kafka -- /bin/sh
Buat pesan menggunakan kredensial
my-user
, lalu gunakan pesan untuk memverifikasi tanda terimanya.export USERNAME=$(cat /my-user/plain-users.json|cut -d'"' -f 2) export PASSWORD=$(cat /my-user/plain-users.json|cut -d'"' -f 4) echo "Message from my-user" |kcat \ -b my-cluster.kafka.svc.cluster.local:9094 \ -X security.protocol=SASL_SSL \ -X sasl.mechanisms=PLAIN \ -X sasl.username=$USERNAME \ -X sasl.password=$PASSWORD \ -t my-topic -P kcat -b my-cluster.kafka.svc.cluster.local:9094 \ -X security.protocol=SASL_SSL \ -X sasl.mechanisms=PLAIN \ -X sasl.username=$USERNAME \ -X sasl.password=$PASSWORD \ -t my-topic -C
Outputnya mirip dengan hal berikut ini:
Message from my-user % Reached end of topic my-topic [1] at offset 1 % Reached end of topic my-topic [2] at offset 0 % Reached end of topic my-topic [0] at offset 0
Ketik
CTRL+C
untuk menghentikan proses penggunaan. Jika Anda mendapatkan errorConnect refused
, tunggu beberapa menit lalu coba lagi.Keluar dari shell Pod
exit
Cadangan dan pemulihan dari bencana (disaster recovery)
Dengan operator Confluent, Anda dapat menerapkan strategi pencadangan yang efisien dengan mengikuti pola tertentu.
Anda dapat menggunakan Pencadangan untuk GKE untuk mencadangkan:
- Manifes resource Kubernetes.
- Resource kustom Confluent API dan definisinya yang diekstrak dari server Kubernetes API cluster yang sedang dicadangan.
- Volume yang sesuai dengan resource PersistentVolumeClaim ditemukan dalam manifes.
Untuk mengetahui informasi selengkapnya tentang cara mencadangkan dan memulihkan cluster Kafka menggunakan Pencadangan untuk GKE, lihat Persiapan pemulihan dari bencana (disaster recovery).
Anda juga dapat melakukan pencadangan manual untuk cluster Kafka. Anda harus mencadangkan:
- Konfigurasi Kafka, yang mencakup semua resource kustom
Confluent API seperti
KafkaTopics
atauConnect
- Data, yang disimpan di PersistentVolumes pada broker Kafka
Dengan menyimpan manifes resource Kubernetes, termasuk konfigurasi Confluent, di repositori Git, Anda tidak perlu melakukan pencadangan terpisah untuk konfigurasi Kafka karena resource dapat diterapkan kembali ke cluster Kubernetes baru jika diperlukan.
Untuk mengamankan pemulihan data Kafka jika instance server Kafka, atau
cluster Kubernetes tempat Kafka di-deploy, hilang, sebaiknya Anda mengonfigurasi
kelas penyimpanan Kubernetes yang digunakan untuk volume penyediaan bagi broker
Kafka dengan opsi reclaimPolicy
ditetapkan ke Retain
. Sebaiknya Anda
juga mengambil
snapshot
dari volume broker Kafka.
Manifes berikut menjelaskan StorageClass yang menggunakan reclaimPolicy
opsi Retain
:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: premium-rwo-retain
...
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
Contoh berikut menunjukkan StorageClass yang ditambahkan ke spec
pada
resource kustom cluster Kafka:
...
spec:
...
dataVolumeCapacity: 100Gi
storageClass:
name: premium-rwo-retain
Dengan konfigurasi ini, PersistentVolume yang disediakan menggunakan kelas penyimpanan tidak akan dihapus meskipun PersistentVolumeClaim yang berkaitan dihapus.
Untuk memulihkan instance Kafka di cluster Kubernetes baru menggunakan data instance broker dan konfigurasi yang ada:
- Terapkan resource kustom Confluent yang sudah ada (
Kafka
,KafkaTopic
,Zookeeper
, dll.) ke cluster Kubernetes baru - Update PersistentVolumeClaims dengan nama instance broker Kafka yang baru
ke PersistentVolumes lama menggunakan properti
spec.volumeName
pada PersistentVolumeClaim.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Menghapus resource satu per satu
Jika Anda telah menggunakan project yang sudah ada dan tidak ingin menghapusnya, hapus resource individual tersebut.
Menetapkan variabel lingkungan:
export PROJECT_ID=PROJECT_ID export KUBERNETES_CLUSTER_PREFIX=kafka export REGION=us-central1
Jalankan perintah
terraform destroy
:export GOOGLE_OAUTH_ACCESS_TOKEN=$(gcloud auth print-access-token) terraform -chdir=kafka/terraform/FOLDER destroy -var project_id=${PROJECT_ID} \ -var region=${REGION} \ -var cluster_prefix=${KUBERNETES_CLUSTER_PREFIX}
Ganti
FOLDER
dengangke-autopilot
ataugke-standard
.Saat diminta, ketik
yes
.Temukan semua disk yang tidak terpasang:
export disk_list=$(gcloud compute disks list --filter="-users:* AND labels.name=${KUBERNETES_CLUSTER_PREFIX}-cluster" --format "value[separator=|](name,zone)")
Hapus disk:
for i in $disk_list; do disk_name=$(echo $i| cut -d'|' -f1) disk_zone=$(echo $i| cut -d'|' -f2|sed 's|.*/||') echo "Deleting $disk_name" gcloud compute disks delete $disk_name --zone $disk_zone --quiet done
Langkah berikutnya
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.