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 disajikan dalam tutorial ini, semua komponen Autoscaler berada dalam satu project, kecuali Cloud Scheduler, topik Forwarder, dan fungsi yang sesuai.

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

Topologi deployment terdistribusi menggabungkan fitur yang menguntungkan berikut dari deployment per project dan 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 mengelola infrastruktur Autoscaler lainnya, sehingga meminimalkan overhead pengelolaan.

Arsitektur

Diagram berikut menunjukkan arsitektur Autoscaler dalam topologi deployment terdistribusi:

Topologi deployment terdistribusi.

Untuk penjelasan 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 perantara 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 berasal dari project terpisah dari Cloud Scheduler.

Diagram berikut menunjukkan komponen yang digunakan untuk mekanisme penerusan:

Mekanisme penerusan.

Seperti yang ditunjukkan pada diagram sebelumnya, instance Spanner berada dalam project yang 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 dalam project Aplikasi 1 dan Aplikasi 2.

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

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

  3. Fungsi Poller membaca pesan dari topik polling dan prosesnya akan dilanjutkan, seperti yang dijelaskan dalam Autoscaling Spanner.

Tujuan

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

Saat Anda 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 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. Anda akan menyiapkan dan mengaktifkan penagihan dan API untuk dua project ini secara terpisah dalam tutorial ini.

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

    Activate 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 Cloud Scheduler.

  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, 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 pemilik project 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 tingkat teratas, 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 fungsi Cloud Run Poller dan Scaler, serta topik Pub/Sub.
  1. Di Cloud Shell, tetapkan project ID, 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 project scaler Terraform dan inisialisasi:

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

    terraform apply -parallelism=2
    

    Setelah Anda memverifikasi resource, ketikyes 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
    

Menyiapkan project Aplikasi

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

  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, Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run 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 Aplikasi:

    export APP_REGION=us-central1
    export APP_ZONE=us-central1-c
    export APP_APP_ENGINE_LOCATION=us-central
    
  6. Buat akun layanan yang akan digunakan Terraform untuk 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 di project Autoscaler.

Men-deploy infrastruktur project Aplikasi

Komponen Terraform yang membentuk project Aplikasi berada 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 mencakup 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 bernama autoscale-test.

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

    export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
    

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

  4. Ubah direktori ke direktori project aplikasi Terraform dan inisialisasi:

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

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

    Pastikan daftar resource yang akan dibuat 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 umum di penyedia Google Terraform. Dalam hal ini, coba lagi dengan perintah berikut:

    terraform apply -parallelism=1
    

Memberi otorisasi pada fungsi Cloud Run Forwarder untuk memublikasikan ke topik Poller

  1. Di Cloud Shell, beralihlah kembali ke direktori project terraform Autoscaler dan pastikan variabel Terraform 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 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 umum di penyedia Google Terraform. Dalam hal ini, coba lagi dengan perintah berikut:

    terraform apply -parallelism=1.
    

Memverifikasi deployment

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