Dalam tutorial ini, Anda dapat menyiapkan penskalaan otomatis berdasarkan salah satu metrik berikut ini:
CPU
Penggunaan CPU
Penskalaan berdasarkan persentase penggunaan CPU di seluruh node. Cara ini dapat menghemat biaya, sehingga Anda dapat memaksimalkan penggunaan resource CPU. Namun, karena penggunaan CPU merupakan metrik akhir, pengguna mungkin mengalami latensi saat peningkatan skala sedang berlangsung.
Pub/Sub
Backlog Pub/Sub
Skala didasarkan pada metrik eksternal yang melaporkan jumlah pesan yang tidak dikonfirmasi yang tersisa dalam langganan Pub/Sub. Hal ini dapat mengurangi latensi secara efektif sebelum menjadi masalah, tetapi mungkin akan menggunakan resource relatif lebih banyak daripada penskalaan otomatis berdasarkan pemakaian CPU.
Metrik Kustom
Metrik Prometheus Kustom
Skalakan berdasarkan metrik kustom yang ditentukan pengguna dan diekspor dalam format Prometheus melalui Google Managed Prometheus. Metrik Prometheus Anda harus berjenis Gauge.
Pada dasarnya, penskalaan otomatis adalah menemukan keseimbangan yang dapat diterima antara biaya dan latensi. Sebaiknya Anda bereksperimen dengan kombinasi metrik ini dan lainnya untuk menemukan kebijakan yang cocok bagi Anda.
Tujuan
Tutorial ini membahas tugas-tugas berikut:- Cara men-deploy Adaptor Metrik Kustom.
- Cara mengekspor metrik dari dalam kode aplikasi.
- Cara melihat metrik Anda di antarmuka Cloud Monitoring.
- Cara men-deploy resource HorizontalPodAutoscaler (HPA) untuk menskalakan aplikasi Anda berdasarkan metrik Cloud Monitoring.
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
Lakukan langkah-langkah berikut untuk mengaktifkan Kubernetes Engine API:- Buka halaman Kubernetes Engine di Konsol Google Cloud.
- Buat atau pilih project.
- Tunggu hingga API dan layanan terkait diaktifkan. Proses ini dapat memerlukan waktu beberapa menit.
-
Make sure that billing is enabled for your Google Cloud project.
Anda dapat mengikuti tutorial ini menggunakan Cloud Shell, yang telah diinstal sebelumnya dengan alat command line gcloud
dan kubectl
yang digunakan dalam tutorial ini. Jika menggunakan Cloud Shell, Anda tidak perlu menginstal alat command line ini di workstation.
Untuk menggunakan Cloud Shell:
- Buka Konsol Google Cloud.
Klik tombol Activate Cloud Shell di bagian atas jendela Konsol Google Cloud.
Sesi Cloud Shell akan terbuka di dalam frame baru di bagian bawah Konsol Google Cloud dan menampilkan prompt command line.
Menyiapkan lingkungan Anda
Tetapkan zona default untuk Google Cloud CLI:
gcloud config set compute/zone zone
Ganti kode berikut:
zone
: Pilih zona yang paling dekat dengan Anda. Untuk mengetahui informasi selengkapnya, baca Region dan Zona.
Tetapkan variabel lingkungan
PROJECT_ID
danPROJECT_NUMBER
ke project ID dan nomor project Google Cloud:export PROJECT_ID=project-id export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format 'get(projectNumber)')
Tetapkan zona default untuk Google Cloud CLI:
gcloud config set project $PROJECT_ID
Membuat cluster GKE
Praktik terbaik: Untuk meningkatkan keamanan saat mengakses layanan Google Cloud, aktifkan Workload Identity Federation untuk GKE di cluster Anda. Meskipun halaman ini menyertakan contoh yang menggunakan metode lama (dengan Workload Identity Federation untuk GKE dinonaktifkan), mengaktifkannya akan meningkatkan perlindungan.
Workload Identity
Untuk membuat cluster dengan Workload Identity Federation untuk GKE diaktifkan, jalankan perintah berikut:
gcloud container clusters create metrics-autoscaling --workload-pool=$PROJECT_ID.svc.id.goog
Autentikasi lama
Untuk membuat cluster dengan Workload Identity Federation untuk GKE dinonaktifkan, jalankan perintah berikut:
gcloud container clusters create metrics-autoscaling
Men-deploy Adaptor Metrik Kustom
Dengan Adaptor Metrik Kustom, cluster Anda dapat mengirim dan menerima metrik dengan Cloud Monitoring.
CPU
Tidak berlaku: Autoscaler Pod Horizontal dapat diskalakan berdasarkan penggunaan CPU secara native, sehingga Adaptor Metrik Kustom tidak diperlukan.
Pub/Sub
Prosedur untuk menginstal Adaptor Metrik Kustom berbeda untuk cluster dengan Workload Identity Federation untuk GKE diaktifkan atau tidak diaktifkan. Pilih opsi yang cocok dengan penyiapan yang Anda pilih saat membuat cluster.
Workload Identity
Beri pengguna kemampuan untuk membuat peran otorisasi yang diperlukan:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Deploy adaptor metrik kustom di cluster Anda:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Adaptor menggunakan akun layanan Kubernetes custom-metrics-stackdriver-adapter
di namespace custom-metrics
. Izinkan akun layanan ini untuk membaca metrik Cloud Monitoring dengan menetapkan peran Monitoring Viewer:
gcloud projects add-iam-policy-binding projects/$PROJECT_ID \
--role roles/monitoring.viewer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Autentikasi Lama
Beri pengguna kemampuan untuk membuat peran otorisasi yang diperlukan:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Deploy adaptor metrik kustom di cluster Anda:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Metrik Kustom
Prosedur untuk menginstal Adaptor Metrik Kustom berbeda untuk cluster dengan Workload Identity Federation untuk GKE diaktifkan atau tidak diaktifkan. Pilih opsi yang cocok dengan penyiapan yang Anda pilih saat membuat cluster.
Workload Identity
Beri pengguna kemampuan untuk membuat peran otorisasi yang diperlukan:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Deploy adaptor metrik kustom di cluster Anda:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Adaptor menggunakan akun layanan Kubernetes custom-metrics-stackdriver-adapter
di namespace custom-metrics
. Izinkan akun layanan ini untuk membaca metrik Cloud Monitoring dengan menetapkan peran Monitoring Viewer:
gcloud projects add-iam-policy-binding projects/$PROJECT_ID \
--role roles/monitoring.viewer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Autentikasi Lama
Beri pengguna kemampuan untuk membuat peran otorisasi yang diperlukan:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Deploy adaptor metrik kustom di cluster Anda:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Men-deploy aplikasi dengan metrik
Download repositori yang berisi kode aplikasi untuk tutorial ini:
CPU
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/quickstarts/hello-app
Pub/Sub
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/databases/cloud-pubsub
Metrik Kustom
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/observability/custom-metrics-autoscaling/google-managed-prometheus
Repositori berisi kode yang mengekspor metrik ke Cloud Monitoring:
CPU
Aplikasi ini merespons "Halo dunia!" ke permintaan web apa pun pada port 8080
. Metrik CPU Compute Engine dikumpulkan secara otomatis oleh Cloud Monitoring.
Pub/Sub
Aplikasi ini melakukan polling langganan Pub/Sub untuk menemukan pesan baru, yang mengonfirmasi saat pesan tersebut masuk. Metrik langganan Pub/Sub dikumpulkan secara otomatis oleh Cloud Monitoring.
Metrik Kustom
Aplikasi ini merespons permintaan web apa pun ke jalur /metrics
dengan
metrik nilai konstanta menggunakan format Prometheus.
Repositori ini juga berisi manifes Kubernetes untuk men-deploy aplikasi ke cluster Anda:
CPU
Pub/Sub
Manifes berbeda untuk cluster dengan Workload Identity Federation untuk GKE diaktifkan atau tidak diaktifkan. Pilih opsi yang cocok dengan penyiapan yang dipilih saat Anda membuat cluster.
Workload Identity
Autentikasi lama
Metrik Kustom
Dengan resource PodMonitoring, Google Cloud Managed Service for Prometheus mengekspor metrik Prometheus ke Cloud Monitoring:
Mulai dari GKE Standard versi 1.27 atau GKE Autopilot versi 1.25, Google Cloud Managed Service for Prometheus diaktifkan. Untuk mengaktifkan Google Cloud Managed Service for Prometheus di cluster pada versi sebelumnya, lihat Mengaktifkan koleksi terkelola.
Deploy aplikasi ke cluster Anda:
CPU
kubectl apply -f manifests/helloweb-deployment.yaml
Pub/Sub
Prosedur untuk men-deploy aplikasi berbeda untuk cluster dengan Workload Identity Federation untuk GKE diaktifkan atau tidak diaktifkan. Pilih opsi yang cocok dengan penyiapan yang Anda pilih saat membuat cluster.
Workload Identity
Aktifkan Pub/Sub API di project Anda:
gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com
Buat topik dan langganan Pub/Sub:
gcloud pubsub topics create echo gcloud pubsub subscriptions create echo-read --topic=echo
Deploy aplikasi ke cluster Anda:
kubectl apply -f deployment/pubsub-with-workload-identity.yaml
Aplikasi ini menentukan akun layanan Kubernetes
pubsub-sa
. Tetapkan peran pelanggan Pub/Sub sehingga aplikasi dapat memublikasikan pesan ke topik Pub/Sub.gcloud projects add-iam-policy-binding projects/$PROJECT_ID \ --role=roles/pubsub.subscriber \ --member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/pubsub-sa
Perintah sebelumnya menggunakan Principal Identifier, yang memungkinkan IAM merujuk langsung ke akun layanan Kubernetes.
Praktik terbaik: Gunakan Principal identifier, tetapi pertimbangkan batasan dalam deskripsi metode alternatif.
Autentikasi lama
Aktifkan Pub/Sub API di project Anda:
gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com
Buat topik dan langganan Pub/Sub:
gcloud pubsub topics create echo gcloud pubsub subscriptions create echo-read --topic=echo
Buat akun layanan dengan akses ke Pub/Sub:
gcloud iam service-accounts create autoscaling-pubsub-sa gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber"
Download file kunci akun layanan:
gcloud iam service-accounts keys create key.json \ --iam-account autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com
Impor kunci akun layanan ke cluster Anda sebagai Secret:
kubectl create secret generic pubsub-key --from-file=key.json=./key.json
Deploy aplikasi ke cluster Anda:
kubectl apply -f deployment/pubsub-with-secret.yaml
Metrik Kustom
kubectl apply -f custom-metrics-gmp.yaml
Setelah menunggu beberapa saat hingga aplikasi di-deploy, semua Pod mencapai status Ready
:
CPU
kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE
helloweb-7f7f7474fc-hzcdq 1/1 Running 0 10s
Pub/Sub
kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE
pubsub-8cd995d7c-bdhqz 1/1 Running 0 58s
Metrik Kustom
kubectl get pods
Output:
NAME READY STATUS RESTARTS AGE
custom-metrics-gmp-865dffdff9-x2cg9 1/1 Running 0 49s
Melihat metrik di Cloud Monitoring
Saat berjalan, aplikasi Anda akan menulis metrik ke Cloud Monitoring.
Untuk melihat metrik untuk resource yang dimonitor menggunakan Metrics Explorer, lakukan langkah berikut:
-
Di konsol Google Cloud, buka halaman leaderboard Metrics explorer:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Monitoring.
- Pada elemen Metric, luaskan menu Select a metric, lalu pilih jenis resource dan jenis metrik. Misalnya, untuk membuat diagram penggunaan CPU
virtual machine, lakukan tindakan berikut:
- (Opsional) Untuk mengurangi opsi menu, masukkan bagian nama metrik dalam Panel filter. Untuk contoh ini, masukkan
utilization
. - Di menu Active resources, pilih VM instance.
- Di menu Active metric category, pilih Instance.
- Di menu Active metrics, pilih CPU utilization, lalu klik Apply.
- (Opsional) Untuk mengurangi opsi menu, masukkan bagian nama metrik dalam Panel filter. Untuk contoh ini, masukkan
Untuk memfilter deret waktu yang ditampilkan, gunakan elemen Filter.
Untuk menggabungkan deret waktu, gunakan menu pada elemen Aggregation. Misalnya, untuk menampilkan pemakaian CPU untuk VM Anda, berdasarkan zonanya, tetapkan menu pertama ke Mean dan menu kedua ke zone.
Semua deret waktu akan ditampilkan saat menu pertama elemen Aggregation ditetapkan ke Unaggregated. Setelan default untuk elemen Aggregation ditentukan oleh jenis metrik yang Anda pilih.
Jenis dan metrik resource adalah sebagai berikut:
CPU
Jenis resource: gce_instance
Metrik: compute.googleapis.com/instance/cpu/utilization
Pub/Sub
Jenis resource: pubsub_subscription
Metrik: pubsub.googleapis.com/subscription/num_undelivered_messages
Metrik Kustom
Jenis resource: prometheus_target
Metrik: prometheus.googleapis.com/custom_prometheus/gauge
Bergantung pada metriknya, Anda mungkin belum melihat banyak aktivitas di Metrics Explorer Cloud Monitoring. Jangan heran jika metrik Anda tidak diperbarui.
Membuat objek HorizontalPodAutoscaler
Saat melihat metrik di Cloud Monitoring, Anda dapat men-deploy HorizontalPodAutoscaler
untuk mengubah ukuran Deployment berdasarkan metrik.
CPU
Pub/Sub
Metrik Kustom
Deploy HorizontalPodAutoscaler
ke cluster Anda:
CPU
kubectl apply -f manifests/helloweb-hpa.yaml
Pub/Sub
kubectl apply -f deployment/pubsub-hpa.yaml
Metrik Kustom
kubectl apply -f custom-metrics-gmp-hpa.yaml
Membuat beban
Untuk beberapa metrik, Anda mungkin perlu menghasilkan beban agar dapat melihat penskalaan otomatis:
CPU
Simulasikan 10.000 permintaan ke server helloweb
:
kubectl exec -it deployments/helloweb -- /bin/sh -c \
"for i in $(seq -s' ' 1 10000); do wget -q -O- localhost:8080; done"
Pub/Sub
Publikasikan 200 pesan ke topik Pub/Sub:
for i in {1..200}; do gcloud pubsub topics publish echo --message="Autoscaling #${i}"; done
Metrik Kustom
Tidak Berlaku: Kode yang digunakan dalam contoh ini mengekspor nilai konstanta 40
untuk metrik kustom. HorizontalPodAutoscaler disetel dengan nilai target 20
sehingga akan mencoba meningkatkan skala Deployment secara otomatis.
Anda mungkin perlu menunggu beberapa menit hingga HorizontalPodAutoscaler merespons perubahan metrik.
Mengamati peningkatan skala HorizontalPodAutoscaler
Anda dapat memeriksa jumlah replika Deployment saat ini dengan menjalankan:
kubectl get deployments
Setelah memberikan beberapa waktu agar metrik menyebar, Deployment akan membuat lima Pod untuk menangani backlog.
Anda juga dapat memeriksa status dan aktivitas terbaru HorizontalPodAutoscaler dengan menjalankan:
kubectl describe hpa
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus masing-masing resource.
CPU
Hapus cluster GKE Anda:
gcloud container clusters delete metrics-autoscaling
Pub/Sub
Bersihkan langganan Pub/Sub dan topik:
gcloud pubsub subscriptions delete echo-read gcloud pubsub topics delete echo
Hapus cluster GKE Anda:
gcloud container clusters delete metrics-autoscaling
Metrik Kustom
Hapus cluster GKE Anda:
gcloud container clusters delete metrics-autoscaling
Langkah berikutnya
Pelajari lebih lanjut metrik kustom dan eksternal untuk menskalakan beban kerja.
Pelajari tutorial Kubernetes Engine lainnya.