Panduan ini akan menunjukkan cara menggunakan operator Strimzi untuk men-deploy cluster Apache Kafka.
Kafka adalah sistem fitur pesan terdistribusi dan open source yang dirancang untuk menangani data streaming real-time, bervolume tinggi, dan memiliki throughput tinggi. Platform ini memungkinkan Anda membangun pipeline data streaming untuk transfer data yang andal di berbagai sistem dan aplikasi, agar dapat mendukung tugas pemrosesan dan analisis.
Operator adalah ekstensi software yang menggunakan resource kustom untuk mengelola aplikasi dan komponen terkait. Untuk mempelajari lebih lanjut motivasi dalam menggunakan operator, lihat Pola operator di dokumentasi Kubernetes open source. Operator Strimzi menawarkan fleksibilitas dalam memilih opsi deployment serta memungkinkan Anda menggunakan taint dan toleransi Kubernetes untuk menjalankan Kafka pada node khusus.
Panduan ini ditujukan untuk para administrator platform, arsitek cloud, dan profesional operasi yang ingin men-deploy cluster Kafka di GKE.
Solusi ini menjadi titik awal yang bagus jika Anda ingin mempelajari cara men-deploy cluster Kafka menggunakan operator pihak ketiga untuk mengotomatiskan pengelolaan dan mengurangi error. Jika Anda lebih memilih kontrol operasional yang lebih terperinci, lihat Men-deploy cluster Kafka yang sangat tersedia di GKE.
Tujuan
- Merencanakan dan men-deploy infrastruktur GKE untuk Apache Kafka
- Men-deploy dan mengonfigurasi operator Strimzi
- Mengonfigurasi Apache Kafka menggunakan operator Strimzi
Manfaat
Penggunaan Strimzi memiliki manfaat berikut:
- Operator Strimzi memberikan pendekatan yang disederhanakan dan berbasis Kubernetes untuk mengelola cluster Kafka. Strimzi menggunakan resource kustom yang mewakili pengguna dan topik Kafka, sehingga pengelolaan cluster menjadi jauh lebih mudah dan sesuai dengan praktik terbaik Kubernetes.
- Strimzi memprioritaskan keamanan secara default dengan membuat sertifikat untuk para pemroses dan mendukung metode autentikasi yang aman seperti TLS, SCRAM-SHA, dan OAuth. Strimzi juga menangani NetworkPolicy untuk semua pemroses Kafka.
- Strimzi tidak menggunakan dependensi eksternal. Platform ini memiliki cluster Kafka dan ZooKeeper dengan pengekspor metrik bawaan, sehingga Anda tidak perlu menggunakan alat tambahan. Anda juga dapat menyesuaikan konfigurasi broker untuk memenuhi persyaratan tertentu.
Arsitektur deployment
Cluster Kafka terdiri dari satu atau beberapa server, yang dikenal sebagai broker. Server tersebut berkolaborasi untuk mengelola aliran data masuk dan memfasilitasi pesan publikasi-langganan bagi klien Kafka, yang disebut sebagai konsumen.
Setiap partisi data dalam cluster Kafka memiliki broker pemimpin, yang bertanggung jawab untuk mengelola semua operasi baca dan tulis ke partisi tersebut. Partisi ini juga dapat memiliki satu atau beberapa broker pengikut yang secara pasif mereplikasi tindakan broker pemimpin.
Dalam penyiapan umum, ZooKeeper mengoordinasikan cluster Kafka dengan membantu memilih pemimpin di antara broker, dan memastikan failover dapat berjalan lancar jika terjadi masalah.
Anda juga dapat men-deploy konfigurasi Kafka tanpa Zookeeper dengan mengaktifkan mode KRaft, tetapi metode ini tidak dianggap siap produksi oleh komunitas Strimzi karena tidak memiliki dukungan untuk resource KafkaTopic, autentikasi kredensial, dan lainnya.
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).
Penggunaan beberapa node dan zona sangat penting untuk mencapai cluster Kubernetes yang memiliki ketersediaan tinggi di Google Cloud. Alasannya sebagai berikut:
- Fault tolerance: Beberapa node yang ada akan mendistribusikan workload di seluruh cluster, memastikan bahwa jika satu node gagal, node lainnya dapat mengambil alih tugas, sehingga mencegah periode nonaktif dan gangguan layanan.
- Skalabilitas: Penggunaan beberapa node akan memastikan penskalaan horizontal dapat menambahkan atau menghapus node sesuai kebutuhan, sehingga memastikan alokasi resource yang optimal dan mengakomodasi peningkatan permintaan workload dan traffic.
- Ketersediaan tinggi: Penggunaan beberapa zona dalam satu region akan memastikan redundansi dan meminimalkan risiko titik tunggal kegagalan. Jika seluruh zona ketersediaan mengalami pemadaman, cluster dapat terus berjalandi zona lain, sehingga mempertahankan ketersediaan layanan.
- Redundansi geografis: Dengan menjangkau node di berbagai region, data dan layanan cluster akan dapat terdistribusi secara geografis, sehingga memberikan ketahanan terhadap bencana alam, pemadaman listrik, atau gangguan lokal lainnya yang mungkin memengaruhi satu zona.
- Update dan pemeliharaan berkelanjutan: Penggunaan beberapa zona akan memastikan bahwa update dan pemeliharaan berkelanjutan dapat dilakukan pada setiap node tanpa memengaruhi keseluruhan ketersediaan cluster. Hal ini memastikan layanan yang berkelanjutan, sekaligus memungkinkan update dan patch harus ada diterapkan dengan lancar.
- Perjanjian Tingkat Layanan (SLA): Google Cloud menyediakan SLA untuk deployment multi-zona, yang menjamin tingkat waktu beroperasi dan ketersediaan minimum.
Diagram deployment
Diagram berikut menunjukkan cluster Kafka yang berjalan pada beberapa node dan zona dalam cluster GKE:
Pada diagram, StrimziPodSet
Kafka di-deploy ke tiga node, di tiga zona yang berbeda. Anda dapat mengontrol konfigurasi ini dengan
menetapkan aturan
afinitas
dan
penyebaran topologi
Pod yang diperlukan pada StrimziPodSet
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 StrimziPodSet
ZooKeeper yang di-deploy ke tiga node,
di tiga zona berbeda:
Resource kustom StrimziPodSet
Tutorial ini menggunakan resource kustom
StrimziPodSet
yang diperkenalkan di Strimzi versi 0.29, bukan StatefulSets
.
Resource StrimziPodSet
menawarkan skalabilitas yang lebih baik untuk cluster dan
memungkinkan Anda meneruskan opsi konfigurasi, sehingga Anda dapat membuat perubahan yang lebih terperinci
pada Pod. Resource StrimziPodSet
aktif secara default di Strimzi versi
0.35 dan yang lebih baru.
Biaya
Dalam dokumen ini, Anda 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
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Compute Engine, IAM, GKE, Backup for GKE, and Resource Manager:
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
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Compute Engine, IAM, GKE, Backup for GKE, and Resource Manager:
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:
roles/storage.objectViewer, roles/logging.logWriter, roles/container.clusterAdmin, roles/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.
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.
Standar
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 strimzi-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 strimzi-cluster --region us-central1"
Menghubungkan ke cluster
Konfigurasi kubectl
untuk berkomunikasi dengan cluster:
gcloud container clusters get-credentials ${KUBERNETES_CLUSTER_PREFIX}-cluster --region ${REGION}
Men-deploy operator Strimzi ke cluster Anda
Di bagian ini, Anda akan men-deploy operator Strimzi menggunakan chart Helm. Ada juga beberapa cara lain untuk men-deploy Strimzi.
Tambahkan repositori Chart Helm Strimzi:
helm repo add strimzi https://strimzi.io/charts/
Tambahkan namespace untuk Operator Strimzi dan cluster Kafka:
kubectl create ns kafka
Deploy operator cluster Strimzi menggunakan Helm:
helm install strimzi-operator strimzi/strimzi-kafka-operator -n kafka
Untuk men-deploy cluster Kafka dan Operator Cluster ke berbagai namespace, tambahkan parameter
--set watchNamespaces="{kafka-namespace,kafka-namespace-2,...}"
ke perintah helm.Pastikan Operator Cluster Strimzi berhasil di-deploy menggunakan Helm:
helm ls -n kafka
Outputnya mirip dengan hal berikut ini:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION strimzi-operator kafka 1 2023-06-27 11:22:15.850545 +0200 CEST deployed strimzi-kafka-operator-0.35.0 0.35.0
Men-deploy Kafka
Setelah operator di-deploy ke cluster, Anda siap men-deploy instance cluster 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 dibuat oleh Strimzi.
- Java MaxHeapSize dan MinHeapSize disetel ke 4 GB untuk Kafka dan 2 GB untuk ZooKeeper.
- Alokasi resource CPU dari 1 permintaan CPU dan 2 batas CPU untuk Kafka dan ZooKeeper, beserta permintaan memori 5 GB dan batas untuk Kafka (4 GB untuk layanan utama dan 0,5 GB untuk pengekspor metrik) dan 2,5 GB untuk ZooKeeper (2 GB untuk layanan utama dan 0,5 GB untuk pengekspor metrik).
- Operator entitas dengan permintaan dan batas berikut:
tlsSidecar
: CPU 100 m/500 m dan memori 128 Mi.topicOperator
: CPU 100 m/500 m dan memori 512 Mi.userOperator
: CPU 500 m dan memori 2 Gi.
- Penyimpanan sebesar 100 GB dialokasikan ke setiap Pod menggunakan
premium-rwo
storageClass
. - 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: Certificate Authority (CA) yang terpisah untuk cluster dan klien (mTLS). Anda juga dapat menyetel konfigurasi agar dapat menggunakan Certificate Authority yang lain.
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 cluster Kafka baru menggunakan konfigurasi dasar:
kubectl apply -n kafka -f kafka-strimzi/manifests/01-basic-cluster/my-cluster.yaml
Perintah ini membuat resource kustom Kafka dari operator Strimzi yang berisi permintaan dan batas bagi CPU dan memori, permintaan block storage, serta kombinasi taint dan afinitas untuk mendistribusikan Pod yang disediakan ke seluruh node Kubernetes.
Tunggu beberapa menit selagi Kubernetes memulai workload yang diperlukan:
kubectl wait kafka/my-cluster --for=condition=Ready --timeout=600s -n kafka
Pastikan workload Kafka telah dibuat:
kubectl get pod,service,deploy,pdb -l=strimzi.io/cluster=my-cluster -n kafka
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE pod/my-cluster-entity-operator-848698874f-j5m7f 3/3 Running 0 44m pod/my-cluster-kafka-0 1/1 Running 0 5m pod/my-cluster-kafka-1 1/1 Running 0 5m pod/my-cluster-kafka-2 1/1 Running 0 5m pod/my-cluster-zookeeper-0 1/1 Running 0 6m pod/my-cluster-zookeeper-1 1/1 Running 0 6m pod/my-cluster-zookeeper-2 1/1 Running 0 6m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/my-cluster-kafka-bootstrap ClusterIP 10.52.8.80 <none> 9091/TCP,9092/TCP,9093/TCP 5m service/my-cluster-kafka-brokers ClusterIP None <none> 9090/TCP,9091/TCP,9092/TCP,9093/TCP 5m service/my-cluster-zookeeper-client ClusterIP 10.52.11.144 <none> 2181/TCP 6m service/my-cluster-zookeeper-nodes ClusterIP None <none> 2181/TCP,2888/TCP,3888/TCP 6m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/my-cluster-entity-operator 1/1 1 1 44m NAME MIN AVAILABLE MAX UNAVAILABLE ALLOWED DISRUPTIONS AGE poddisruptionbudget.policy/my-cluster-kafka 2 N/A 1 5m poddisruptionbudget.policy/my-cluster-zookeeper 2 N/A 1 6m
Operator membuat resource berikut:
- Dua
StrimziPodSets
untuk Kafka dan ZooKeeper. - Tiga Pod untuk replika broker Kafka.
- Tiga Pod untuk replika ZooKeeper.
- Dua
PodDisruptionBudgets
, yang memastikan ketersediaan atas minimum dua replika untuk konsistensi cluster. - Layanan bernama
my-cluster-kafka-bootstrap
yang berfungsi sebagai server bootstrap untuk klien Kafka yang terhubung dari dalam cluster Kubernetes. Semua pemroses Kafka internal tersedia di Layanan ini. - Layanan headless bernama
my-cluster-kafka-brokers
yang mengaktifkan resolusi DNS pada alamat IP Pod broker Kafka secara langsung. Layanan ini digunakan untuk komunikasi antar broker. - Layanan bernama
my-cluster-zookeeper-client
yang memungkinkan broker Kafka terhubung ke node ZooKeeper sebagai klien. - Layanan headless bernama
my-cluster-zookeeper-nodes
yang mengaktifkan resolusi DNS pada alamat IP Pod ZooKeeper secara langsung. Layanan ini digunakan untuk menghubungkan antar replika ZooKeeper. - Deployment bernama
my-cluster-entity-operator
yang berisi operator topik dan operator pengguna, serta memfasilitasi pengelolaan resource kustomKafkaTopics
danKafkaUsers
.
Anda juga dapat mengonfigurasi dua NetworkPolicies
agar dapat memfasilitasi konektivitas ke
pemroses Kafka dari Pod dan Namespace mana pun. Kebijakan ini juga akan
membatasi koneksi broker ke ZooKeeper, serta memungkinkan komunikasi antara
Pod cluster dan port Layanan internal yang eksklusif untuk komunikasi cluster.
Autentikasi dan pengelolaan pengguna
Bagian ini menunjukkan cara mengaktifkan autentikasi dan otorisasi untuk mengamankan Pemroses Kafka dan berbagi kredensial dengan klien.
Strimzi menyediakan metode berbasis Kubernetes untuk pengelolaan pengguna menggunakan
User Operator
terpisah dan resource kustom Kubernetes yang sesuai,
KafkaUser
,
yang menentukan konfigurasi pengguna. Konfigurasi pengguna mencakup setelan
untuk autentikasi dan otorisasi, serta penyediaan pengguna terkait di
Kafka.
Strimzi dapat membuat pemroses dan pengguna Kafka yang mendukung beberapa mekanisme autentikasi seperti autentikasi berbasis nama pengguna dan sandi (SCRAM-SHA-512) atau TLS. Anda juga dapat menggunakan autentikasi OAuth 2.0, yang sering dianggap sebagai pendekatan yang lebih baik dibandingkan saat menggunakan sandi atau sertifikat untuk autentikasi berkat pengelolaan kredensial eksternal dan keamanannya yang lebih baik.
Men-deploy cluster Kafka
Bagian ini menunjukkan cara men-deploy operator Strimzi sebagai demonstrasi dari kemampuan pengelolaan pengguna, termasuk:
- Cluster Kafka dengan autentikasi berbasis sandi (SCRAM-SHA-512) yang diaktifkan di salah satu pemroses.
KafkaTopic
dengan 3 replika.KafkaUser
dengan ACL yang menyatakan bahwa pengguna memiliki izin baca dan tulis ke topik terkait.
Konfigurasikan cluster Kafka Anda agar dapat menggunakan pemroses dengan autentikasi SCRAM-SHA-512 berbasis sandi pada port 9094 dan otorisasi sederhana:
kubectl apply -n kafka -f kafka-strimzi/manifests/03-auth/my-cluster.yaml
Buat
Topic
,User
, dan Pod klien untuk menjalankan perintah terhadap cluster Kafka:kubectl apply -n kafka -f kafka-strimzi/manifests/03-auth/topic.yaml kubectl apply -n kafka -f kafka-strimzi/manifests/03-auth/my-user.yaml
Secret
my-user
dengan kredensial pengguna yang dipasang ke Pod klien sebagai Volume.Kredensial ini mengonfirmasi bahwa pengguna memiliki izin untuk memublikasikan pesan ke topik menggunakan pemroses yang mengaktifkan autentikasi berbasis sandi (SCRAM-SHA-512).
Membuat pod klien:
kubectl apply -n kafka -f kafka-strimzi/manifests/03-auth/kafkacat.yaml
Tunggu beberapa menit hingga Pod klien menjadi
Ready
, lalu hubungkan ke Pod:kubectl wait --for=condition=Ready pod --all -n kafka --timeout=600s kubectl exec -it kafkacat -n kafka -- /bin/sh
Buat pesan baru dengan kredensial
my-user
, lalu coba gunakan pesan tersebut:echo "Message from my-user" |kcat \ -b my-cluster-kafka-bootstrap.kafka.svc.cluster.local:9094 \ -X security.protocol=SASL_SSL \ -X sasl.mechanisms=SCRAM-SHA-512 \ -X sasl.username=my-user \ -X sasl.password=$(cat /my-user/password) \ -t my-topic -P kcat -b my-cluster-kafka-bootstrap.kafka.svc.cluster.local:9094 \ -X security.protocol=SASL_SSL \ -X sasl.mechanisms=SCRAM-SHA-512 \ -X sasl.username=my-user \ -X sasl.password=$(cat /my-user/password) \ -t my-topic -C
Outputnya mirip dengan hal berikut ini:
Message from my-user % Reached end of topic my-topic [0] at offset 0 % Reached end of topic my-topic [2] at offset 1 % Reached end of topic my-topic [1] at offset 0
Ketik
CTRL+C
untuk menghentikan proses penggunaan.Keluar dari shell Pod
exit
Cadangan dan pemulihan dari bencana (disaster recovery)
Meskipun operator Strimzi tidak menawarkan fungsi pencadangan bawaan, Anda dapat menerapkan strategi pencadangan yang efisien dengan mengikuti pola tertentu.
Anda dapat menggunakan Pencadangan untuk GKE untuk mencadangkan:
- Manifes resource Kubernetes.
- Resource kustom Strimzi API beserta definisinya yang diekstrak dari server Kubernetes API pada cluster yang sedang dicadangkan.
- 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 cluster Kafka yang telah di-deploy menggunakan operator Strimzi. Anda harus mencadangkan:
- Konfigurasi Kafka, yang mencakup semua resource kustom
Strimzi API seperti
KafkaTopics
danKafkaUsers
. - Data terkait, yang disimpan di PersistentVolume broker Kafka.
Dengan menyimpan manifes resource Kubernetes, termasuk konfigurasi Strimzi, di repositori Git, Anda dapat tidak perlu melakukan pencadangan terpisah untuk konfigurasi Kafka, karena resource dapat diterapkan ulang 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:
kafka:
# ...
storage:
type: persistent-claim
size: 100Gi
class: 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 Strimzi Kafka yang sudah ada (
Kakfa
,KafkaTopic
,KafkaUser
, 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
Menghapus project Google Cloud:
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)")
Langkah ini harus dilakukan, karena Strimzi akan menggunakan parameter
deleteClaim: false
untuk penyimpanan secara default. Jika Anda menghapus cluster, semua disk akan tetap tersedia.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 selanjutnya
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.