Tutorial ini menjelaskan cara men-deploy aplikasi web dalam container ke cluster Autopilot Google Kubernetes Engine (GKE), 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.
Mengonfigurasi Spanner
Untuk mengonfigurasi Spanner, Anda perlu 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 \
--location=CONTROL_PLANE_LOCATION
Ganti kode berikut:
CLUSTER_NAME
:hello-cluster
CONTROL_PLANE_LOCATION
: region Compute Engine bidang kontrol 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.
Dapatkan kredensial untuk mengakses cluster Anda:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION
Ganti kode berikut:
CLUSTER_NAME
:hello-cluster
CONTROL_PLANE_LOCATION
:us-west1
Tindakan ini akan memperbarui file
kubeconfig
dengan informasi endpoint dan kredensial yang sesuai untuk mengarahkankubectl
ke cluster Anda.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
denganhello-namespace
, nama untuk namespace baru yang Anda buat.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
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 dengan tempat Anda men-deploy aplikasi contoh. Oleh karena itu,GSA_PROJECT
dan Google CloudPROJECT_ID
Anda sama.
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 AndaGSA_NAME
:gsa-helloapp
Contoh:
gcloud projects add-iam-policy-binding my-gcp-project \ --member "serviceAccount:gsa-helloapp@my-gcp-project.iam.gserviceaccount.com" \ --role "roles/spanner.admin"
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 AndaPROJECT_ID
: Google Cloud project ID AndaNAMESPACE
:hello-namespace
KSA_NAME
:ksa-helloapp
Contoh:
gcloud iam service-accounts add-iam-policy-binding gsa-helloapp@my-gcp-project.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:my-gcp-project.svc.id.goog[hello-namespace/ksa-helloapp]"
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
.
Clone aplikasi contoh dari repositori GitHub ke Cloud Shell Anda:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
Luncurkan Cloud Shell Editor dengan mengklik
Open Editor di toolbar jendela terminal.
Untuk mengetahui informasi selengkapnya, silakan melihat Ringkasan antarmuka Editor Cloud Shell.
Buka panel Penjelajah Editor Cloud Shell, lalu cari direktori
kubernetes-engine-samples/databases/hello-app-cloud-spanner/k8s
.Buka file
deployment.yaml
, lalu perbarui kolomserviceAccountName
dengan mengganti<KSA_NAME>
denganksa-helloapp
, nama akun layanan Kubernetes Anda.Gambar 1. Perbarui nama akun layanan Kubernetes dalam file deployment. Tutup Editor Cloud Shell, lalu kembali ke terminal Cloud Shell.
Di terminal Cloud Shell, buka direktori
hello-app-cloud-spanner
:cd kubernetes-engine-samples/databases/hello-app-cloud-spanner
Deploy aplikasi:
kubectl apply -f k8s/deployment.yaml -n=NAMESPACE
Ganti
NAMESPACE
denganhello-namespace
.Tunggu hingga aplikasi di-deploy dengan
STATUS
sebagaiRunning
:kubectl get pods -n=NAMESPACE --watch
Ganti
NAMESPACE
denganhello-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
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.
Deploy load balancer:
kubectl apply -f k8s/service.yaml -n=NAMESPACE
Ganti
NAMESPACE
denganhello-namespace
.Perhatikan penetapan alamat IP eksternal:
kubectl get service -n=NAMESPACE --watch
Ganti
NAMESPACE
denganhello-namespace
.Setelah ditetapkan, salin
EXTERNAL-IP
(misalnya,203.0.113.0
) dan buka di browser. Antarmuka web akan terbuka, yang menampilkan dan mengelola database pemain.Anda dapat menggunakan GUI aplikasi untuk membuat atau menghapus catatan pemain, dan catatan tersebut akan disimpan di database Spanner.
Gambar 2. Membuat atau menghapus pemain dalam registry. Jalankan kueri berikut untuk memverifikasi apakah database Spanner telah diupdate 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