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.
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
Di bagian ini, Anda akan membuat Pod pembaca dan Pod penulis. Tutorial ini menggunakan Deployment Kubernetes untuk membuat Pod. Deployment adalah objek Kubernetes API yang memungkinkan Anda menjalankan beberapa replika Pod yang didistribusikan di antara node dalam cluster.
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