Men-deploy aplikasi menggunakan Autopilot GKE dan Spanner


Tutorial ini menjelaskan cara men-deploy aplikasi web dalam container ke cluster Google Kubernetes Engine (GKE) Autopilot, dan menggunakan database Google Spanner di backend untuk menyimpan data. Aplikasi contoh mengelola tabel pemain game. Anda dapat menambahkan dan menghapus pemain melalui antarmuka pengguna grafis (GUI) aplikasi.

Spanner adalah layanan database relasional yang terkelola sepenuhnya, skalabel secara horizontal, dan didistribusikan secara global yang menyediakan transaksi ACID dan semantik SQL tanpa mengorbankan performa dan ketersediaan tinggi.

Sebelum membaca halaman ini, pastikan Anda sudah memahami Kubernetes.

Alasan menggunakan GKE dan Spanner

Sebagai developer, Anda mungkin tidak ingin menghabiskan waktu untuk menghitung jumlah resource komputasi dan penyimpanan yang dibutuhkan aplikasi, memprediksi konsumsi RAM dan CPU selama periode permintaan yang berfluktuasi, atau mengkhawatirkan terjadinya kegagalan aplikasi pada periode beban tertinggi.

Dengan menggunakan GKE Autopilot sebagai layanan Kubernetes yang terkelola sepenuhnya, dan Spanner sebagai layanan database yang terkelola sepenuhnya, Anda dapat mengembangkan dan men-deploy aplikasi dengan lebih cepat di infrastruktur yang stabil, yang menyederhanakan konfigurasi dan pengelolaan resource. GKE Autopilot menangani konfigurasi dan penskalaan infrastruktur untuk menghosting aplikasi Anda dengan menambahkan atau menghapus node ke atau dari cluster, berdasarkan persyaratan saat runtime. Demikian pula, Spanner dapat menyebarkan dan menurunkan skala secara dinamis dengan intervensi manual yang minimal, karena perubahan persyaratan penyimpanan atau komputasi.

Misalnya, katakan saja Anda sedang meluncurkan game blockbuster berikutnya yang Anda harapkan akan menjadi viral, sehingga menarik traffic web yang tinggi dalam minggu peluncurannya. Spanner dapat membantu Anda mengakomodasi throughput yang melonjak ini dengan memberikan kemampuan untuk meningkatkan, mengurangi, atau merealokasikan resource komputasi secara instan sambil tetap mempertahankan ketersediaan aplikasi maksimum dengan GKE Autopilot.

Tujuan

Dalam tutorial ini, Anda akan mempelajari cara:

  • Buat database Spanner yang menyimpan pendaftaran pemain.

  • Mendeploy aplikasi web contoh bernama hello-app-cloud-spanner, dengan antarmuka pengguna grafis (GUI).

Tabel berikut menjelaskan resource Google Cloud yang Anda buat atau gunakan, variabel yang mengidentifikasinya, dan nilai yang ditentukan untuknya guna tujuan tutorial ini:

Resource Variabel Nilai
Google Cloud project ID PROJECT_ID

Project ID yang dibuat saat Anda membuat project.

Contoh: my-gcp-project

Region komputasi COMPUTE_REGION

Region Compute Engine tempat Anda ingin membuat instance Spanner dan cluster GKE. Sebaiknya pilih region yang paling dekat dengan lokasi geografis pelanggan Anda, tetapi untuk tutorial ini, gunakan us-west1.

Instance Spanner - hello-instance
Database Spanner - hello-database
Cluster GKE Autopilot CLUSTER_NAME hello-cluster
Namespace Kubernetes NAMESPACE hello-namespace
Akun layanan Kubernetes KSA_NAME ksa-helloapp
Akun Layanan IAM GSA_NAME gsa-helloapp
Project ID akun layanan IAM GSA_PROJECT Google Cloud PROJECT_ID Anda.

Untuk tujuan tutorial ini, sebaiknya buat resource baru agar penghapusan setelah men-deploy aplikasi contoh mudah dan bebas risiko. Namun, jika sudah memiliki namespace, akun layanan IAM, dan akun layanan Kubernetes, Anda dapat menggunakannya.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru 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

Pastikan untuk menyelesaikan prasyarat berikut:

Pilih atau buat project

Anda dapat menggunakan project yang ada, atau membuat project baru untuk tutorial ini.

  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

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

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Mengaktifkan API

  7. Enable the Artifact Registry, Compute Engine, GKE, and IAM Service Account Credentials APIs.

    Enable the APIs

  8. Menyiapkan Cloud Shell

    Dalam tutorial ini, Anda akan menggunakan Cloud Shell untuk menjalankan perintah gcloud dan kubectl. Cloud Shell adalah lingkungan shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal lebih dulu dengan alat command line Google Cloud CLI dan kubectl.

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

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  10. Sesi Cloud Shell akan terbuka di dalam frame yang lebih rendah di konsol.

    Sebelum menjalankan perintah dalam tutorial ini, pastikan project default Anda ditetapkan ke project ID tempat Anda ingin men-deploy aplikasi contoh. Jika belum ditetapkan, jalankan perintah berikut di Cloud Shell:

    gcloud config set project PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID Anda.

    Memberikan peran IAM

    Pastikan akun Google Cloud Anda memiliki peran IAM yang diperlukan untuk tutorial ini.

  11. Make sure that you have the following role or roles on the project: roles/iam.serviceAccountAdmin, roles/serviceusage.serviceUsageConsumer, roles/iam.serviceAccountUser, roles/iam.securityAdmin, roles/spanner.admin, roles/container.admin

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Buka IAM
    2. Pilih project.
    3. Klik Berikan akses.
    4. Di kolom Akun utama baru, masukkan ID pengguna Anda. Biasanya berupa alamat email untuk Akun Google.

    5. Di daftar Pilih peran, pilih peran.
    6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
    7. Klik Simpan.
    8. Mengonfigurasi Spanner

      Untuk mengonfigurasi Spanner, Anda harus membuat instance Spanner dan database Spanner.

      Membuat instance Spanner

      Instance Spanner adalah alokasi resource yang digunakan oleh database Spanner yang dibuat di instance tersebut.

      Buat instance Spanner bernama hello-instance dengan konfigurasi regional, dan kapasitas komputasi 100 unit pemrosesan.

      gcloud spanner instances create hello-instance \
          --config=regional-COMPUTE_REGION \
          --description="Spanner sample instance" \
          --processing-units=100
      

      Ganti COMPUTE_REGION dengan us-west1 untuk tutorial ini.

      Membuat database Spanner

      Database Spanner mencakup tabel, tabel virtual, dan indeks Anda. Database mewarisi properti dari instance induknya, seperti konfigurasi (regional atau multi-regional), serta kapasitas komputasi dan penyimpanan yang tersedia.

      Buat database Spanner bernama hello-database dengan tabel bernama Players, menggunakan dialek GoogleSQL. Jalankan kueri berikut di Cloud Shell Anda:

      gcloud spanner databases create hello-database \
          --instance=hello-instance \
          --database-dialect=GOOGLE_STANDARD_SQL \
          --ddl="CREATE TABLE Players (
              PlayerUuid STRING(36) NOT NULL,
              FirstName STRING(1024),
              LastName STRING(1024),
              BirthDate DATE) PRIMARY KEY(PlayerUuid)"
      

      Membuat cluster GKE Autopilot

      Setelah mengonfigurasi Spanner, buat cluster Autopilot dan gunakan Workload Identity Federation for GKE untuk mengakses database Anda secara aman dan mudah dikelola.

      Buat cluster Autopilot bernama hello-cluster. Cluster Autopilot mengaktifkan Workload Identity Federation for GKE secara default.

      gcloud container clusters create-auto CLUSTER_NAME \
        --region=COMPUTE_REGION
      

      Ganti kode berikut:

      • CLUSTER_NAME: hello-cluster
      • COMPUTE_REGION: region Compute Engine cluster Anda. Untuk tutorial ini, gunakan region yang sama, us-west1, tempat Anda membuat instance Spanner. Sebaiknya buat instance Spanner dan cluster GKE Autopilot dalam region yang sama untuk mengurangi latensi.

      Diperlukan waktu hingga 8-10 menit untuk membuat cluster.

      Outputnya mirip dengan hal berikut ini:

      NAME: hello-cluster
      LOCATION: us-west1
      MASTER_VERSION: 1.26.5-gke.1200
      MASTER_IP: 192.0.2.1
      MACHINE_TYPE: e2-medium
      NODE_VERSION: 1.26.5-gke.1200
      NUM_NODES: 3
      STATUS: RUNNING
      

      Mengonfigurasi cluster agar menggunakan Workload Identity Federation for GKE

      Konfigurasi cluster Anda agar melakukan autentikasi ke Google Cloud menggunakan Workload Identity Federation untuk GKE sebelum Anda men-deploy aplikasi.

      1. Dapatkan kredensial untuk mengakses cluster Anda:

        gcloud container clusters get-credentials CLUSTER_NAME \
          --region=COMPUTE_REGION
        

        Ganti kode berikut:

        • CLUSTER_NAME: hello-cluster
        • COMPUTE_REGION: us-west1

        Tindakan ini akan memperbarui file kubeconfig dengan informasi endpoint dan kredensial yang sesuai untuk mengarahkan kubectl ke cluster Anda.

      2. Buat namespace yang akan digunakan untuk akun layanan Kubernetes. Anda juga dapat menggunakan namespace default, atau namespace apa pun yang sudah ada.

        kubectl create namespace NAMESPACE
        

        Ganti NAMESPACE dengan hello-namespace, nama untuk namespace baru yang Anda buat.

      3. Buat akun layanan Kubernetes yang akan digunakan untuk aplikasi Anda:

        kubectl create serviceaccount KSA_NAME \
          --namespace NAMESPACE
        

        Ganti kode berikut:

        • KSA_NAME: ksa-helloapp, nama untuk akun layanan Kubernetes baru yang Anda buat.
        • NAMESPACE: hello-namespace
      4. Buat akun layanan IAM untuk aplikasi Anda:

        gcloud iam service-accounts create GSA_NAME \
          --project=GSA_PROJECT
        

        Ganti kode berikut:

        • GSA_NAME: gsa-helloapp, nama untuk akun layanan IAM baru yang Anda buat.
        • GSA_PROJECT: project ID Google Cloud Anda. Dalam tutorial ini, Anda membuat akun layanan IAM di project Google Cloud yang sama tempat Anda men-deploy aplikasi contoh. Oleh karena itu, GSA_PROJECT dan Google Cloud PROJECT_ID Anda sama.
      5. Tambahkan binding kebijakan IAM untuk akun layanan IAM Anda agar dapat membaca dan menulis di Spanner:

        gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role "roles/spanner.admin"
        

        Ganti kode berikut:

        • PROJECT_ID: Google Cloud project ID Anda
        • GSA_NAME: gsa-helloapp

        Contoh:

        gcloud projects add-iam-policy-binding my-gcp-project \
          --member "serviceAccount:[email protected]" \
          --role "roles/spanner.admin"
      6. Izinkan akun layanan Kubernetes untuk meniru identitas akun layanan IAM dengan menambahkan binding kebijakan IAM antara kedua akun layanan tersebut. Dengan binding ini, akun layanan Kubernetes dapat bertindak sebagai akun layanan IAM, sehingga akun layanan Kubernetes dapat membaca dan menulis di Spanner.

        gcloud iam service-accounts add-iam-policy-binding GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"
        

        Ganti kode berikut:

        • GSA_NAME: gsa-helloapp
        • GSA_PROJECT: Google Cloud project ID Anda
        • PROJECT_ID: Google Cloud project ID Anda
        • NAMESPACE: hello-namespace
        • KSA_NAME: ksa-helloapp

        Contoh:

        gcloud iam service-accounts add-iam-policy-binding [email protected] \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:my-gcp-project.svc.id.goog[hello-namespace/ksa-helloapp]"
      7. Beri anotasi pada akun layanan Kubernetes dengan alamat email akun layanan IAM. Dengan demikian, aplikasi contoh Anda akan mengetahui akun layanan mana yang akan digunakan untuk mengakses Google Cloud layanan. Jadi, saat menggunakan Library Klien Google API standar untuk mengakses layanan, aplikasi akan menggunakan akun layanan IAM tersebut. Google Cloud

        kubectl annotate serviceaccount KSA_NAME \
          --namespace NAMESPACE \
          iam.gke.io/gcp-service-account=GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
        

        Ganti kode berikut:

        • KSA_NAME: ksa-helloapp
        • NAMESPACE: hello-namespace
        • GSA_NAME: gsa-helloapp
        • GSA_PROJECT: Google Cloud project ID Anda

        Contoh:

        kubectl annotate serviceaccount ksa-helloapp \
          --namespace hello-namespace \
          iam.gke.io/gcp-service-account=gsa-helloapp@my-gcp-project.iam.gserviceaccount.com

      Men-deploy aplikasi contoh ke cluster

      Setelah menyiapkan GKE dan Spanner dengan layanan dan autentikasi yang diperlukan, Anda siap men-deploy aplikasi contoh hello-app-cloud-spanner.

      1. Clone aplikasi contoh dari repositori GitHub ke Cloud Shell Anda:

        git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
        
      2. Luncurkan Cloud Shell Editor dengan mengklik Tombol Editor Kode Open Editor di toolbar jendela terminal.

        Untuk mengetahui informasi selengkapnya, silakan melihat Ringkasan antarmuka Editor Cloud Shell.

      3. Buka panel Penjelajah Editor Cloud Shell, lalu cari direktori kubernetes-engine-samples/databases/hello-app-cloud-spanner/k8s.

      4. Buka file deployment.yaml, lalu perbarui kolom serviceAccountName dengan mengganti <KSA_NAME> dengan ksa-helloapp, nama akun layanan Kubernetes Anda.

        Edit yaml untuk memperbarui KSA_NAME.
        Gambar 1. Perbarui nama akun layanan Kubernetes dalam file deployment.
      5. Tutup Editor Cloud Shell, lalu kembali ke terminal Cloud Shell.

      6. Di terminal Cloud Shell, buka direktori hello-app-cloud-spanner:

        cd kubernetes-engine-samples/databases/hello-app-cloud-spanner
        
      7. Deploy aplikasi:

        kubectl apply -f k8s/deployment.yaml -n=NAMESPACE
        

        Ganti NAMESPACE dengan hello-namespace.

      8. Tunggu hingga aplikasi di-deploy dengan STATUS sebagai Running:

        kubectl get pods -n=NAMESPACE --watch
        

        Ganti NAMESPACE dengan hello-namespace.

        Outputnya mirip dengan hal berikut ini:

        NAME                                       READY   STATUS              RESTARTS   AGE
        hello-app-cloud-spanner-765c9b8779-lfcrc   0/1     ContainerCreating   0          87s
        hello-app-cloud-spanner-765c9b8779-lfcrc   1/1     Running             0          3m15s
        
      9. Tekan Ctrl+C pada keyboard untuk kembali ke command prompt guna menjalankan perintah lebih lanjut.

      Mengekspos aplikasi contoh ke internet

      Untuk mengekspos Service Kubernetes di luar cluster, buat Service jenis LoadBalancer. Jenis Service ini menghasilkan alamat IP load balancer eksternal untuk Pod Anda, yang dapat dijangkau melalui internet.

      1. Deploy load balancer:

        kubectl apply -f k8s/service.yaml -n=NAMESPACE
        

        Ganti NAMESPACE dengan hello-namespace.

      2. Tunggu hingga alamat IP eksternal ditetapkan:

        kubectl get service -n=NAMESPACE --watch
        

        Ganti NAMESPACE dengan hello-namespace.

      3. Setelah ditetapkan, salin EXTERNAL-IP (misalnya, 203.0.113.0) dan buka di browser. Antarmuka web akan terbuka, yang menampilkan dan mengelola database pemain.

      4. Anda dapat menggunakan GUI aplikasi untuk membuat atau menghapus catatan pemain, dan catatan tersebut akan disimpan di database Spanner.

        Tambah atau hapus pemain.
        Gambar 2. Membuat atau menghapus pemain dalam registry.

        Jalankan kueri berikut untuk memverifikasi apakah database Spanner telah diperbarui dengan entri Anda:

        gcloud spanner databases execute-sql hello-database \
          --instance=hello-instance \
          --sql="SELECT * FROM Players LIMIT 10"
        

        Outputnya mirip dengan hal berikut ini:

        PlayerUuid: a1f34bbf-929c-498d-8b16-39bbb29d70e3
        FirstName: John
        LastName: Smith
        BirthDate: 1997-07-12
        
        PlayerUuid: d634e157-96ea-45f2-be3f-fb907ced188e
        FirstName: Jane
        LastName: Doe
        BirthDate: 2013-07-12
        

      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 Anda

      Cara termudah untuk menghindari penagihan adalah dengan menghapus project yang Anda buat untuk tutorial ini.

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

      Go to Manage resources

    10. In the project list, select the project that you want to delete, and then click Delete.
    11. In the dialog, type the project ID, and then click Shut down to delete the project.
    12. Jika Anda menghapus project ini, berarti pembersihan telah selesai. Jika Anda tidak menghapus project, lanjutkan untuk menghapus resource GKE dan Spanner.

      Menghapus resource GKE

      1. Hapus layanan. Tindakan ini akan membatalkan alokasi load balancer yang dibuat untuk Service Anda: Google Cloud

        kubectl delete service hello-app-cloud-spanner -n=NAMESPACE
        

        Ganti NAMESPACE dengan hello-namespace.

      2. Hapus cluster GKE. Tindakan ini akan menghapus resource yang membentuk cluster, seperti instance komputasi, disk, dan resource jaringan:

        gcloud container clusters delete CLUSTER_NAME --region=COMPUTE_REGION
        

        Ganti kode berikut:

        • CLUSTER_NAME: hello-cluster
        • COMPUTE_REGION: us-west1

      Menghapus resource Spanner

      1. Hapus database Spanner:

        gcloud spanner databases delete hello-database --instance=hello-instance
        
      2. Hapus instance Spanner:

        gcloud spanner instances delete hello-instance
        

      Langkah berikutnya