Men-deploy alat Autoscaler per project atau terpusat untuk Spanner


Tutorial ini menunjukkan cara menyiapkan infrastruktur alat Autoscaler untuk Spanner. Tutorial ini menunjukkan dua cara untuk menyiapkan infrastruktur, sesuai dengan persyaratan Anda:

  • Topologi deployment per project. Kami merekomendasikan topologi ini untuk tim independen yang ingin mengelola konfigurasi dan infrastruktur Autoscaler mereka sendiri. Topologi deployment per project juga merupakan titik awal yang baik untuk menguji kemampuan Autoscaler.
  • Topologi deployment terpusat. Kami merekomendasikan topologi ini untuk tim yang mengelola konfigurasi dan infrastruktur satu atau beberapa instance Spanner sekaligus menyimpan komponen dan konfigurasi untuk Autoscaler di tempat terpusat. Dalam topologi terpusat, selain project Autoscaler, Anda menyiapkan project kedua, yang dalam tutorial ini disebut sebagai Project aplikasi. Project Aplikasi menyimpan resource aplikasi, termasuk Spanner. Anda akan menyiapkan dan mengaktifkan penagihan dan API untuk dua project ini secara terpisah dalam tutorial ini.

Dokumen ini adalah bagian dari rangkaian:

Seri ini ditujukan untuk tim IT, Operasi, dan Site Reliability Engineering (SRE) yang ingin mengurangi overhead operasional dan mengoptimalkan biaya penempatan Spanner.

Tujuan

  • Men-deploy Autoscaler menggunakan topologi deployment per project atau terpusat.
  • Mengimpor instance Spanner yang ada ke status Terraform.
  • Konfigurasi Autoscaler.

Biaya

Dalam dokumen ini, Anda akan 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.

Biaya yang terkait dengan pengoperasian komponen Autoscaler saat Anda menerapkan tutorial ini harus nol atau mendekati nol. Namun, estimasi ini tidak mencakup biaya untuk instance Spanner. Untuk contoh cara menghitung biaya instance Spanner, lihat Melakukan penskalaan otomatis Spanner.

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

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. Di Cloud Shell, clone repositori GitHub berikut:

    git clone https://github.com/cloudspannerecosystem/autoscaler
    
  3. Mengekspor variabel untuk direktori kerja tempat file konfigurasi Terraform untuk setiap topologi berada:

    export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/per-project"
    

Menyiapkan project Autoscaler

Di bagian ini, Anda akan menyiapkan project Autoscaler untuk di-deploy.

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  3. Enable the Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, Cloud Build, and Cloud Scheduler APIs.

    Enable the APIs

  4. Di Cloud Shell, tetapkan variabel lingkungan dengan ID project Autoscaler Anda:

    export PROJECT_ID=INSERT_YOUR_PROJECT_ID
    gcloud config set project "${PROJECT_ID}"
    
  5. Tetapkan region dan zona serta lokasi App Engine (untuk Cloud Scheduler dan Firestore untuk infrastruktur Autoscaler:

    export REGION=us-central1
    export ZONE=us-central1-c
    export APP_ENGINE_LOCATION=us-central
    
  6. Buat akun layanan yang akan digunakan Terraform untuk membuat semua resource di infrastruktur Anda:

    gcloud iam service-accounts create terraformer --display-name "Terraform service account"
    
  7. Berikan peran pemilik project (roles/owner) ke akun layanan:

    gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
        --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    
  8. Buat file kunci akun layanan:

    gcloud iam service-accounts keys create \
        --iam-account "terraformer@${PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
    
  9. Jika project Anda belum memiliki instance Firestore, buat instance:

    gcloud app create --region="${APP_ENGINE_LOCATION}"
    gcloud alpha firestore databases create --region="${APP_ENGINE_LOCATION}"
    

Menyiapkan project Aplikasi

Jika men-deploy Autoscaler dalam mode per project, Anda dapat langsung ke bagian Men-deploy Autoscaler.

Dalam topologi deployment terpusat, semua komponen Autoscaler berada dalam project yang sama. Instance Spanner dapat berada di project yang berbeda.

Di bagian ini, Anda akan mengonfigurasi project Aplikasi tempat instance Spanner berada. Instance Spanner menayangkan satu atau beberapa aplikasi tertentu. Dalam tutorial ini, tim yang bertanggung jawab atas aplikasi ini diasumsikan terpisah dari tim yang bertanggung jawab atas infrastruktur dan konfigurasi Autoscaler.

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  3. Enable the Spanner API.

    Enable the API

  4. Di Cloud Shell, tetapkan variabel lingkungan:

    export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
    

    Ganti INSERT_YOUR_APP_PROJECT_ID dengan ID project Aplikasi.

  5. Berikan peran pemilik (roles/owner) kepada akun layanan terraformer yang Anda buat di project Aplikasi:

    gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \
        --member "serviceAccount:terraformer@${PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    

    Dengan memberikan peran ini ke akun layanan, akun layanan tersebut dapat membuat resource.

  6. Tetapkan project ID Aplikasi di variabel lingkungan Terraform yang sesuai:

    export TF_VAR_app_project_id="${APP_PROJECT_ID}"
    

Men-deploy Autoscaler

Di bagian ini, Anda akan men-deploy komponen yang membentuk Autoscaler menggunakan modul Terraform yang telah dikonfigurasi sebelumnya. File Terraform yang menentukan modul ini berada di direktori berikut:

Direktori Konten direktori
terraform/ Konfigurasi tingkat teratas, yang mencakup setiap opsi deployment dan modul yang dapat digunakan kembali.
terraform/cloud-functions/per-project/ Petunjuk untuk opsi deployment per project.
terraform/modules/autoscaler-functions/ Konfigurasi fungsi Cloud Run Poller dan Scaler, serta topik Pub/Sub
terraform/modules/scheduler/ Konfigurasi Cloud Scheduler untuk memicu polling.
terraform/modules/spanner/ Konfigurasi database Spanner
terraform/cloud-functions/centralized/ Petunjuk untuk opsi deployment terpusat.
  1. Di Cloud Shell, tetapkan project ID, region, dan zona di variabel lingkungan Terraform yang sesuai:

    export TF_VAR_project_id="${PROJECT_ID}"
    export TF_VAR_region="${REGION}"
    export TF_VAR_zone="${ZONE}"
    
  2. Pada langkah ini, Anda menyiapkan instance yang ada untuk dipantau Autoscaler, atau membuat dan menyiapkan instance baru.

    Jika Anda sudah memiliki instance Spanner, tetapkan nama instance dalam variabel berikut:

    export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
    

    Jika Anda ingin membuat instance Spanner baru untuk menguji Autoscaler, tetapkan variabel berikut:

    export TF_VAR_terraform_spanner=true
    

    Instance Spanner yang dibuat Terraform bernama autoscale-test.

    Untuk mengetahui informasi selengkapnya tentang cara menyiapkan Terraform untuk mengelola instance Spanner, lihat Mengimpor instance Spanner.

  3. Ubah direktori kerja Anda menjadi direktori per project Terraform:

    cd "${AUTOSCALER_DIR}"
    terraform init
    

    Perintah ini juga melakukan inisialisasi direktori per project Terraform.

  4. Mengimpor aplikasi App Engine yang ada ke status Terraform:

    terraform import module.scheduler.google_app_engine_application.app "${PROJECT_ID}"
    
  5. Buat infrastruktur Autoscaler:

    terraform apply -parallelism=2
    

    Anda akan melihat pesan berikut yang meminta Anda memverifikasi bahwa daftar resource yang akan dibuat Terraform sudah benar:

       Do you want to perform these actions?
       Terraform will perform the actions described above.
       Only 'yes' will be accepted to approve.
       Enter a value:
       

    Setelah Anda memverifikasi resource, ketik yes saat diminta.

    Saat menjalankan perintah ini di Cloud Shell, Anda mungkin melihat pesan error berikut:

    "Error: cannot assign requested address"

    Error ini adalah masalah umum di penyedia Google Terraform. Dalam hal ini, coba lagi dengan perintah berikut: terraform apply -parallelism=1.

Mengimpor instance Spanner

Jika Anda sudah memiliki instance Spanner yang ingin diimpor agar Terraform dapat mengelolanya, ikuti petunjuk di bagian ini. Jika tidak, lanjutkan ke Mengonfigurasi Autoscaler.

  1. Di Cloud Shell, cantumkan instance Spanner Anda:

    gcloud spanner instances list
    
  2. Tetapkan variabel berikut dengan nama instance yang ingin Anda skalakan secara otomatis:

    SPANNER_INSTANCE_NAME=YOUR_SPANNER_INSTANCE_NAME
    
  3. Buat file konfigurasi Terraform dengan resource google_spanner_instance kosong:

    echo "resource \"google_spanner_instance\" \"${SPANNER_INSTANCE_NAME}\" {}" > "${SPANNER_INSTANCE_NAME}.tf"
    
  4. Impor instance Spanner ke status Terraform:

    terraform import "google_spanner_instance.${SPANNER_INSTANCE_NAME}" "${SPANNER_INSTANCE_NAME}"
    
  5. Setelah impor selesai, perbarui file konfigurasi Terraform untuk instance Anda dengan atribut instance yang sebenarnya:

    terraform state show -no-color "google_spanner_instance.${SPANNER_INSTANCE_NAME}" \
        | grep -vE "(id|num_nodes|state|timeouts).*(=|\{)" \
        > "${SPANNER_INSTANCE_NAME}.tf"
    

    Jika Anda memiliki instance Spanner tambahan untuk diimpor, ulangi proses impor.

Mengonfigurasi Autoscaler

Setelah men-deploy Autoscaler, Anda akan mengonfigurasi parameternya.

  1. Di konsol Google Cloud, buka halaman Cloud Scheduler.

    Buka Cloud Scheduler

  2. Centang kotak di samping tugas poll-main-instance-metrics yang dibuat oleh deployment Autoscaler.

  3. Klik Edit.

  4. Ubah parameter untuk Autoscaler yang ditampilkan di kolom payload.

    Berikut adalah contoh payload:

        [
            {
                "projectId": "my-spanner-project",
                "instanceId": "spanner1",
                "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling",
                "units": "NODES",
                "minSize": 1,
                "maxSize": 3
            },{
                "projectId": "different-project",
                "instanceId": "another-spanner1",
                "scalerPubSubTopic": "projects/my-spanner-project/topics/spanner-scaling",
                "units": "PROCESSING_UNITS",
                "minSize": 500,
                "maxSize": 3000,
                "scalingMethod": "DIRECT"
            }
        ]
       

    Payload ditentukan menggunakan array JSON. Setiap elemen dalam array mewakili instance Spanner yang memiliki jadwal tugas Autoscaler yang sama.

    Untuk mengetahui detail selengkapnya tentang parameter dan nilai defaultnya, lihat README untuk komponen Poller.

  5. Untuk menyimpan perubahan, klik Perbarui.

    Autoscaler kini telah dikonfigurasi dan siap untuk mulai memantau dan menskalakan instance Anda dalam tugas terjadwal berikutnya yang dijalankan.

    Jika ada error sintaksis dalam payload JSON, Anda dapat memeriksanya di konsol Google Cloud pada halaman Logs Explorer sebagai entri log dari fungsi tf-poller-function.

    Buka Logs Explorer

    Berikut adalah contoh error yang mungkin Anda lihat:

    SyntaxError: Unexpected token errortext in JSON at position 15 JSON.parse

    Untuk menghindari error sintaksis, gunakan editor yang dapat memformat ulang dan memvalidasi JSON.

Memantau Autoscaler

Pada langkah ini, Anda akan menyiapkan pemantauan pada fungsi Cloud Run Poller dan Scaler.

  1. Di konsol Google Cloud, buka halaman Logs Explorer.

    Buka Logs Explorer

  2. Klik Pratinjau kueri dan masukkan filter berikut ke dalam Query builder:

    resource.type="cloud_function"
    resource.labels.function_name=~"tf-.*-function"
    
  3. Klik Run Query.

    Di bagian Hasil kueri, Anda dapat melihat semua pesan dari fungsi Autoscaler. Karena polling hanya berjalan setiap 2 menit, Anda mungkin perlu menjalankan ulang kueri untuk menerima pesan log.

  4. Untuk hanya melihat pesan dari fungsi Cloud Run Scaler, klik kotak Pratinjau kueri dan ganti filter sebelumnya di kotak teks Pembuat kueri dengan kode berikut:

    resource.type="cloud_function"
    resource.labels.function_name="tf-scaler-function"
    
  5. Klik Run Query.

    Di bagian Hasil kueri, karena filter yang diterapkan ke payload teks, Anda hanya melihat pesan dari fungsi Scaler yang terkait dengan saran dan keputusan penskalaan.

    Dengan menggunakan kueri filter atau filter serupa, Anda dapat membuat metrik berbasis log. Metrik ini berguna untuk fungsi seperti mencatat frekuensi peristiwa penskalaan otomatis, atau dalam kebijakan pemberitahuan dan diagram Cloud Monitoring.

Menguji Autoscaler

Di bagian ini, Anda akan memverifikasi operasi Autoscaler dengan mengubah ukuran instance minimum dan memantau log.

Saat Anda men-deploy Autoscaler dengan database pengujian, Autoscaler dikonfigurasi untuk menggunakan NODES sebagai unit untuk kapasitas komputasi. Anda dapat memverifikasi apakah alat berfungsi dengan mengubah setelan untuk ukuran minimum (minSize) menjadi 2. Jika alat berjalan seperti yang diharapkan, instance Spanner akan diskalakan ke 2 node. Jika menggunakan database yang ada untuk tutorial ini, Anda mungkin melihat nilai yang berbeda.

  1. Di konsol Google Cloud, buka halaman Cloud Scheduler.

    Buka Cloud Scheduler

  2. Centang kotak di samping tugas poll-main-instance-metrics yang dibuat oleh deployment Autoscaler.

  3. Klik Edit.

  4. Di kolom Job payload, ubah nilai minSize dari 1 menjadi 2:

    "minSize": 2
    
  5. Untuk menyimpan perubahan, klik Perbarui.

  6. Buka halaman Logs Explorer.

    Buka Logs Explorer

  7. Klik Pratinjau kueri dan masukkan filter berikut ke dalam Query builder:

    resource.type="cloud_function"
    resource.labels.function_name="tf-scaler-function"
    
  8. Klik Run Query.

  9. Klik Langsung ke Sekarang hingga Anda melihat pesan log berikut:

    Scaling spanner instance to 2 NODES

  10. Untuk memverifikasi bahwa Spanner telah diskalakan ke 2 node, di konsol Google Cloud, buka halaman konsol Spanner.

    Buka Spanner

  11. Klik instance autoscale-test.

    Di bagian ringkasan, pastikan jumlah node sekarang 2. Pengujian cepat ini menunjukkan peristiwa penskalaan keluar dengan mengubah parameter Autoscaler. Anda dapat melakukan pengujian beban dengan alat seperti YCSB untuk menyimulasikan Autoscaler yang memicu peristiwa penskalaan berdasarkan penggunaan.

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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Langkah selanjutnya