Men-deploy alat Autoscaler terdistribusi untuk Spanner


Tutorial ini menunjukkan cara menyiapkan infrastruktur alat Autoscaler untuk Spanner menggunakan topologi deployment terdistribusi. Dalam opsi deployment yang ditampilkan dalam tutorial ini, semua komponen Autoscaler berada dalam satu project, kecuali untuk Cloud Scheduler, topik Forwarder, dan fungsi yang terkait.

Tutorial ini ditujukan untuk tim IT, Operasi, dan Site Reliability Engineering yang ingin mengurangi beban operasional dan mengoptimalkan biaya deployment Spanner mereka. Dokumen ini adalah bagian dari rangkaian:

Topologi deployment terdistribusi menggabungkan fitur-fitur bermanfaat berikut, baik untuk deployment per project maupun terpusat:

  • Tim yang memiliki instance Spanner, yang disebut tim aplikasi, mengelola parameter konfigurasi Autoscaler untuk instance mereka dengan tugas Cloud Scheduler yang mereka miliki.
  • Di luar parameter konfigurasi, tim pusat akan mengelola infrastruktur Autoscaler lainnya, sehingga meminimalkan overhead pengelolaan.

Arsitektur

Diagram berikut menunjukkan arsitektur Autoscaler dalam topologi deployment terdistribusi:

Topologi deployment terdistribusi.

Untuk penjelasan tentang komponen Autoscaler dan setiap langkah bernomor dalam alur peristiwa, lihat Penskalaan otomatis Spanner.

Fungsi forwarder

Cloud Scheduler hanya dapat memublikasikan pesan ke topik dalam project yang sama. Jadi, untuk topologi terdistribusi, tutorial ini memperkenalkan komponen menengah yang disebut fungsi Forwarder.

Fungsi Forwarder mengambil pesan yang dipublikasikan ke Pub/Sub dari Cloud Scheduler, memeriksa sintaksis JSON-nya, dan meneruskannya ke topik Pub/Sub Poller. Topik dapat menjadi milik project terpisah dari Cloud Scheduler.

Diagram berikut menunjukkan komponen yang digunakan untuk mekanisme penerusan:

Mekanisme penerusan.

Seperti yang ditunjukkan dalam diagram sebelumnya, instance Spanner berada dalam project bernama Application 1 dan Application 2:

  1. Cloud Scheduler adalah project yang sama dengan instance Spanner.
  2. (2a) Cloud Scheduler memublikasikan pesannya ke topik Forwarder di project Aplikasi 1 dan Aplikasi 2.

    (2b) Fungsi Forwarder membaca pesan dari topik Forwarder.

    (2c) Fungsi Forwarder meneruskan pesan ke topik Polling yang ada di project Autoscaler.

  3. Fungsi Poller membaca pesan dari topik polling dan proses berlanjut, seperti yang dijelaskan dalam Penskalaan otomatis Spanner.

Tujuan

  • Men-deploy Autoscaler menggunakan model deployment terdistribusi.
  • 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.

Setelah mengikuti petunjuk dalam tutorial ini, biaya yang terkait dengan operasi komponen Autoscaler 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

Dalam topologi deployment terdistribusi, 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.

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

  2. Di Cloud Shell, clone repositori berikut:

    git clone https://github.com/cloudspannerecosystem/autoscaler
    
  3. Ekspor variabel untuk direktori kerja:

    export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/autoscaler-project"
    export APP_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/app-project"
    

Menyiapkan project Autoscaler

Di bagian ini, Anda akan menyiapkan deployment project yang berisi semua infrastruktur Autoscaler terpusat, kecuali untuk Cloud Scheduler.

  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, and Cloud Build APIs.

    Enable the APIs

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

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

     export AUTO_SCALER_REGION=us-central1
     export AUTO_SCALER_ZONE=us-central1-c
     export AUTO_SCALER_APP_ENGINE_LOCATION=us-central
    
  6. Buat akun layanan:

    gcloud iam service-accounts create terraformer --display-name "Terraform service account"
    

    Terraform menggunakan akun ini untuk membuat semua resource di infrastruktur Anda.

  7. Berikan peran Project Owner ke akun layanan:

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

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

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

Men-deploy Autoscaler

Di bagian ini, Anda akan men-deploy komponen yang membentuk Autoscaler menggunakan file Terraform di direktori berikut:

Direktori Konten direktori
terraform/ Konfigurasi level atas, yang mencakup setiap opsi deployment dan modul yang dapat digunakan kembali.
terraform/cloud-functions/distributed/autoscaler-project/ Konfigurasi untuk project tempat Autoscaler berada. Mendelegasikan ke modul Autoscaler.
terraform/modules/autoscaler-functions Konfigurasi topik Cloud Functions Poller dan Scaler, serta Pub/Sub.
  1. Di Cloud Shell, tetapkan ID project, region, zona, dan lokasi App Engine di variabel lingkungan Terraform yang sesuai:

    export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}"
    export TF_VAR_region="${AUTO_SCALER_REGION}"
    export TF_VAR_zone="${AUTO_SCALER_ZONE}"
    export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
    
  2. Ubah direktori ke direktori scaler-project Terraform dan lakukan inisialisasi:

    cd "${AUTOSCALER_DIR}"
    terraform init
    
  3. Buat infrastruktur Autoscaler:

    terraform apply -parallelism=2
    

    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 yang sering terjadi di penyedia Terraform Google. Dalam hal ini, coba lagi dengan perintah berikut:

    terraform apply -parallelism=1
    

Menyiapkan project Aplikasi

Di bagian ini, dalam project yang berisi instance Spanner, Anda menyiapkan deployment topik dan fungsi Cloud Scheduler dan Forwarder.

  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, Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Functions, and Cloud Build APIs.

    Enable the APIs

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

    export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID
    gcloud config set project "${APP_PROJECT_ID}"
    
  5. Tetapkan region dan zona serta App Engine Location untuk project Application:

    export APP_REGION=us-central1
    export APP_ZONE=us-central1-c
    export APP_APP_ENGINE_LOCATION=us-central
    
  6. Buat akun layanan untuk Terraform yang akan digunakan guna membuat 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 "${APP_PROJECT_ID}" \
        --member "serviceAccount:terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com" \
        --role roles/owner
    
  8. Buat file kunci akun layanan:

     gcloud iam service-accounts keys create \
        --iam-account "terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com"  "${APP_DIR}/key.json"
    
  9. Buat aplikasi untuk mengaktifkan Cloud Scheduler:

    gcloud app create --region="${APP_APP_ENGINE_LOCATION}"
    

    Anda tidak perlu membuat database Firestore karena status disimpan dalam project Autoscaler.

Men-deploy infrastruktur project Aplikasi

Komponen Terraform yang membentuk project Aplikasi ada di direktori berikut:

Di bagian ini, Anda akan menggunakan file Terraform untuk men-deploy komponen yang membentuk project Aplikasi.

  1. Di Cloud Shell, tetapkan project ID, region, zona, dan lokasi App Engine di variabel lingkungan Terraform yang sesuai:

      export TF_VAR_project_id="${APP_PROJECT_ID}"
      export TF_VAR_region="${APP_REGION}"
      export TF_VAR_zone="${APP_ZONE}"
      export TF_VAR_location="${APP_APP_ENGINE_LOCATION}"
    
  2. Tetapkan project ID tempat status Autoscaler disimpan:

    export TF_VAR_state_project_id="${AUTO_SCALER_PROJECT_ID}"
    

    Status Autoscaler menyertakan stempel waktu saat peristiwa penskalaan dipicu untuk setiap instance.

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

    Jika tidak ingin membuat instance Spanner baru karena sudah memiliki instance untuk dipantau Autoscaler, tetapkan nama instance dalam variabel berikut:

    export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
    

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

  4. Ubah direktori ke direktori project aplikasi Terraform lalu lakukan inisialisasi:

    cd "${APP_DIR}"
    terraform init
    
  5. Buat infrastruktur dalam project Aplikasi:

    terraform import module.scheduler.google_app_engine_application.app "${APP_PROJECT_ID}"
    terraform apply -parallelism=2
    

    Pastikan daftar resource yang akan dibuat untuk Terraform sudah benar, lalu 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
    

Mengizinkan Forwarder Cloud Functions untuk memublikasikan ke topik Poller

  1. Di Cloud Shell, beralihlah kembali ke direktori project Autoscaler terraform dan pastikan variabel Terraform sudah ditetapkan dengan benar:

    cd "${AUTOSCALER_DIR}"
    
    export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}"
    export TF_VAR_region="${AUTO_SCALER_REGION}"
    export TF_VAR_zone="${AUTO_SCALER_ZONE}"
    export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
    
  2. Tetapkan variabel Terraform untuk akun layanan Forwarder Anda. Perbarui dan tambahkan akun layanan Anda sesuai kebutuhan:

     export TF_VAR_forwarder_sa_emails='["serviceAccount:forwarder-sa@'"${APP_PROJECT_ID}"'.iam.gserviceaccount.com"]'
      terraform apply -parallelism=2
    

    Pastikan daftar resource yang akan dibuat untuk Terraform sudah benar, lalu 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.
    

Memverifikasi deployment Anda

Jika infrastruktur untuk Autoscaler sudah siap, Anda dapat mengonfigurasi parameternya. Untuk mempelajari lebih lanjut, lihat Mengonfigurasi Autoscaler.

Karena Anda membuat deployment terdistribusi dalam tutorial ini, log memiliki properti berikut:

  • Log dari fungsi Poller dan Scaler muncul di Logs Explorer untuk project Autoscaler.
  • Log tentang error sintaksis dalam konfigurasi JSON payload Cloud Scheduler akan muncul di Logs Explorer untuk setiap project Aplikasi. Hal ini memungkinkan tim yang bertanggung jawab atas instance Spanner tertentu memecahkan masalah konfigurasinya secara independen.

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