Panduan ini menunjukkan cara menggunakan volume persisten Kubernetes yang didukung oleh bucket Cloud Storage untuk mengelola resource penyimpanan bagi Pod Kubernetes Anda di Google Kubernetes Engine (GKE). Pertimbangkan untuk menggunakan opsi penyimpanan ini jika Anda sudah memahami PersistentVolumes dan menginginkan konsistensi dengan deployment yang ada yang mengandalkan jenis resource ini.
Panduan ini ditujukan bagi pengguna admin dan operator Platform yang ingin menyederhanakan pengelolaan penyimpanan untuk aplikasi GKE mereka.
Sebelum membaca halaman ini, pastikan Anda sudah memahami volume persisten Kubernetes, Pod Kubernetes, dan bucket Cloud Storage.
Jika Anda menginginkan antarmuka berbasis Pod yang disederhanakan dan tidak memerlukan pengalaman sebelumnya dengan volume persisten Kubernetes, lihat Memasang bucket Cloud Storage sebagai volume efemeral CSI.
Sebelum memulai
Pastikan Anda telah menyelesaikan prasyarat berikut:
- Pahami persyaratan dan batasan driver CSI Cloud Storage FUSE.
- Buat bucket Cloud Storage
- Aktifkan driver CSI Cloud Storage FUSE
- Mengonfigurasi akses ke bucket Cloud Storage
Cara kerja volume persisten untuk bucket Cloud Storage
Dengan penyediaan statis, Anda dapat membuat satu atau beberapa objek PersistentVolume yang berisi detail sistem penyimpanan pokoknya. Pod di cluster Anda selanjutnya dapat menggunakan penyimpanan melalui PersistentVolumeClaims.
Penggunaan volume persisten yang didukung oleh bucket Cloud Storage melibatkan operasi berikut:
Definisi penyimpanan: Anda menentukan PersistentVolume di cluster GKE, termasuk driver CSI yang akan digunakan dan parameter yang diperlukan. Untuk driver CSI Cloud Storage FUSE, Anda menentukan nama bucket dan detail relevan lainnya.
Secara opsional, Anda dapat menyesuaikan performa driver CSI menggunakan fitur penyimpanan file dalam cache. Penyimpanan file dalam cache dapat meningkatkan performa aplikasi GKE dengan menyimpan file Cloud Storage yang sering diakses dalam cache di disk lokal yang lebih cepat.
Selain itu, Anda dapat menggunakan fitur download paralel untuk mempercepat pembacaan file besar dari Cloud Storage untuk download multi-thread. Anda dapat menggunakan fitur ini untuk meningkatkan waktu pemuatan model, terutama untuk pembacaan yang berukuran lebih dari 1 GB.
Pemanggilan driver: Saat PersistentVolumeClaim meminta penyimpanan yang cocok dengan spesifikasi PersistentVolume, GKE akan memanggil driver CSI Cloud Storage FUSE.
Pemasangan bucket: Driver CSI memasang bucket ke node tempat Pod yang meminta dijadwalkan. Hal ini membuat konten bucket dapat diakses oleh Pod sebagai direktori dalam sistem file lokal Pod. Untuk menyetel secara cermat cara bucket dipasang di sistem file, Anda dapat menggunakan opsi pemasangan. Anda juga dapat menggunakan atribut volume untuk mengonfigurasi perilaku spesifik driver CSI Cloud Storage FUSE.
Pemasangan ulang: Jika Pod dimulai ulang atau dijadwalkan ulang ke node lain, driver CSI akan memasang ulang bucket yang sama ke node baru, sehingga memastikan aksesibilitas data.
Membuat PersistentVolume
Buat manifes PersistentVolume dengan spesifikasi berikut:
Pod
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
Ganti nilai berikut:
- NAMESPACE: namespace Kubernetes tempat Anda ingin men-deploy Pod.
- BUCKET_NAME: nama bucket Cloud Storage yang Anda tentukan saat mengonfigurasi akses ke bucket Cloud Storage. Anda dapat
menentukan garis bawah (
_
) untuk memasang semua bucket yang dapat diakses oleh ServiceAccount Kubernetes. Untuk mempelajari lebih lanjut, lihat Pemasangan dinamis dalam dokumentasi Cloud Storage FUSE.
Contoh manifes menampilkan setelan yang diperlukan ini:
spec.csi.driver
: gunakangcsfuse.csi.storage.gke.io
sebagai nama driver CSI.
Secara opsional, Anda dapat menyesuaikan variabel ini:
spec.mountOptions
: Teruskan opsi pemasangan ke Cloud Storage FUSE. Tentukan flag dalam satu string yang dipisahkan koma, tanpa spasi.spec.csi.volumeAttributes
: Teruskan atribut volume tambahan ke Cloud Storage FUSE.
Pod (penyimpanan data ke dalam cache file)
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs - file-cache:max-size-mb:-1 csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
Ganti nilai berikut:
- NAMESPACE: namespace Kubernetes tempat Anda ingin men-deploy Pod.
- BUCKET_NAME: nama bucket Cloud Storage yang Anda tentukan saat mengonfigurasi akses ke bucket Cloud Storage.
Anda dapat menentukan garis bawah (
_
) untuk memasang semua bucket yang dapat diakses oleh ServiceAccount Kubernetes. Untuk mempelajari lebih lanjut, lihat Pemasangan dinamis dalam dokumentasi Cloud Storage FUSE.
Pod (download paralel)
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs - file-cache:enable-parallel-downloads:true - file-cache:max-size-mb:-1 csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE
Ganti nilai berikut:
- NAMESPACE: namespace Kubernetes tempat Anda ingin men-deploy Pod.
- BUCKET_NAME: nama bucket Cloud Storage yang Anda tentukan saat mengonfigurasi akses ke bucket Cloud Storage.
Anda dapat menentukan garis bawah (
_
) untuk memasang semua bucket yang dapat diakses oleh ServiceAccount Kubernetes. Untuk mempelajari lebih lanjut, lihat Pemasangan dinamis dalam dokumentasi Cloud Storage FUSE.
Terapkan manifes ke cluster:
kubectl apply -f PV_FILE_PATH
Ganti PV_FILE_PATH dengan jalur ke file YAML Anda.
Membuat PersistentVolumeClaim
Buat manifes PersistentVolumeClaim dengan spesifikasi berikut:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: example-storage-class
Ganti NAMESPACE dengan namespace Kubernetes tempat Anda ingin men-deploy Pod.
Untuk mengikat PersistentVolume ke PersistentVolumeClaim, periksa setelan konfigurasi berikut:
- Kolom
spec.storageClassName
dalam manifes PersistentVolume dan PersistentVolumeClaim Anda harus cocok. storageClassName tidak perlu merujuk ke objek StorageClass yang ada. Untuk mengikat klaim ke volume, Anda dapat menggunakan nama apa pun yang diinginkan, tetapi nama tersebut tidak boleh kosong. - Kolom
spec.accessModes
dalam manifes PersistentVolume dan PersistentVolumeClaim Anda harus cocok. - Kolom
spec.capacity.storage
dalam manifes PersistentVolume Anda harus cocok denganspec.resources.requests.storage
dalam manifes PersistentVolumeClaim. Karena bucket Cloud Storage tidak memiliki batas ukuran, Anda dapat menetapkan angka berapa pun untuk kapasitas, tetapi tidak boleh kosong.
- Kolom
Terapkan manifes ke cluster:
kubectl apply -f PVC_FILE_PATH
Ganti PVC_FILE_PATH dengan jalur ke file YAML Anda.
Menggunakan volume di Pod
Buat manifes Pod dengan spesifikasi berikut:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-static-pvc namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" spec: containers: - image: busybox name: busybox command: ["sleep"] args: ["infinity"] volumeMounts: - name: gcs-fuse-csi-static mountPath: /data readOnly: true serviceAccountName: KSA_NAME volumes: - name: gcs-fuse-csi-static persistentVolumeClaim: claimName: gcs-fuse-csi-static-pvc readOnly: true
Ganti nilai berikut:
- NAMESPACE: namespace Kubernetes tempat Anda ingin men-deploy Pod.
- KSA_NAME: nama ServiceAccount Kubernetes yang Anda buat saat mengonfigurasi akses ke bucket Cloud Storage.
Contoh manifes menampilkan setelan yang diperlukan ini:
metadata.annotations
: anotasigke-gcsfuse/volumes: "true"
harus ada. Lihat Mengonfigurasi container sidecar untuk anotasi opsional.
Secara opsional, Anda dapat menyesuaikan variabel ini:
spec.containers[n].volumeMonts[n].readOnly
: Tentukan benar jika hanya volume tertentu yang bersifat hanya baca.spec.volumes[n].persistentVolumeClaim.readOnly
: Tentukan benar (true) jika semua volume yang terpasang bersifat hanya baca.
Terapkan manifes ke cluster:
kubectl apply -f POD_FILE_PATH
Ganti POD_FILE_PATH dengan jalur ke file YAML Anda.
(Opsional) Pasang bucket Cloud Storage yang sama dengan volume persisten yang berbeda {:#mount-same-bucket-different-pv}, Tersedia mulai dari GKE versi 1.33.0-gke.1932000
Untuk memasang bucket Cloud Storage yang sama menggunakan beberapa volume persisten yang berbeda, Anda harus menggunakan volumeHandle
unik untuk setiap volume persisten. Di objek PersistentVolume, gunakan format BUCKET_NAME:UNIQUE_SUFFIX
untuk kolom volumeHandle
. Ganti BUCKET_NAME
dengan nama bucket Anda dan UNIQUE_SUFFIX
dengan ID unik yang Anda inginkan. Misalnya: myBucket:xyz123
.
Contoh kasus penggunaan dapat berupa pemasangan bucket Cloud Storage yang sama ke node yang sama beberapa kali, masing-masing dengan serangkaian opsi pemasangan yang berbeda.
Memecahkan masalah
Jika Anda perlu memecahkan masalah Cloud Storage FUSE, Anda dapat menetapkan
flag log-severity
ke TRACE
. Anda menetapkan tanda di bagian args
dari
spesifikasi container driver dalam YAML deployment. Hal ini menyebabkan atribut volume
gcsfuseLoggingSeverity
otomatis disetel untuk merekam aktivitas.
Untuk tips pemecahan masalah tambahan, lihat Panduan Pemecahan Masalah dalam dokumentasi project GitHub.
Langkah berikutnya
- Pelajari cara mengoptimalkan performa untuk driver CSI Cloud Storage FUSE.
- Pelajari contoh tambahan untuk menggunakan driver CSI di GitHub.
- Pelajari Cloud Storage FUSE lebih lanjut.