Lingkungan Kubernetes memungkinkan Anda menskalakan resource database secara dinamis seiring perubahan permintaan workload. Gunakan prosedur penskalaan ini jika Anda men-deploy Spanner Omni menggunakan diagram Helm.
Sebelum memulai
Sebelum menskalakan deployment Kubernetes, Anda harus melakukan hal berikut:
Download dan instal Spanner Omni CLI.
Instal Helm dan buat konfigurasi diagram Helm.
Sebagai praktik terbaik, sebaiknya lakukan penskalaan vertikal hingga minimal 32 GB memori per server sebelum Anda menambahkan lebih banyak server untuk melakukan penskalaan horizontal.
Batasan
Penskalaan di Kubernetes memiliki batasan berikut:
Khusus server non-root: Penskalaan horizontal didukung untuk instance non-root. Penskalaan server root tidak didukung.
Batasan penyimpanan StatefulSet: Karena
volumeClaimTemplatesKubernetes tidak dapat diubah, Anda tidak dapat memperluas disk pod menggunakan satu perintahhelm upgrade. Sebagai gantinya, penskalaan penyimpanan memerlukan langkah-langkah perluasan volume manual.
Skalakan secara vertikal
Untuk menyesuaikan resource CPU atau memori untuk server Anda, perbarui konfigurasi menggunakan upgrade Helm:
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set resources.cpu=CPU_CORES \
--set resources.memory=MEMORY_LIMIT \
-n NAMESPACE
Ganti kode berikut:
HELM_CHART_PATH: Jalur ke Helm chart Anda, misalnya,oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni.VERSION: Versi diagram Helm, misalnya,0.2.0.CPU_CORES: Jumlah core vCPU yang akan ditetapkan ke setiap pod server, misalnya,8.MEMORY_LIMIT: Batas RAM untuk setiap pod server, misalnya,32Gi.NAMESPACE: Namespace Kubernetes deployment, misalnya,spanner-ns.
Menskalakan secara horizontal
Untuk menskalakan secara horizontal, tambahkan lebih banyak server ke deployment Anda. Penskalaan horizontal didukung untuk server non-root.
Menambahkan server non-root
Untuk menambahkan server non-root, tingkatkan jumlah replika dalam konfigurasi Helm chart. Anda dapat menskalakan semua zona secara seragam, atau menskalakan zona tertentu.
Menskalakan secara seragam
Untuk menskalakan setiap zona dalam deployment ke 15 server, jalankan perintah berikut:
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set deployment.replicasPerZone=REPLICAS \
-n NAMESPACE
Ganti kode berikut:
HELM_CHART_PATH: Jalur ke diagram Helm Anda—misalnya,oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni.VERSION: Versi diagram Helm—misalnya,0.2.0.REPLICAS: Jumlah target replika server per zona—misalnya,15.NAMESPACE: Namespace Kubernetes—misalnya,spanner-ns.
Menskalakan zona tertentu
Jika deployment awal Anda mengonfigurasi jumlah server yang berbeda untuk setiap zona, Anda dapat menargetkan satu zona. Misalnya, untuk meningkatkan replika zona pertama di dalam lokasi pertama menjadi 15, jalankan perintah berikut:
helm upgrade spanner-omni HELM_CHART_PATH \
--version VERSION \
--reuse-values \
--set locations[0].zones[0].replicas=REPLICAS \
-n NAMESPACE
Ganti REPLICAS dengan jumlah replika zona target Anda—misalnya, 15.
Untuk memverifikasi bahwa server baru berhasil bergabung dengan deployment, kueri Spanner Omni CLI untuk mencantumkan server deployment atau melihat dasbor Grafana.
spanner deployment servers list \
--zone=ZONE \
--deployment-endpoint=ENDPOINT
Ganti kode berikut:
ZONE: Zona yang ingin Anda cantumkan—misalnya,us-central1-a.ENDPOINT: Endpoint eksternal deployment Anda—misalnya,${ENDPOINT}:15000.
Menghapus server non-root
Pengecilan skala server memerlukan langkah tambahan karena sistem harus memindahkan partisi data dengan aman dari server yang dihentikan. Karena StatefulSet Kubernetes menghapus pod dari indeks tertinggi hingga terendah, Anda harus menargetkan server non-root dengan indeks tertinggi untuk dihapus terlebih dahulu.
Untuk memperkecil skala jumlah server, lakukan langkah-langkah berikut:
Mencantumkan server di zona Anda untuk mengidentifikasi kandidat yang akan dihapus:
spanner deployment servers list \ --zone=ZONE \ --deployment-endpoint=ENDPOINTContoh output:
NAME HOST PORT_BASE ROOT STATE zones/us-central1-a/servers/spanner-a-0.pod.spanner-ns:15000 spanner-a-0.pod.spanner-ns 15000 true - zones/us-central1-a/servers/spanner-a-1.pod.spanner-ns:15000 spanner-a-1.pod.spanner-ns 15000 - -Hapus server non-root yang dihentikan dengan indeks tertinggi (misalnya,
spanner-a-1.pod.spanner-ns:15000):spanner deployment servers delete SERVER_NAME \ --zone=ZONE \ --deployment-endpoint=ENDPOINTGanti
SERVER_NAMEdengan ID server—misalnya,spanner-a-1.pod.spanner-ns:15000.Periksa daftar server hingga server target dihapus dari listingan. Setelah penghapusan, server akan bertransisi ke status tidak sehat dalam sistem dan dihapus dari jalur layanan aktif.
Perkecil skala deployment Helm dengan menjalankan perintah upgrade Helm agar sesuai dengan jumlah replika target Anda. Misalnya, untuk mengurangi replika per zona menjadi pod
1, jalankan perintah berikut:helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set deployment.replicasPerZone=REPLICAS \ -n NAMESPACEGanti
REPLICASdengan jumlah replika yang diupdate—misalnya,1.Hapus klaim volume persisten (PVC) Kubernetes yang terkait dengan pod yang dihapus. Untuk mencegah kehilangan data yang tidak disengaja, Helm dan Kubernetes tidak menghapus PVC secara otomatis saat menurunkan skala StatefulSet. Hapus PVC secara manual untuk mengklaim kembali penyimpanan sepenuhnya:
kubectl delete pvc LOGS_PVC DATA_PVC -n NAMESPACEMisalnya, untuk menghapus log dan volume data untuk
spanner-a-1di namespacespanner-ns:kubectl delete pvc logs-volume-spanner-a-1 data-volume-spanner-a-1 -n spanner-ns
Menambahkan zona
Menambahkan zona baru ke deployment Anda akan meningkatkan ketersediaan dan mengamankan database Anda dari pemadaman layanan zona tunggal.
Misalnya, perintah berikut menginisialisasi deployment satu zona yang sedang berjalan di Google Kubernetes Engine (GKE) di zona us-east1-b pada region us:
helm upgrade --install spanner-omni HELM_CHART_PATH \
--version VERSION \
--set resources.cpu=2 \
--set resources.memory=8Gi \
--set global.platform=gke \
--set-json 'locations=[{"name":"us","zones":[{"name":"us-east1-b","shortName":"east-b"}]}]' \
-n NAMESPACE
Tambahkan zona us-east1-c ke konfigurasi ini dengan melakukan langkah-langkah berikut:
Luncurkan pod di zona baru dengan menjalankan perintah
helm upgradedan meneruskan blok JSON yang telah diupdate yang mencakup zona lokasi baru:helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set-json 'locations=[{"name":"us","zones":[{"name":"us-east1-b","shortName":"east-b"},{"name":"us-east1-c","shortName":"east-c"}]}]' \ -n NAMESPACETambahkan zona baru menggunakan Spanner Omni CLI. Tunggu hingga pod server root di zona yang baru dibuat memasuki status
Runningdan siap. Kemudian, jalankan perintah pembuatan zona:spanner deployment zones create NEW_ZONE \ --location=LOCATION \ --root-servers=ROOT_SERVERS_LIST \ --deployment-endpoint=ENDPOINTGanti kode berikut:
NEW_ZONE: ID zona yang akan ditambahkan—misalnya,us-east1-c.LOCATION: Lokasi deployment—misalnya,us.ROOT_SERVERS_LIST: Daftar endpoint server root yang dipisahkan koma di zona baru—misalnya,spanner-east-c-0.pod.spanner-ns:15000,spanner-east-c-1.pod.spanner-ns:15000,spanner-east-c-2.pod.spanner-ns:15000.ENDPOINT: Endpoint deployment eksternal—misalnya,${ENDPOINT}:15000.
Tunggu hingga pembuatan zona selesai. Replikasi skema dan tabel database yang ada ke zona baru memerlukan waktu. Pantau progres sinkronisasi zona dengan mencantumkan zona deployment:
spanner deployment zones list --deployment-endpoint=ENDPOINT
Menghapus zona
Anda dapat menonaktifkan zona aktif dari deployment multi-zona untuk mengurangi resource atau menyesuaikan dengan perubahan topologi.
Hapus zona us-east1-c yang dibuat di bagian sebelumnya dengan melakukan langkah-langkah berikut:
Hapus zona dan mulai penonaktifan zona di dalam Spanner Omni:
spanner deployment zones delete ZONE --deployment-endpoint=ENDPOINTGanti
ZONEdengan zona yang akan dihapus—misalnya,us-east1-c.Pastikan zona telah dihapus. Jalankan perintah list dan tunggu hingga zona tidak lagi muncul di output:
spanner deployment zones list --deployment-endpoint=ENDPOINTHapus server dari cluster Kubernetes dengan menjalankan perintah upgrade helm dan meneruskan blok JSON lokasi yang telah diupdate yang mengecualikan zona yang dihapus:
helm upgrade spanner-omni HELM_CHART_PATH \ --version VERSION \ --reuse-values \ --set-json 'locations=[{"name":"us","zones":[{"name":"us-east1-b","shortName":"east-b"}]}]' \ -n NAMESPACE
Penyimpanan skala
Karena volumeClaimTemplates Kubernetes tidak dapat diubah, Anda tidak dapat meningkatkan kapasitas penyimpanan pod menggunakan perintah helm upgrade secara langsung. Sebagai gantinya, Anda harus
melakukan perluasan volume secara manual. Untuk mengetahui informasi selengkapnya, lihat
panduan Ekspansi Volume StatefulSet GKE.
Untuk memperluas penyimpanan disk, lakukan langkah-langkah berikut:
Tentukan parameter untuk perluasan volume sebagai variabel lingkungan di terminal Anda:
NEW_SIZE="NEW_SIZE" NAMESPACE="NAMESPACE" RELEASE_NAME="spanner-omni" STATEFULSET_NAMES="STATEFULSET_NAME_1 STATEFULSET_NAME_2 STATEFULSET_NAME_3" HELM_CHART_PATH="HELM_CHART_PATH" VERSION="VERSION"Ganti kode berikut:
NEW_SIZE: Ukuran kapasitas penyimpanan target—misalnya,200Gi.NAMESPACE: Namespace Kubernetes—misalnya,spanner-ns.STATEFULSET_NAME_1,STATEFULSET_NAME_2, ...: Nama StatefulSets dalam deployment Anda, biasanya sesuai dengan nama singkat zona Anda (misalnya,spanner-east-b spanner-east-c).HELM_CHART_PATH: Jalur ke diagram Helm Anda—misalnya,oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni.VERSION: Versi diagram Helm—misalnya,0.2.0.
Jalankan perintah untuk menerapkan patch pada PVC, hapus StatefulSet (biarkan pod backend tetap utuh), dan upgrade deployment Helm:
# Patch all associated PVCs directly. for pvc in $(kubectl get pvc -n $NAMESPACE \ -l app.kubernetes.io/instance=$RELEASE_NAME \ -o name | grep "data-volume"); do kubectl patch $pvc -n $NAMESPACE -p "{\"spec\":{\"resources\":{\"requests\":{\"storage\":\"$NEW_SIZE\"}}}}" done # Delete the StatefulSet while leaving backend pods intact (orphan cascade). kubectl delete statefulset $STATEFULSET_NAMES -n $NAMESPACE --cascade=orphan # Run Helm upgrade to align the templates with the expanded size. helm upgrade $RELEASE_NAME $HELM_CHART_PATH \ --version $VERSION \ --reuse-values \ --set storage.data.size=$NEW_SIZE \ -n $NAMESPACE
Langkah berikutnya
- Pelajari cara memelihara deployment.