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.
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 Cloudyang 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.
Untuk mengikuti panduan langkah demi langkah untuk tugas ini langsung di Google Cloud konsol, 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.
Roles required to create a project
To create a project, you need the Project Creator role (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. -
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, GKE, and Filestore APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
Roles required to create a project
To create a project, you need the Project Creator role (
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles. -
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, GKE, and Filestore APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. 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-filestoreTetapkan 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_REGIONGanti nilai berikut:
- PROJECT_ID: project ID Google Cloud Anda.
- COMPUTE_REGION: region Compute Engine.
- COMPUTE_ZONE: zona Compute Engine.
Buat cluster GKE:
gcloud container clusters create-auto CLUSTER_NAME --location CONTROL_PLANE_LOCATIONGanti nilai berikut:
- CLUSTER_NAME: nama cluster Anda.
- CONTROL_PLANE_LOCATION: lokasi Compute Engine bidang kontrol cluster Anda. Berikan region untuk cluster regional, atau zona untuk cluster zona.
Setelah cluster dibuat, hasilnya tampak seperti berikut ini:
gcloud container clusters describe CLUSTER_NAME NAME: CLUSTER_NAME 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: RUNNINGDengan
STATUSadalahRUNNING.volumeBindingModedisetel keWaitForFirstConsumer, yang menunda penyediaan volume hingga Pod menggunakannya. Setelan ini memungkinkan bidang kontrol mengetahui lokasi volume (Kubernetes menyebutnya topologi), dan memungkinkan contoh ini berfungsi untuk cluster baru tanpa node, yang belum memiliki topologi.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 94mBuat 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 94mPastikan 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 46mDeploy PVC:
kubectl create -f pvc.yamlPastikan PVC dibuat:
kubectl get pvcOutputnya mirip dengan hal berikut ini:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE fileserver Bound pvc-aadc7546-78dd-4f12-a909-7f02aaedf0c3 1Ti RWX filestore-sc 92mMen-deploy Pod pembaca:
kubectl apply -f reader-fs.yamlPastikan instance Filestore yang baru dibuat sudah siap:
gcloud filestore instances listOutputnya mirip dengan hal 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:19Pastikan replika pembaca berjalan dengan membuat kueri daftar Pod:
kubectl get podsOutputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE reader-66b8fff8fd-jb9p4 1/1 Running 0 3m30sMen-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 2m31sBuat 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.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.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- 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.
Hapus Service load balancer:
kubectl delete service reader-lbTunggu hingga load balancer yang disediakan untuk layanan pembaca dihapus
Pastikan daftar menampilkan
Listed 0 items:gcloud compute forwarding-rules listMenghapus Deployment
kubectl delete deployment writer kubectl delete deployment readerPastikan Pod telah dihapus dan menampilkan
No resources found in default namespace.kubectl get podsMenghapus PVC. Tindakan ini juga akan menghapus PV dan instance Filestore karena kebijakan retensi yang ditetapkan ke
deletekubectl delete pvc fileserverHapus cluster GKE:
gcloud container clusters delete CLUSTER_NAME --location=CONTROL_PLANE_LOCATIONTindakan ini akan menghapus resource yang membentuk cluster GKE, termasuk Pod pembaca dan penulis.
- 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
Menetapkan setelan default untuk Google Cloud CLI
Membuat cluster GKE
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
Instance yang telah disediakan
Membuat Kelas Penyimpanan
Jika volumeBindingMode disetel ke Immediate, penyediaan volume akan segera dimulai.
Membuat Volume Persisten untuk instance Filestore
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.
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.
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.
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.
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).
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.
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.