Latar belakang
Secara alami, Pod bersifat sementara. Artinya, GKE menghancurkan status dan nilai yang disimpan dalam Pod saat Pod dihapus, dikeluarkan, atau dijadwalkan ulang.
Sebagai operator aplikasi, Anda mungkin ingin mempertahankan workload stateful. Contoh workload tersebut mencakup aplikasi yang memproses artikel WordPress, aplikasi pesan, dan aplikasi yang memproses operasi machine learning.
Dengan menggunakan Filestore di GKE, Anda dapat melakukan operasi berikut:
- Men-deploy beban kerja stateful yang skalabel.
- Mengaktifkan beberapa Pod agar memiliki
ReadWriteMany
sebagaiaccessMode
-nya, sehingga beberapa Pod dapat membaca dan menulis secara bersamaan ke penyimpanan yang sama. - Menyiapkan GKE untuk memasang volume ke beberapa Pod secara bersamaan.
- Mempertahankan penyimpanan saat Pod dihapus.
- Memungkinkan Pod untuk berbagi data dan menskalakan dengan mudah.
Tujuan
Tutorial ini ditujukan untuk operator aplikasi dan pengguna lain yang ingin menyiapkan workload stateful yang skalabel di GKE menggunakan PVC dan NFS.Tutorial ini membahas langkah-langkah berikut:
- Membuat cluster GKE.
- Mengonfigurasi penyimpanan file terkelola dengan Filestore menggunakan CSI.
- Membuat Pod penulis dan pembaca.
- Mengekspos dan mengakses Pod pembaca ke Load Balancer Service.
- Meningkatkan skala penulis.
- Mengakses data dari Pod penulis.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:Gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.
Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk informasi selengkapnya, lihat Pembersihan.
Jika ingin mengikuti panduan langkah demi langkah untuk tugas ini langsung di Konsol Google Cloud, klik Pandu saya:
Sebelum memulai
Menyiapkan project
- 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.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, GKE, and Filestore APIs.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, GKE, and Filestore APIs.
Menetapkan setelan default untuk Google Cloud CLI
Di konsol Google Cloud, mulai instance Cloud Shell:
Buka Cloud ShellDownload kode sumber untuk aplikasi contoh ini:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/databases/stateful-workload-filestore
Tetapkan variabel lingkungan default:
gcloud config set project PROJECT_ID gcloud config set compute/region COMPUTE_REGION gcloud config set compute/zone COMPUTE_ZONE gcloud config set filestore/zone COMPUTE_ZONE gcloud config set filestore/region COMPUTE_REGION
Ganti nilai berikut:
- PROJECT_ID: project ID Google Cloud Anda.
- COMPUTE_REGION: region Compute Engine.
- COMPUTE_ZONE: zona Compute Engine.
Membuat cluster GKE
Buat cluster GKE bernama
stateful-cluster
:gcloud container clusters create-auto stateful-cluster --region COMPUTE_REGION
Setelah cluster dibuat, hasilnya tampak seperti berikut ini:
gcloud container clusters describe stateful-cluster NAME: stateful-cluster LOCATION: northamerica-northeast2 MASTER_VERSION: 1.21.11-gke.1100 MASTER_IP: 34.130.255.70 MACHINE_TYPE: e2-medium NODE_VERSION: 1.21.11-gke.1100 NUM_NODES: 3 STATUS: RUNNING
Dengan
STATUS
adalahRUNNING
untukstateful-cluster
.
Mengonfigurasi penyimpanan file terkelola dengan Filestore menggunakan CSI
GKE menyediakan cara untuk men-deploy dan mengelola driver CSI Filestore Kubernetes secara otomatis di cluster.
Dengan menggunakan Filestore CSI, Anda dapat membuat atau menghapus instance Filestore secara dinamis dan menggunakannya dalam workload Kubernetes dengan StorageClass
atau Deployment
.
Anda dapat membuat instance Filestore baru dengan membuat PVC yang secara dinamis menyediakan instance Filestore dan PV, atau mengakses instance Filestore yang telah disediakan dalam workload Kubernetes.
Instance baru
Membuat Kelas Penyimpanan
volumeBindingMode
disetel keImmediate
, yang memungkinkan penyediaan volume segera dimulai.tier
disetel kestandard
untuk waktu pembuatan instance Filestore yang lebih cepat. Jika Anda memerlukan penyimpanan NFS yang lebih tinggi, snapshot untuk pencadangan data, replikasi data di beberapa zona, dan fitur tingkat perusahaan lainnya, tetapkantier
keenterprise
. Catatan: Kebijakan klaim kembali untuk PV yang dibuat secara dinamis akan berubah secara default keDelete
jikareclaimPolicy
diStorageClass
tidak ditetapkan.
Buat resource
StorageClass
:kubectl create -f filestore-storageclass.yaml
Pastikan bahwa Kelas Penyimpanan telah dibuat:
kubectl get sc
Output-nya mirip dengan berikut ini:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE filestore-sc filestore.csi.storage.gke.io Delete Immediate true 94m
Instance yang telah disediakan
Membuat Kelas Penyimpanan
Jika volumeBindingMode
disetel ke Immediate
, penyediaan volume akan segera dimulai.
Buat resource
StorageClass
:kubectl create -f preprov-storageclass.yaml
Pastikan bahwa Kelas Penyimpanan telah dibuat:
kubectl get sc
Output-nya mirip dengan berikut ini:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE filestore-sc filestore.csi.storage.gke.io Delete Immediate true 94m
Membuat Volume Persisten untuk instance Filestore
Pastikan instance Filestore yang sudah ada sudah siap:
gcloud filestore instances list
Output-nya mirip dengan berikut ini, dengan nilai
STATE
adalahREADY
:INSTANCE_NAME: stateful-filestore LOCATION: us-central1-a TIER: ENTERPRISE CAPACITY_GB: 1024 FILE_SHARE_NAME: statefulpath IP_ADDRESS: 10.109.38.98 STATE: READY CREATE_TIME: 2022-04-05T18:58:28
Perhatikan
INSTANCE_NAME
,LOCATION
,FILE_SHARE_NAME
, danIP_ADDRESS
dari instance Filestore.Isi variabel konsol instance Filestore:
INSTANCE_NAME=INSTANCE_NAME LOCATION=LOCATION FILE_SHARE_NAME=FILE_SHARE_NAME IP_ADDRESS=IP_ADDRESS
Ganti variabel placeholder dengan variabel konsol yang diperoleh di atas ke file
preprov-pv.yaml
:sed "s/<INSTANCE_NAME>/$INSTANCE_NAME/" preprov-pv.yaml > changed.yaml && mv changed.yaml preprov-pv.yaml sed "s/<LOCATION>/$LOCATION/" preprov-pv.yaml > changed.yaml && mv changed.yaml preprov-pv.yaml sed "s/<FILE_SHARE_NAME>/$FILE_SHARE_NAME/" preprov-pv.yaml > changed.yaml && mv changed.yaml preprov-pv.yaml sed "s/<IP_ADDRESS>/$IP_ADDRESS/" preprov-pv.yaml > changed.yaml && mv changed.yaml preprov-pv.yaml
Buat PV
kubectl apply -f preprov-pv.yaml
Verifikasi bahwa
STATUS
PV diatur keBound
:kubectl get pv
Output-nya mirip dengan berikut ini:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE fileserver 1Ti RWX Delete Bound default/fileserver filestore-sc 46m
Menggunakan PersistentVolumeClaim untuk mengakses volume
Manifes pvc.yaml
berikut mereferensikan StorageClass
driver CSI Filestore bernama filestore-sc
.
Agar beberapa Pod dapat membaca dan menulis ke volume,
accessMode
disetel ke ReadWriteMany
.
Deploy PVC:
kubectl create -f pvc.yaml
Pastikan PVC dibuat:
kubectl get pvc
Output-nya mirip dengan berikut ini:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE fileserver Bound pvc-aadc7546-78dd-4f12-a909-7f02aaedf0c3 1Ti RWX filestore-sc 92m
Pastikan instance Filestore yang baru dibuat sudah siap:
gcloud filestore instances list
Output-nya mirip dengan berikut ini:
INSTANCE_NAME: pvc-5bc55493-9e58-4ca5-8cd2-0739e0a7b68c LOCATION: northamerica-northeast2-a TIER: STANDARD CAPACITY_GB: 1024 FILE_SHARE_NAME: vol1 IP_ADDRESS: 10.29.174.90 STATE: READY CREATE_TIME: 2022-06-24T18:29:19
Membuat Pod pembaca dan penulis
Membuat Pod pembaca
Pod pembaca akan membaca file yang sedang ditulis oleh Pod penulis. Pod pembaca akan melihat waktu dan replika Pod penulis yang menulis ke file.
Pod pembaca akan membaca dari jalur /usr/share/nginx/html
yang dibagikan di antara semua Pod.
Men-deploy Pod pembaca:
kubectl apply -f reader-fs.yaml
Pastikan replika pembaca berjalan dengan membuat kueri daftar Pod:
kubectl get pods
Output-nya mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE reader-66b8fff8fd-jb9p4 1/1 Running 0 3m30s
Membuat Pod penulis
Pod penulis akan menulis secara berkala ke file bersama yang dapat diakses oleh Pod penulis dan pembaca lainnya. Pod penulis mencatat kehadirannya dengan menuliskan nama host-nya ke file bersama.
Image yang digunakan untuk Pod penulis adalah image kustom Alpine Linux, yang digunakan untuk aplikasi utilitas dan produksi. Ini mencakup
indexInfo.html
skrip yang akan mendapatkan metadata penulis terbaru,
dan mempertahankan jumlah semua penulis unik dan total penulisan.
Untuk tutorial ini, Pod penulis menulis setiap 30 detik ke jalur /html/index.html
. Ubah nilai angka sleep
agar memiliki frekuensi tulis yang berbeda.
Men-deploy Pod penulis:
kubectl apply -f writer-fs.yaml
Pastikan bahwa Pod penulis sedang berjalan dengan membuat kueri daftar Pod:
kubectl get pods
Output-nya mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE reader-66b8fff8fd-jb9p4 1/1 Running 0 3m30s writer-855565fbc6-8gh2k 1/1 Running 0 2m31s writer-855565fbc6-lls4r 1/1 Running 0 2m31s
Mengekspos dan mengakses workload pembaca ke Load Balancer Service
Untuk mengekspos workload di luar cluster, buat Service jenis
LoadBalancer
. Jenis Service ini membuat load balancer eksternal dengan alamat IP yang dapat dijangkau melalui internet.
Buat Service jenis
LoadBalancer
bernamareader-lb
:kubectl create -f loadbalancer.yaml
Pantau deployment untuk melihat bahwa GKE menetapkan
EXTERNAL-IP
untuk Servicereader-lb
:kubectl get svc --watch
Jika
Service
sudah siap, kolomEXTERNAL-IP
akan menampilkan alamat IP publik load balancer:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.8.128.1 <none> 443/TCP 2d21h reader-lb LoadBalancer 10.8.131.79 34.71.232.122 80:32672/TCP 2d20h
Tekan Ctrl+C untuk menghentikan proses pemantauan ini.
Gunakan browser web untuk menavigasi ke
EXTERNAL-IP
yang ditetapkan untuk load balancer. Halaman dimuat ulang setiap 30 detik. Makin banyak Pod penulis dan makin pendek frekuensinya, makin banyak entri yang akan ditampilkan.
Untuk detail selengkapnya tentang layanan load balancer, lihat loadbalancer.yaml
.
Meningkatkan skala penulis
Karena accessMode
PV disetel ke ReadWriteMany
, GKE dapat meningkatkan jumlah Pod sehingga lebih banyak Pod penulis dapat menulis ke volume bersama ini (atau lebih banyak pembaca dapat membacanya).
Tingkatkan skala
writer
menjadi lima replika:kubectl scale deployment writer --replicas=5
Output-nya mirip dengan berikut ini:
deployment.extensions/writer scaled
Pastikan jumlah replika yang berjalan:
kubectl get pods
Output-nya mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE reader-66b8fff8fd-jb9p4 1/1 Running 0 11m writer-855565fbc6-8dfkj 1/1 Running 0 4m writer-855565fbc6-8gh2k 1/1 Running 0 10m writer-855565fbc6-gv5rs 1/1 Running 0 4m writer-855565fbc6-lls4r 1/1 Running 0 10m writer-855565fbc6-tqwxc 1/1 Running 0 4m
Gunakan browser web untuk membuka lagi
EXTERNAL-IP
yang ditetapkan untuk load balancer.
Pada tahap ini, Anda telah mengonfigurasi dan menskalakan cluster untuk mendukung lima Pod penulis stateful. Saat beberapa Pod penulis menulis ke file yang sama secara bersamaan. Pod pembaca juga dapat ditingkatkan skalanya dengan mudah.
Opsional: Mengakses data dari Pod penulis
Bagian ini menunjukkan cara menggunakan antarmuka command line untuk mengakses Pod pembaca atau penulis. Anda dapat melihat komponen bersama tempat penulis menulis dan tempat pembaca membaca.
Mendapatkan nama Pod penulis:
kubectl get pods
Output-nya mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE writer-5465d65b46-7hxv4 1/1 Running 0 20d
Perhatikan nama host Pod penulis (Contoh:
writer-5465d65b46-7hxv4
).Jalankan perintah berikut untuk mengakses Pod penulis:
kubectl exec -it WRITER_HOSTNAME -- /bin/sh
Lihat komponen bersama dalam file
indexData.html
:cd /html cat indexData.html
Hapus file
indexData.html
:echo '' > indexData.html
Muat ulang browser web yang menghosting alamat
EXTERNAL-IP
untuk melihat perubahannya.Keluar dari lingkungan:
exit
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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus resource satu per satu
Hapus Service load balancer:
kubectl delete service reader-lb
Tunggu hingga load balancer yang disediakan untuk layanan pembaca dihapus
Pastikan daftar menampilkan
Listed 0 items
:gcloud compute forwarding-rules list
Menghapus Deployment
kubectl delete deployment writer kubectl delete deployment reader
Pastikan Pod telah dihapus dan menampilkan
No resources found in default namespace.
kubectl get pods
Menghapus PVC. Tindakan ini juga akan menghapus PV dan instance Filestore karena kebijakan retensi yang ditetapkan ke
delete
kubectl delete pvc fileserver
Hapus cluster GKE:
gcloud container clusters delete stateful-cluster --zone=COMPUTE_ZONE
Tindakan ini akan menghapus resource yang membentuk cluster GKE, termasuk Pod pembaca dan penulis.
Langkah berikutnya
- Pelajari cara men-deploy Cloud SQL dengan GKE
- Mode Akses untuk PV dan PVC
- Pelajari lebih lanjut GKE dan Filestore
- Pelajari lebih lanjut Driver CSI Filestore
- Cara membuat instance Filestore
- Lihat cara mengakses instance Filestore dari cluster GKE
- Pelajari tutorial Kubernetes Engine lainnya.
- Pelajari lebih lanjut cara mengekspos aplikasi menggunakan Service di GKE Mengekspos aplikasi menggunakan layanan