Tutorial ini menunjukkan cara menjalankan Elastic Stack di GKE menggunakan operator Elastic Cloud on Kubernetes (ECK).
Elastic Stack adalah solusi open source populer yang digunakan untuk mencatat log, memantau, dan menganalisis data secara real-time. Dengan menggunakan Elastic Stack di GKE, Anda dapat memanfaatkan skalabilitas dan keandalan yang disediakan oleh GKE Autopilot dan fitur Elastic Stack yang canggih.
Tutorial ini ditujukan untuk administrator Kubernetes atau engineer keandalan situs.
Tujuan
- Membuat cluster GKE.
- Deploy operator ECK.
- Konfigurasi cluster Elasticsearch dan Kibana menggunakan operator ECK.
- Deploy Elastic Stack lengkap menggunakan operator ECK.
- Menskalakan cluster Elasticsearch secara otomatis dan mengupgrade deployment Elastic Stack.
- Gunakan Elastic Stack untuk memantau lingkungan Kubernetes.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang 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, baca bagian Pembersihan.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan GKE API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable container.googleapis.com
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan GKE API:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable container.googleapis.com
-
Memberikan peran ke akun pengguna Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/container.clusterAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ganti kode berikut:
PROJECT_ID: Project ID Anda.USER_IDENTIFIER: ID untuk akun pengguna Anda. Misalnya,myemail@example.com.ROLE: Peran IAM yang Anda berikan ke akun pengguna Anda.
- Anda harus memiliki nama domain. Nama domain tidak boleh lebih dari 63 karakter. Anda dapat menggunakan Cloud Domains atau registrar lain.
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,
Helm, dan gcloud CLI.
Untuk menyiapkan lingkungan Anda dengan Cloud Shell, ikuti langkah-langkah berikut:
Luncurkan sesi Cloud Shell dari Google Cloud konsol, dengan mengklik
Activate Cloud Shell di Google Cloud konsol. Tindakan ini akan meluncurkan sesi di panel bawah konsol Google Cloud .
Tambahkan repositori diagram Helm dan perbarui:
helm repo add elastic https://helm.elastic.co helm repo updateBuat clone repositori GitHub:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.gitUbah ke direktori kerja:
cd kubernetes-engine-samples/observability/elastic-stack-tutorial
Membuat cluster GKE
Buat cluster GKE dengan pengumpulan metrik bidang kontrol diaktifkan:
gcloud container clusters create-auto elk-stack \
--location="us-central1" \
--monitoring="SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER"
Men-deploy operator ECK
Elastic Cloud on Kubernetes (ECK) adalah platform untuk men-deploy dan mengelola Elastic Stack di cluster Kubernetes.
ECK mengotomatiskan deployment dan pengelolaan cluster Elastic Stack, sehingga menyederhanakan proses penyiapan dan pemeliharaan Elastic Stack di Kubernetes. ECK menyediakan serangkaian resource kustom Kubernetes yang dapat Anda gunakan untuk membuat dan mengonfigurasi Elasticsearch, Kibana, Server Pengelolaan Performa Aplikasi, dan komponen Elastic Stack lainnya di Kubernetes. Hal ini memungkinkan developer dan tim DevOps mengonfigurasi serta mengelola cluster Elastic Stack dalam skala besar.
ECK mendukung beberapa node Elasticsearch, failover aplikasi otomatis, upgrade lancar, dan enkripsi SSL. ECK juga menyertakan fitur yang memungkinkan Anda memantau dan memecahkan masalah performa Elasticsearch.
Instal diagram Helm ECK:
helm upgrade --install "elastic-operator" "elastic/eck-operator" \ --version="2.8.0" \ --create-namespace \ --namespace="elastic-system" \ --set="resources.limits.cpu=250m" \ --set="resources.limits.memory=512Mi" \ --set="resources.limits.ephemeral-storage=1Gi" \ --set="resources.requests.cpu=250m" \ --set="resources.requests.memory=512Mi" \ --set="resources.requests.ephemeral-storage=1Gi"Tunggu hingga operator siap:
watch kubectl get pods -n elastic-systemOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE elastic-operator-0 1/1 Running 0 31sJika operator
STATUSadalahRunning, kembali ke command line dengan menekanCtrl+C.
Mengonfigurasi Elastic Stack dengan ECK
Dengan menggunakan Elastic Stack dengan Elasticsearch, Kibana, dan Elastic Agent yang berfungsi dalam mode Fleet, Anda dapat menyiapkan solusi yang canggih, skalabel, dan terkelola sepenuhnya untuk mengelola dan memvisualisasikan data menggunakan Kibana.
Kibana adalah alat analisis dan visualisasi data open source yang memungkinkan Anda menelusuri, menganalisis, dan memvisualisasikan data di Elasticsearch.
Elastic Agent adalah pengirim data ringan yang mengumpulkan data dari berbagai sumber, seperti log atau metrik, dan mengirimkannya secara otomatis ke Elasticsearch.
Elastic Fleet adalah mode operasi yang memungkinkan agen Elastic melaporkan ke server fleet pusat, yang menangani konfigurasi dan pengelolaannya. Server fleet menyederhanakan deployment, konfigurasi, dan penskalaan agen Elastic, sehingga mempermudah pengelolaan deployment yang besar dan kompleks.
Penskalaan otomatis Elasticsearch adalah fitur pemantauan mandiri yang dapat melaporkan kapan resource tambahan diperlukan berdasarkan kebijakan yang ditentukan operator. Misalnya, kebijakan dapat menentukan bahwa tingkat tertentu harus diskalakan berdasarkan ruang disk yang tersedia. Elasticsearch dapat memantau ruang disk dan menyarankan penskalaan jika memprediksi kekurangan, meskipun operator tetap harus menambahkan resource yang diperlukan. Untuk mengetahui informasi selengkapnya tentang penskalaan otomatis Elasticsearch, lihat bagian Penskalaan otomatis dalam dokumentasi Elasticsearch.
Mengonfigurasi cluster Elasticsearch
Elasticsearch menyediakan mesin analisis dan penelusuran RESTful terdistribusi yang dirancang untuk menyimpan dan menelusuri data dalam jumlah besar dengan cepat dan efisien.
Saat men-deploy Elastic Stack di Kubernetes, Anda harus mengelola setelan VM, khususnya vm.max_map_count setting, yang diperlukan oleh Elasticsearch. vm.max_map_count menentukan jumlah area memori yang dapat dialokasikan proses ke file. Elasticsearch harus menetapkan nilai ini ke setidaknya 262144 agar dapat berjalan secara optimal. Untuk mengetahui informasi selengkapnya, lihat
Memori virtual
dalam dokumentasi ECK.
Tinjau manifes berikut:
Manifes ini menjelaskan DaemonSet yang mengonfigurasi setelan kernel langsung di host. DaemonSet adalah pengontrol Kubernetes yang membantu memastikan bahwa salinan Pod berjalan di setiap node dalam cluster.
Manifes sebelumnya ada dalam daftar yang diizinkan untuk dijalankan di Autopilot. Jangan ubah manifes ini, termasuk gambar penampung.
Terapkan manifes ini ke cluster Anda:
kubectl apply -f max-map-count-setter-ds.yamlTinjau manifes berikut:
Manifes ini menentukan cluster Elasticsearch dengan kolom berikut:
initContainers: menunggu setelan kernel host memori virtual berubah.podDisruptionBudget: menentukan bahwa cluster tidak akan dihancurkan selama proses defragmentasi Pod.config.node.roles: Konfigurasi peran node Elasticsearch. Untuk mengetahui informasi selengkapnya tentang peran node, lihat Node dalam dokumentasi Elasticsearch.
Terapkan manifes ini ke cluster Anda:
kubectl apply -f elasticsearch.yamlTunggu hingga cluster Elasticsearch siap:
watch kubectl --namespace elastic-system get elasticsearches.elasticsearch.k8s.elastic.coOutputnya mirip dengan hal berikut ini:
NAME HEALTH NODES VERSION PHASE AGE elasticsearch green 3 8.8.0 Ready 5m3sJika cluster Elasticsearch
HEALTHadalahgreendanPHASEadalahReady, kembali ke command line dengan menekanCtrl+C.
Mengonfigurasi Kibana
Tinjau manifes berikut:
Manifes ini menjelaskan resource kustom Kibana yang mengonfigurasi kebijakan agen untuk server dan agen fleet.
Terapkan manifes ini ke cluster Anda:
kubectl apply -f kibana.yamlTunggu hingga Pod siap:
watch kubectl --namespace elastic-system get kibanas.kibana.k8s.elastic.coOutputnya mirip dengan hal berikut ini:
NAME HEALTH NODES VERSION AGE kibana green 1 8.8.0 6m47sJika
HEALTHPod adalahgreen, kembali ke command line dengan menekanCtrl+C.
Mengonfigurasi load balancer untuk mengakses Kibana
Untuk mengakses Kibana, buat objek Ingress Kubernetes, sertifikat yang dikelola Google, alamat IP global, dan Zona DNS.
Buat alamat IP eksternal global:
gcloud compute addresses create "elastic-stack" --globalBuat zona terkelola dan set data di Cloud DNS:
gcloud dns managed-zones create "elk" \ --description="DNS Zone for Airflow" \ --dns-name="elk.BASE_DOMAIN" \ --visibility="public" gcloud dns record-sets create "elk.BASE_DOMAIN" \ --rrdatas="$(gcloud compute addresses describe "elastic-stack" --global --format="value(address)")" \ --ttl="300" \ --type="A" \ --zone="elk"Delegasikan zona DNS sebagai subdomain dari domain dasar dengan membuat set data NS dengan daftar server nama. Anda bisa mendapatkan daftar server nama menggunakan perintah berikut:
gcloud dns record-sets describe elk.BASE_DOMAIN \ --type="NS" \ --zone="elk" \ --format="value(DATA)"Tinjau manifes berikut:
Manifes ini menjelaskan ManagedCertificate yang menyediakan sertifikat SSL untuk membuat koneksi TLS.
Terapkan manifes ke cluster Anda:
kubectl apply -f ingress.yaml
Mengonfigurasi Agen Elastis
Tinjau manifes berikut:
Manifes ini menjelaskan Elastic Agent yang mengonfigurasi server fleet dengan ECK.
Terapkan manifes ini ke cluster Anda:
kubectl apply -f fleet-server-and-agents.yamlTunggu hingga Pod siap:
watch kubectl --namespace elastic-system get agents.agent.k8s.elastic.coOutputnya mirip dengan hal berikut ini:
NAME HEALTH AVAILABLE EXPECTED VERSION AGE elastic-agent green 5 5 8.8.0 14m fleet-server green 1 1 8.8.0 16mJika
HEALTHPod adalahgreen, kembali ke command line dengan menekanCtrl+C.
Mengonfigurasi logging dan pemantauan
Elastic Stack dapat menggunakan kube-state-metrics exporter untuk mengumpulkan metrik tingkat cluster.
Instal kube-state-metrics:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install kube-state-metrics prometheus-community/kube-state-metrics --namespace elastic-systemDapatkan kredensial pengguna
elasticKibana default:kubectl get secret elasticsearch-es-elastic-user -o yaml -n elastic-system -o jsonpath='{.data.elastic}' | base64 -dBuka
https://elk.BASE_DOMAINdi browser Anda, lalu login ke Kibana dengan kredensial.Dari menu, pilih Analytics, lalu Dasbor.
Di kolom teks penelusuran, masukkan Ringkasan Kubernetes, lalu pilih Dasbor ringkasan untuk melihat metrik dasar.
Beberapa panel dasbor mungkin tidak menampilkan data atau pesan error karena GKE membatasi akses ke beberapa endpoint bidang kontrol yang digunakan Kibana untuk mendapatkan metrik cluster.
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 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.
Hapus komponen Elastic Stack, operator ECK, dan kube-state-metrics:
kubectl --namespace elastic-system delete ingresses.networking.k8s.io elastic-stack kubectl --namespace elastic-system delete managedcertificates.networking.gke.io elastic-stack kubectl --namespace elastic-system delete frontendconfigs.networking.gke.io elastic-stack kubectl --namespace elastic-system delete agents.agent.k8s.elastic.co elastic-agent kubectl --namespace elastic-system delete agents.agent.k8s.elastic.co fleet-server kubectl --namespace elastic-system delete kibanas.kibana.k8s.elastic.co kibana kubectl --namespace elastic-system delete elasticsearches.elasticsearch.k8s.elastic.co elasticsearch kubectl --namespace elastic-system delete daemonsets.apps max-map-count-setter kubectl --namespace elastic-system delete pvc --selector='elasticsearch.k8s.elastic.co/cluster-name=elasticsearch' helm --namespace elastic-system uninstall kube-state-metrics helm --namespace elastic-system uninstall elastic-operatorHapus kumpulan data DNS, alamat IP, zona terkelola DNS, dan cluster GKE:
gcloud dns record-sets delete "elk.BASE_DOMAIN" \ --type="A" \ --zone="elk" \ --quiet gcloud compute addresses delete "elastic-stack" \ --global \ --quiet gcloud dns managed-zones delete "elk" --quiet gcloud container clusters delete "elk-stack" \ --location="us-central1" \ --quiet
Langkah berikutnya
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.