Tutorial ini menunjukkan cara menyesuaikan ukuran workload Google Kubernetes Engine (GKE) yang tepat dengan rekomendasi VPA dan metrik penggunaan.
Memahami alasan pentingnya penyesuaian ukuran resource
Penyediaan yang kurang dapat menyebabkan habisnya container resource yang diperlukan untuk menjalankan aplikasi Anda, sehingga menjadikannya lambat dan tidak dapat diandalkan. Penyediaan yang berlebihan tidak memengaruhi performa aplikasi Anda, tetapi dapat meningkatkan tagihan bulanan.
Tabel berikut menjelaskan implikasi penyediaan CPU dan memori yang kurang dan yang berlebihan:
Resource | Status penyediaan | Risiko | Penjelasan |
---|---|---|---|
CPU | Berlebihan | Biaya | Meningkatkan biaya workload Anda dengan mencadangkan resource yang tidak perlu. |
Kurang | Performa | Dapat menyebabkan workload melambat atau menjadi tidak responsif. | |
Belum ditetapkan | Keandalan | CPU dapat di-throttle ke 0 yang menyebabkan workload tidak responsif. | |
Memori | Berlebihan | Biaya | Meningkatkan biaya workload Anda dengan mencadangkan resource yang tidak perlu. |
Kurang | Keandalan | Dapat menyebabkan aplikasi dihentikan dengan error out of memory (OOM). | |
Belum ditetapkan | Keandalan | kubelet dapat menghentikan Pod Anda kapan saja dan menandainya sebagai gagal. |
Tujuan
Dalam tutorial ini, Anda akan mempelajari cara:
- Men-deploy contoh aplikasi.
- Mengekspor metrik rekomendasi GKE dari Monitoring ke BigQuery.
- Menggunakan BigQuery dan Looker Studio untuk melihat rekomendasi container GKE di seluruh project.
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
Menyiapkan project
Cloud Shell telah diinstal dengan software yang Anda perlukan untuk tutorial ini, termasuk Docker, kubectl
, gcloud CLI, dan Terraform.
Jika tidak menggunakan Cloud Shell, Anda harus menginstal gcloud CLI.
- 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.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build:
gcloud services enable cloudresourcemanager.googleapis.com
container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com - Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Aktifkan API Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build:
gcloud services enable cloudresourcemanager.googleapis.com
container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com -
Berikan peran ke Akun Google Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/serviceusage.serviceUsageAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/iam.securityAdmin, roles/container.admin
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
- Ganti
PROJECT_ID
dengan project ID Anda. - Ganti
EMAIL_ADDRESS
dengan alamat email Anda. - Ganti
ROLE
dengan setiap peran individual.
- Ganti
Menyiapkan lingkungan Anda
Untuk menyiapkan lingkungan, ikuti langkah-langkah berikut
Menetapkan variabel lingkungan:
export PROJECT_ID=PROJECT_ID export REGION=us-central1 export ZONE=us-central1-f export IMAGE=$REGION-docker.pkg.dev/$PROJECT_ID/main/vpa-recs-image:latest
Ganti
PROJECT_ID
dengan project ID Google Cloud Anda.Tetapkan variabel lingkungan default:
gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION gcloud config set compute/zone $ZONE
Buat clone repositori kode.
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
Ubah ke direktori kerja.
cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
(Opsional) Menyiapkan contoh aplikasi
Bagian ini bersifat opsional untuk men-deploy contoh aplikasi. Untuk menggunakan cluster yang ada, pastikan Cloud Monitoring dikonfigurasi di cluster Anda.
Untuk menyimulasikan lingkungan yang realistis, Anda akan menggunakan skrip penyiapan untuk men-deploy Butik Online.
Langkah-langkah berikut akan menginstal contoh aplikasi dan mengubah konfigurasi default. Misalnya, petunjuk tersebut mengonfigurasi Horizontal Pod Autoscaler (HPA) untuk beberapa workload serta mengubah permintaan dan batas resource.
Jalankan skrip penyiapan:
./scripts/setup.sh
Skrip penyiapan akan melakukan langkah berikut:
- Membuat cluster GKE.
- Men-deploy contoh aplikasi Butik Online.
- Mengupdate permintaan resource CPU dan memori Pod.
- Mengonfigurasi resource HorizontalPodAutoscaler untuk workload
adservice
guna menyimulasikan lingkungan yang realistis.
Skrip penyiapan mungkin memerlukan waktu hingga 10 menit untuk selesai.
Pastikan contoh aplikasi sudah siap:
kubectl get deployment
Outputnya mirip dengan hal berikut ini:
NAME READY UP-TO-DATE AVAILABLE AGE adservice 2/2 2 2 4m54s cartservice 1/1 1 1 4m55s checkoutservice 1/1 1 1 4m56s currencyservice 1/1 1 1 4m55s emailservice 1/1 1 1 4m56s frontend 1/1 1 1 4m55s loadgenerator 1/1 1 1 4m55s paymentservice 1/1 1 1 4m55s productcatalogservice 1/1 1 1 4m55s recommendationservice 1/1 1 1 4m56s redis-cart 1/1 1 1 4m54s shippingservice 1/1 1 1 4m54s
Membuat repositori
Buat repositori untuk menyimpan gambar pengekspor metrik.
Buat repositori Docker baru:
gcloud artifacts repositories create main --repository-format=docker \ --location=$REGION \ --description="docker repository"
Siapkan autentikasi ke repositori Docker:
gcloud auth configure-docker $REGION-docker.pkg.dev
Deploy image dengan menjalankan perintah berikut:
gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE
Men-deploy aplikasi
Di bagian berikut, Anda akan menggunakan Terraform untuk melakukan tugas-tugas berikut:
- Buat Akun Layanan dan tetapkan izin yang diperlukan untuk mengelola dan berinteraksi dengan resource Google Cloud.
- Memberikan peran pelihat pemantauan, editor data BigQuery, pemilik data BigQuery, pengguna tugas BigQuery, dan peran pemanggil Cloud Run ke Akun Layanan.
- Deploy tugas Cloud Run yang mengambil image Docker dari Artifact Registry dan menjalankannya dengan konfigurasi yang ditentukan.
- Buat tugas Cloud Scheduler yang memicu layanan Cloud Run setiap hari.
- Buat set data, tabel, dan tampilan BigQuery untuk menyimpan data metrik serta rekomendasi.
Mengonfigurasi Terraform
Tetapkan variabel lingkungan konfigurasi:
export TF_VAR_BIGQUERY_DATASET=gke_metrics_dataset export TF_VAR_BIGQUERY_TABLE=gke_metrics export TF_VAR_RECOMMENDATION_WINDOW_SECONDS=1209600 export TF_VAR_RECOMMENDATION_DISTANCE=86400 export TF_VAR_LATEST_WINDOW_SECONDS=600 export TF_VAR_METRIC_WINDOW=259200 export TF_VAR_METRIC_DISTANCE=600
Perintah ini mencakup hal berikut:
TF_VAR_BIGQUERY_DATASET
danTF_VAR_BIGQUERY_TABLE
: menyimpan data metrik GKE.TF_VAR_RECOMMENDATION_WINDOW_SECONDS
: jangka waktu untuk rekomendasi VPA. Default-nya adalah 1.209.600 detik, atau 14 hari.TF_VAR_RECOMMENDATION_DISTANCE
: interval saat titik data rekomendasi VPA ditampilkan. Defaultnya adalah 86.400 detik, atau setiap 1 hari.TF_VAR_LATEST_WINDOW_SECONDS
: jangka waktu untuk mendapatkan nilai resource terbaru yang diminta dan membatasi nilai resource. Default-nya adalah 600 detik, atau 10 menit.METRIC_WINDOW
: menetapkan jangka waktu untuk metrik penggunaan dan pemanfaatan GKE. Durasi defaultnya adalah 259.200 detik, atau 3 hari.METRIC_DISTANCE
: interval saat titik data ditampilkan. Default-nya adalah 600 detik, atau setiap 10 menit.
Sesuaikan nilai ini berdasarkan kebutuhan workload Anda. Misalnya, untuk batch workload yang berjalan sebulan sekali, update
TF_VAR_RECOMMENDATION_WINDOW_SECONDS
danMETRIC_WINDOW
menjadi2592000
detik (30 hari).
Men-deploy konfigurasi Terraform
Inisialisasi, validasi, dan terapkan konfigurasi Anda:
terraform -chdir=terraform init terraform -chdir=terraform validate terraform -chdir=terraform apply -var project_id=$PROJECT_ID -var region=$REGION -var image=$IMAGE
Perintah ini menyediakan rencana eksekusi dan meminta persetujuan Anda sebelum melakukan perubahan apa pun. Tinjau rencana, dan jika semuanya seperti yang diharapkan, ketik
yes
untuk melanjutkan.Setelah perintah penerapan berhasil diselesaikan, resource Anda akan dibuat dan dikelola oleh Terraform.
Jalankan tugas Cloud Scheduler secara manual:
gcloud scheduler jobs run recommendation-schedule --location ${REGION}
Memverifikasi Deployment
Pilih tab Logs di halaman detail
workload-recommendations
.Pastikan log metrik sedang diproses di konsol Cloud Run:
Log menunjukkan metrik yang sedang ditulis ke BigQuery. Output akan mirip dengan yang berikut ini:
INFO - Building Row INFO - Successfully wrote 12 rows to BigQuery table [PROJECT_ID].gke_metric_dataset.gke_metrics. INFO - Run Completed
Jika output tidak cocok, tunggu lima menit, lalu jalankan perintah
gcloud scheduler jobs run recommendation-schedule --location $REGION
.
Melihat rekomendasi container di BigQuery
Buka halaman BigQuery di Konsol Google Cloud.
Verifikasi bahwa data terlihat dalam tabel
gke_metrics
dan tampilancontainer_recommendations
. Bergantung pada jumlah workload, mungkin perlu waktu beberapa menit untuk menulis semua metrik ke BigQuery.Di editor kueri, pilih semua baris dalam tampilan
container_recommendations
:SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`
Program ini mengekstrak metrik berikut dari pemantauan cloud:
Detail workload: project ID, nama cluster, pengontrol, dan nama container.
Penggunaan dan pemakaian CPU/memori: jumlah CPU dan memori yang sedang digunakan oleh workload, serta persentase CPU dan memori yang sedang digunakan.
Permintaan dan batas: jumlah CPU dan memori yang diminta untuk workload, serta jumlah CPU dan memori maksimum yang diizinkan untuk workload.
Rekomendasi workload CPU dan memori: rekomendasi jumlah CPU dan memori yang harus dialokasikan ke workload untuk memastikan bahwa workload berjalan lancar, berdasarkan rekomendasi VPA untuk Deployment serta penggunaan sebenarnya dan menargetkan pemanfaatan untuk objek non-Deployment.
Memvisualisasikan rekomendasi di Looker Studio
Looker Studio adalah platform business intelligence mandiri gratis yang memungkinkan Anda membangun dan menggunakan visualisasi data, dasbor, dan laporan. Dengan Looker Studio, Anda dapat terhubung ke data, membuat visualisasi, dan berbagi insight dengan orang lain.
Gunakan Looker Studio untuk memvisualisasikan data dalam tampilan container_recommendations
BigQuery:
- Buka template dasbor Penyesuaian Ukuran Workload
- Klik Use my own data.
- Pilih project Anda.
- Untuk Dataset, pilih
gke_metric_dataset
. - Untuk Table, pilih
container_recommendations
. - Klik Tambahkan.
- Klik Add to Report.
Detail template Looker Studio
Halaman detail template Looker Studio memberikan informasi berikut:
- GKE Workload Rightsizing Overview: memberikan ringkasan tentang cluster Anda, termasuk:
- Jumlah workload Best Effort dan Burstable yang berisiko mengalami masalah keandalan dan performa.
- Potensi penghematan resource memori dan CPU. Nilai positif menunjukkan penyediaan yang berlebihan, sementara nilai negatif menunjukkan penyediaan yang kurang.
- Workload Recommendations: Memberikan rekomendasi untuk permintaan dan batas CPU serta memori.
- GKE Workloads at Risk: Menunjukkan workload yang berisiko terbesar mengalami masalah keandalan dan performa.
- History - Workload Rightsizing - How are we doing?: Memberikan tampilan historis tentang seberapa baik penyesuaian ukuran workload dan pengurangan jumlah workload Best Effort telah diimplementasikan.
Rekomendasi CPU diminta dan batasi container
Jika nilai batas dan CPU diminta pada workload sama, QoS dianggap sebagai Guaranteed, dan rekomendasi CPU ditetapkan ke nilai maksimum dalam periode 14 hari. Jika tidak, persentil ke-95 dari rekomendasi CPU diminta dalam waktu 14 hari akan digunakan.
Jika nilai batas dan permintaan CPU sama, rekomendasi untuk batas CPU ditetapkan ke rekomendasi VPA permintaan CPU maksimum hanya untuk objek Deployment dan penggunaan CPU dengan target penggunaan 70%. Jika permintaan dan batas workload tidak sama, rasio batas yang ada akan digunakan.
Rekomendasi memori diminta dan batasi container
Rekomendasi memori menggunakan rekomendasi VPA maksimum hanya untuk objek Deployment dan penggunaan memori maksimum dengan target penggunaan 80% untuk memastikan keandalan workload. Anda dapat memperbarui nilai target pemanfaatan dalam kueri tampilan container_recommendation
.
Praktik terbaiknya adalah menggunakan jumlah memori yang sama untuk permintaan dan batas karena memori adalah resource yang tidak dapat dikompresi. Saat memori habis, Pod harus dihapus. Agar Pod tidak dihapus dan mengurangi kestabilan lingkungan, Anda harus menyetel memori yang diminta ke batas memori.
Memprioritaskan rekomendasi
Nilai prioritas ditetapkan ke setiap baris untuk menampilkan workload yang memerlukan perhatian segera berdasarkan rekomendasi. Unit CPU dan memori berbeda. Untuk menormalisasi unit, rasio harga sesuai permintaan jenis mesin E2 antara CPU dan memori yang telah ditetapkan akan digunakan sebagai perkiraan untuk mengonversi unit memori menjadi unit CPU.
Prioritas dihitung menggunakan formula berikut:
priority = (CPU requested - CPU recommendation) + ((memory requested -
memory recommendation) / (vCPUs on-demand pricing /memory on-demand pricing ))
Untuk Autopilot, total resource yang diminta oleh konfigurasi deployment Anda harus berada dalam nilai minimum dan maksimum yang didukung.
Melihat rekomendasi VPA untuk beberapa project
Untuk melihat rekomendasi container VPA di beberapa project, gunakan project baru sebagai project pencakupan.
Saat men-deploy project ini di lingkungan produksi, tambahkan semua project yang ingin Anda analisis ke cakupan metrik project yang baru.
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
Cara termudah untuk menghindari penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Menghapus project Google Cloud:
gcloud projects delete PROJECT_ID
Langkah selanjutnya
- Pelajari lebih lanjut pengoptimalan biaya GKE di Praktik terbaik untuk menjalankan aplikasi Kubernetes yang hemat biaya di GKE.
- Temukan rekomendasi desain dan praktik terbaik untuk mengoptimalkan biaya workload Google Cloud di Framework Arsitektur Google Cloud: Pengoptimalan biaya.
- Pelajari lebih lanjut cara mengoptimalkan biaya cluster pada periode permintaan rendah di Mengurangi biaya dengan menurunkan skala cluster GKE di luar jam puncak.
- Pelajari lebih lanjut pengoptimalan biaya GKE di Memantau cluster GKE untuk pengoptimalan biaya menggunakan Monitoring.