Panduan ini menunjukkan cara menggunakan volume sementara CSI yang didukung oleh bucket Cloud Storage untuk mengelola resource penyimpanan secara otomatis untuk Pod atau Tugas Kubernetes di Google Kubernetes Engine (GKE). Volume efemeral CSI terikat dengan siklus proses Pod atau Tugas, dan Anda tidak perlu menangani objek PersistentVolume dan PersistentVolumeClaim secara manual.
Panduan ini ditujukan untuk admin dan operator Platform yang ingin menyederhanakan pengelolaan penyimpanan untuk aplikasi GKE mereka.
Sebelum membaca halaman ini, pastikan Anda sudah memahami volume efemeral CSI, Pod dan Tugas Kubernetes, serta bucket Cloud Storage.
Jika Anda sudah memahami PersistentVolumes dan menginginkan konsistensi dengan deployment yang ada yang mengandalkan jenis resource ini, lihat Memasang bucket Cloud Storage sebagai volume persisten.
Sebelum memulai
Pastikan Anda telah menyelesaikan prasyarat berikut:
- Pahami persyaratan dan batasan driver CSI Cloud Storage FUSE.
- Membuat bucket Cloud Storage
- Mengaktifkan driver CSI Cloud Storage FUSE
- Mengonfigurasi akses ke bucket Cloud Storage
Cara kerja penyimpanan efemeral CSI untuk bucket Cloud Storage
Volume efemeral CSI menyederhanakan pengelolaan penyimpanan untuk aplikasi Anda di GKE. Anda menentukan volume efemeral CSI langsung dalam spesifikasi Pod atau Tugas. Penggunaan volume efemeral CSI menghilangkan kebutuhan akan objek PersistentVolume dan PersistentVolumeClaim terpisah.
Penggunaan volume efemeral CSI melibatkan operasi berikut:
Definisi penyimpanan: Anda menentukan penyimpanan dalam file YAML Pod atau Tugas, 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 cache file. Cache file dapat meningkatkan performa aplikasi GKE dengan meng-cache file Cloud Storage yang sering diakses di disk 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 dengan ukuran lebih dari 1 GB.
Pemanggilan driver: Saat Anda membuat Pod atau Tugas, GKE mendeteksi permintaan volume efemeral dan memanggil driver CSI Cloud Storage FUSE.
Pemasangan dan pemasangan volume: Driver CSI memasang volume efemeral CSI (yang mengarah ke bucket Cloud Storage yang mendasarinya) dan menyediakannya untuk Pod atau Tugas, sehingga dapat diakses oleh aplikasi Anda. Untuk menyesuaikan cara pemasangan bucket di sistem file, Anda dapat menggunakan opsi pemasangan. Anda juga dapat menggunakan atribut volume untuk mengonfigurasi perilaku tertentu dari driver CSI Cloud Storage FUSE.
Pengelolaan siklus proses: Volume efemeral ada selama masa aktif Pod atau Tugas. Saat Pod dihapus atau Tugas selesai, driver CSI akan otomatis menangani pembersihan, dan melepas pemasangan volume.
Melampirkan volume efemeral CSI
Ikuti petunjuk ini, bergantung pada apakah Anda ingin melampirkan volume sementara CSI ke Pod atau Tugas.
Pod
Untuk memasang volume efemeral CSI di Pod, ikuti langkah-langkah berikut:
Buat manifes YAML Pod dengan spesifikasi berikut:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-ephemeral namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" spec: terminationGracePeriodSeconds: 60 containers: - image: busybox name: busybox command: ["sleep"] args: ["infinity"] volumeMounts: - name: gcs-fuse-csi-ephemeral mountPath: /data readOnly: true serviceAccountName: KSA_NAME volumes: - name: gcs-fuse-csi-ephemeral csi: driver: gcsfuse.csi.storage.gke.io readOnly: true volumeAttributes: bucketName: BUCKET_NAME mountOptions: "implicit-dirs"
Ganti nilai berikut:
- NAMESPACE: namespace Kubernetes tempat Anda ingin men-deploy Pod.
- KSA_NAME: nama Kubernetes ServiceAccount yang Anda tentukan saat mengonfigurasi akses ke bucket Cloud Storage.
- 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 Kubernetes ServiceAccount. Untuk mempelajari lebih lanjut, lihat Pemasangan dinamis dalam dokumentasi Cloud Storage FUSE.
Contoh manifes menunjukkan setelan yang diperlukan berikut:
metadata.annotations
: anotasigke-gcsfuse/volumes: "true"
harus ada. Lihat Mengonfigurasi penampung sidecar untuk anotasi opsional.spec.volumes[n].csi.driver
: gunakangcsfuse.csi.storage.gke.io
sebagai nama driver CSI.
Secara opsional, Anda dapat menyesuaikan variabel berikut:
spec.terminationGracePeriodSeconds
: Secara default, nilai ini ditetapkan ke 30. Jika Anda perlu menulis file berukuran besar ke bucket Cloud Storage, tingkatkan nilai ini untuk memastikan bahwa Cloud Storage FUSE memiliki cukup waktu untuk mengosongkan data setelah aplikasi Anda keluar. Untuk mempelajari lebih lanjut, lihat Praktik terbaik Kubernetes: Mengakhiri dengan masa tenggang.spec.volumes[n].csi.volumeAttributes.mountOptions
: Teruskan opsi pemasangan ke Cloud Storage FUSE. Tentukan flag dalam satu string yang dipisahkan koma, tanpa spasi.spec.volumes[n].csi.volumeAttributes
: Teruskan atribut volume tambahan ke Cloud Storage FUSE.spec.volumes[n].csi.readOnly
: Tentukan benar jika semua volume yang terpasang bersifat hanya baca.spec.containers[n].volumeMounts[m].readOnly
: Tentukan benar jika hanya volume tertentu yang bersifat hanya baca.
Jalankan perintah berikut untuk menerapkan manifes ke cluster Anda:
kubectl apply -f FILE_PATH
Ganti FILE_PATH dengan jalur ke file YAML Anda.
Pod (penyimpanan file dalam cache)
Untuk melampirkan volume efemeral CSI dengan cache file di Pod, ikuti langkah-langkah berikut:
Buat cluster atau node pool dengan penyimpanan efemeral yang didukung SSD Lokal, dengan mengikuti langkah-langkah di Membuat cluster atau node pool dengan penyimpanan efemeral yang didukung SSD Lokal.
Buat manifes YAML Pod dengan spesifikasi berikut:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-file-cache-example namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" gke-gcsfuse/ephemeral-storage-limit: "50Gi" spec: nodeSelector: cloud.google.com/gke-ephemeral-storage-local-ssd: "true" restartPolicy: Never initContainers: - name: data-loader image: gcr.io/google.com/cloudsdktool/google-cloud-cli:slim resources: limits: cpu: 500m memory: 1Gi requests: cpu: 500m memory: 1Gi command: - "/bin/sh" - "-c" - | mkdir -p /test_files for i in $(seq 1 1000); do dd if=/dev/zero of=/test_files/file_$i.txt bs=1024 count=64; done gcloud storage cp /test_files gs://BUCKET_NAME --recursive containers: - name: data-validator image: busybox resources: limits: cpu: 500m memory: 512Mi requests: cpu: 500m memory: 512Mi command: - "/bin/sh" - "-c" - | echo "first read with cache miss" time cat /data/test_files/file_* > /dev/null echo "second read from local cache" time cat /data/test_files/file_* > /dev/null volumeMounts: - name: gcs-fuse-csi-ephemeral mountPath: /data serviceAccountName: KSA_NAME volumes: - name: gcs-fuse-csi-ephemeral csi: driver: gcsfuse.csi.storage.gke.io volumeAttributes: bucketName: BUCKET_NAME mountOptions: "implicit-dirs,file-cache:max-size-mb:-1"
Ganti nilai berikut:
- NAMESPACE: namespace Kubernetes tempat Anda ingin men-deploy Pod.
- KSA_NAME: nama Kubernetes ServiceAccount yang Anda tentukan saat mengonfigurasi akses ke bucket Cloud Storage.
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 Kubernetes ServiceAccount. Untuk mempelajari lebih lanjut, lihat Pemasangan dinamis dalam dokumentasi Cloud Storage FUSE.Dalam contoh manifes, loader data penampung init menghasilkan 1.000 file dengan ukuran 64 KiB, dan mengupload file ke bucket Cloud Storage. Penampung utama
data-validator
membaca semua file dari bucket dua kali, dan mencatat durasi ke dalam log.
Jalankan perintah berikut untuk menerapkan manifes ke cluster Anda:
kubectl apply -f FILE_PATH
Ganti FILE_PATH dengan jalur ke file YAML Anda.
Untuk melihat output log, jalankan perintah berikut:
kubectl logs -n NAMESPACE gcs-fuse-csi-file-cache-example -c data-validator
Ganti NAMESPACE dengan namespace beban kerja Anda.
Output-nya akan terlihat seperti berikut:
first read with cache miss real 0m 54.68s ... second read from local cache real 0m 0.38s ...
Output menunjukkan bahwa pembacaan kedua dengan cache lokal jauh lebih cepat daripada pembacaan pertama dengan cache miss.
Pod (download paralel)
Untuk melampirkan volume efemeral CSI dengan download paralel di Pod, ikuti langkah-langkah berikut:
Buat manifes YAML Pod dengan spesifikasi berikut:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-ephemeral namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" gke-gcsfuse/ephemeral-storage-limit: "50Gi" spec: containers: ... volumes: - name: gcs-fuse-csi-ephemeral csi: driver: gcsfuse.csi.storage.gke.io volumeAttributes: bucketName: BUCKET_NAME mountOptions: "implicit-dirs,file-cache:enable-parallel-downloads:true,file-cache:max-size-mb:-1" fileCacheCapacity: "-1"
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 Kubernetes ServiceAccount. Untuk mempelajari lebih lanjut, lihat Pemasangan dinamis dalam dokumentasi Cloud Storage FUSE.
Jalankan perintah berikut untuk menerapkan manifes ke cluster Anda:
kubectl apply -f FILE_PATH
Ganti FILE_PATH dengan jalur ke file YAML Anda.
Tugas
Untuk melampirkan volume efemeral CSI dalam Tugas, ikuti langkah-langkah berikut:
Buat manifes YAML Tugas dengan spesifikasi berikut:
apiVersion: batch/v1 kind: Job metadata: name: gcs-fuse-csi-job-example namespace: NAMESPACE spec: template: metadata: annotations: gke-gcsfuse/volumes: "true" spec: serviceAccountName: KSA_NAME containers: - name: writer image: busybox command: - "/bin/sh" - "-c" - touch /data/test && echo $(date) >> /data/test && sleep 10 volumeMounts: - name: gcs-fuse-csi-ephemeral mountPath: /data - name: reader image: busybox command: - "/bin/sh" - "-c" - sleep 10 && cat /data/test volumeMounts: - name: gcs-fuse-csi-ephemeral mountPath: /data readOnly: true volumes: - name: gcs-fuse-csi-ephemeral csi: driver: gcsfuse.csi.storage.gke.io volumeAttributes: bucketName: BUCKET_NAME restartPolicy: Never backoffLimit: 1
Ganti nilai berikut:
- NAMESPACE: namespace Kubernetes tempat Anda men-deploy Pod.
- KSA_NAME: nama Kubernetes ServiceAccount yang Anda tentukan saat mengonfigurasi akses ke bucket Cloud Storage.
- 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 menunjukkan setelan yang diperlukan berikut:
metadata.annotations
: anotasigke-gcsfuse/volumes: "true"
harus ada. Lihat Mengonfigurasi penampung sidecar untuk anotasi opsional.spec.volumes[n].csi.drive
r: gunakangcsfuse.csi.storage.gke.io
sebagai nama driver CSI.
Secara opsional, Anda dapat menyesuaikan variabel berikut:
spec.volumes[n].csi.volumeAttributes.mountOptions
: Teruskan opsi pemasangan ke Cloud Storage FUSE. Tentukan flag dalam satu string yang dipisahkan koma, tanpa spasi.spec.volumes[n].csi.volumeAttributes
: Teruskan atribut volume tambahan ke Cloud Storage FUSE.spec.volumes[n].csi.readOnly
: Tentukan benar jika semua pemasangan volume bersifat hanya baca.spec.containers[n].volumeMounts[m].readOnly
: Tentukan benar jika hanya volume tertentu yang bersifat hanya baca.
Jalankan perintah berikut untuk menerapkan manifes ke cluster Anda:
kubectl apply -f FILE_PATH
Ganti
FILE_PATH
dengan jalur ke file YAML Anda.
Memecahkan masalah
Jika perlu memecahkan masalah Cloud Storage FUSE, Anda dapat menetapkan flag log-severity
ke TRACE
. Anda menetapkan tanda di bagian args
dari
spesifikasi penampung driver dalam YAML deployment. Hal ini menyebabkan
atribut volume gcsfuseLoggingSeverity
otomatis disetel ke trace.
Untuk tips pemecahan masalah tambahan, lihat Panduan Pemecahan Masalah dalam dokumentasi project GitHub.
Langkah selanjutnya
- 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.