Menyesuaikan ukuran workload GKE Anda dalam skala besar


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. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

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 sebelumnya 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.

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. 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
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. 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.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. 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
  12. Grant roles to your user account. Run the following command once for each of the following IAM roles: 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: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.

Menyiapkan lingkungan Anda

Untuk menyiapkan lingkungan Anda, ikuti langkah-langkah berikut

  1. 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.

  2. Tetapkan variabel lingkungan default:

    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    gcloud config set compute/zone $ZONE
    
  3. Buat clone repositori kode.

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
    
  4. 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.

  1. 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.

  2. Pastikan contoh aplikasi sudah siap:

    kubectl get deployment
    

    Output akan mirip dengan yang 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.

  1. Buat repositori Docker baru:

    gcloud artifacts repositories create main --repository-format=docker \
        --location=$REGION \
        --description="docker repository"
    
  2. Siapkan autentikasi ke repositori Docker:

    gcloud auth configure-docker $REGION-docker.pkg.dev
    
  3. 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

  1. 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 dan TF_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 dan METRIC_WINDOW menjadi 2592000 detik (30 hari).

Men-deploy konfigurasi Terraform

  1. 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.

  2. Jalankan tugas Cloud Scheduler secara manual:

    gcloud scheduler jobs run recommendation-schedule --location ${REGION}
    

Memverifikasi Deployment

  1. Pilih tab Logs di halaman detail workload-recommendations.

  2. Pastikan log metrik sedang diproses di konsol Cloud Run:

    Buka 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

  1. Buka halaman BigQuery di Konsol Google Cloud.

    Buka BigQuery

  2. Verifikasi bahwa data terlihat dalam tabel gke_metrics dan tampilan container_recommendations. Bergantung pada jumlah workload, mungkin perlu waktu beberapa menit untuk menulis semua metrik ke BigQuery.

  3. 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:

  1. Buka template dasbor Penyesuaian Ukuran Workload
  2. Klik Use my own data.
  3. Pilih project Anda.
  4. Untuk Dataset, pilih gke_metric_dataset.
  5. Untuk Table, pilih container_recommendations.
  6. Klik Add.
  7. 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 berikutnya