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 kebutuhan 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 serta menyimpan komponen dan konfigurasi untuk Autoscaler di satu tempat. 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. Dalam tutorial ini, Anda dapat menyiapkan dan mengaktifkan penagihan dan API untuk kedua project ini secara terpisah.

Dokumen ini adalah bagian dari rangkaian:

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

Tujuan

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

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.

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 mengetahui contoh cara menghitung biaya instance Spanner, lihat 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. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

  2. Di Cloud Shell, clone repositori GitHub berikut:

    git clone https://github.com/cloudspannerecosystem/autoscaler
    
  3. Ekspor 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 menyiapkan project Autoscaler untuk deployment.

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  3. Enable the Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud 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 untuk Terraform yang akan digunakan guna membuat semua resource di infrastruktur Anda:

    gcloud iam service-accounts create terraformer --display-name "Terraform service account"
    
  7. Berikan peran project owner (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 akan men-deploy Autoscaler dalam mode per project, Anda dapat langsung ke Men-deploy Autoscaler.

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

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

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  2. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

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

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

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

    Memberikan peran ini ke akun layanan akan memungkinkannya 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-modul ini berada di direktori berikut:

Direktori Konten direktori
terraform/ Konfigurasi level atas, 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 Cloud Functions Poller dan Scaler, serta 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 akan menyiapkan instance yang ada untuk memantau 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 diberi nama autoscale-test.

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

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

    cd "${AUTOSCALER_DIR}"
    terraform init
    

    Perintah ini juga menginisialisasi direktori Terraform per project.

  4. Impor 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 untuk 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 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 yang sering terjadi di penyedia Terraform Google. Dalam hal ini, coba lagi dengan perintah berikut: terraform apply -parallelism=1.

Mengimpor instance Spanner Anda

Jika sudah memiliki instance Spanner yang ingin diimpor untuk Terraform agar dapat mengelolanya, ikuti petunjuk di bagian ini. Jika tidak, langsung buka 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 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 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 harus mengonfigurasi parameternya.

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

    Buka Cloud Scheduler

  2. Pilih kotak centang 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 ditetapkan menggunakan array JSON. Setiap elemen dalam array mewakili instance Spanner yang memiliki jadwal tugas Autoscaler yang sama.

    Untuk 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 eksekusi tugas terjadwal berikutnya.

    Jika terdapat 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 di Cloud Functions Poller dan Scaler.

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

    Buka Logs Explorer

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

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

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

  4. Untuk melihat pesan dari Scaler Cloud Functions saja, klik kotak Query preview dan ganti filter sebelumnya di kotak teks Query builder dengan teks berikut ini:

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

    Di bagian Query results, 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-fungsi seperti mencatat frekuensi peristiwa penskalaan otomatis, atau di diagram Cloud Monitoring dan kebijakan pemberitahuan.

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 kapasitas komputasi. Anda dapat memastikan apakah alat ini berfungsi dengan mengubah setelan ukuran minimum (minSize) menjadi 2. Jika alat berjalan seperti yang diharapkan, instance Spanner akan diskalakan menjadi 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. Pilih kotak centang 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 Query preview 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 Jump to Now hingga Anda melihat pesan log berikut:

    Scaling spanner instance to 2 NODES

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

    Buka Spanner

  11. Klik instance autoscale-test.

    Di bagian Overview, pastikan jumlah node saat ini adalah 2. Pengujian cepat ini menunjukkan peristiwa penyebaran skala dengan memodifikasi parameter Autoscaler. Anda dapat melakukan uji beban dengan alat seperti YCSB untuk menyimulasikan Autoscaler yang memicu peristiwa penskalaan berdasarkan pemakaian.

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. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya