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
ReadWriteManysebagaiaccessMode-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
volumeBindingModedisetel keImmediate, yang memungkinkan penyediaan volume segera dimulai.tierdisetel kestandarduntuk 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, tetapkantierkeenterprise. Catatan: Kebijakan klaim kembali untuk PV yang dibuat secara dinamis akan berubah secara default keDeletejikareclaimPolicydiStorageClasstidak ditetapkan.
Buat resource
StorageClass:kubectl create -f filestore-storageclass.yamlPastikan bahwa Kelas Penyimpanan telah dibuat:
kubectl get scOutput-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.yamlPastikan bahwa Kelas Penyimpanan telah dibuat:
kubectl get scOutput-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 listOutput-nya mirip dengan berikut ini, dengan nilai
STATEadalahREADY: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:28Perhatikan
INSTANCE_NAME,LOCATION,FILE_SHARE_NAME, danIP_ADDRESSdari instance Filestore.Isi variabel konsol instance Filestore:
INSTANCE_NAME=INSTANCE_NAME LOCATION=LOCATION FILE_SHARE_NAME=FILE_SHARE_NAME IP_ADDRESS=IP_ADDRESSGanti 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.yamlBuat PV
kubectl apply -f preprov-pv.yamlVerifikasi bahwa
STATUSPV diatur keBound:kubectl get pvOutput-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.yamlPastikan PVC dibuat:
kubectl get pvcOutput-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 92mPastikan instance Filestore yang baru dibuat sudah siap:
gcloud filestore instances listOutput-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.yamlPastikan replika pembaca berjalan dengan membuat kueri daftar Pod:
kubectl get podsOutput-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.yamlPastikan bahwa Pod penulis sedang berjalan dengan membuat kueri daftar Pod:
kubectl get podsOutput-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
LoadBalancerbernamareader-lb:kubectl create -f loadbalancer.yamlPantau deployment untuk melihat bahwa GKE menetapkan
EXTERNAL-IPuntuk Servicereader-lb:kubectl get svc --watchJika
Servicesudah siap, kolomEXTERNAL-IPakan 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 2d20hTekan Ctrl+C untuk menghentikan proses pemantauan ini.
Gunakan browser web untuk menavigasi ke
EXTERNAL-IPyang 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
writermenjadi lima replika:kubectl scale deployment writer --replicas=5Output-nya mirip dengan berikut ini:
deployment.extensions/writer scaledPastikan jumlah replika yang berjalan:
kubectl get podsOutput-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 4mGunakan browser web untuk membuka lagi
EXTERNAL-IPyang 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 podsOutput-nya mirip dengan berikut ini:
NAME READY STATUS RESTARTS AGE writer-5465d65b46-7hxv4 1/1 Running 0 20dPerhatikan nama host Pod penulis (Contoh:
writer-5465d65b46-7hxv4).Jalankan perintah berikut untuk mengakses Pod penulis:
kubectl exec -it WRITER_HOSTNAME -- /bin/shLihat komponen bersama dalam file
indexData.html:cd /html cat indexData.htmlHapus file
indexData.html:echo '' > indexData.htmlMuat ulang browser web yang menghosting alamat
EXTERNAL-IPuntuk melihat perubahannya.Keluar dari lingkungan:
exit