Memasang bucket Cloud Storage sebagai volume persisten

Panduan ini menunjukkan cara menggunakan volume persisten Kubernetes yang didukung oleh bucket Cloud Storage untuk mengelola resource penyimpanan bagi Pod Kubernetes 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 untuk admin Platform dan pengguna operator yang ingin menyederhanakan pengelolaan penyimpanan untuk aplikasi GKE mereka.

Sebelum membaca halaman ini, pastikan Anda 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:

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 memakai penyimpanan melalui PersistentVolumeClaims.

Penggunaan volume persisten yang didukung oleh bucket Cloud Storage melibatkan operasi berikut:

  1. 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 cache file. Penyimpanan cache file dapat meningkatkan performa aplikasi GKE dengan menyimpan cache file Cloud Storage yang sering diakses 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 berukuran lebih dari 1 GB.

  2. Pemanggilan driver: Saat PersistentVolumeClaim meminta penyimpanan yang cocok dengan spesifikasi PersistentVolume, GKE akan memanggil driver CSI Cloud Storage FUSE.

  3. Pemasangan bucket: Driver CSI memasang bucket ke node tempat Pod yang meminta dijadwalkan. Hal ini membuat konten bucket dapat diakses oleh Pod sebagai direktori di sistem file lokal Pod. Untuk menyesuaikan 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.

  4. 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

  1. 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:

    Manifes contoh menunjukkan setelan yang diperlukan ini:

    • spec.csi.driver: gunakan gcsfuse.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 sebagai daftar. Untuk mengetahui detail selengkapnya, lihat opsi pemasangan volume persisten.
    • spec.csi.volumeAttributes: Teruskan atribut volume tambahan ke Cloud Storage FUSE.

    Pod (penyimpanan 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 Kubernetes ServiceAccount. 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 Kubernetes ServiceAccount. Untuk mempelajari lebih lanjut, lihat Pemasangan dinamis dalam dokumentasi Cloud Storage FUSE.
  2. Terapkan manifes ke cluster:

    kubectl apply -f PV_FILE_PATH
    

    Ganti PV_FILE_PATH dengan jalur ke file YAML Anda.

Membuat PersistentVolumeClaim

  1. 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 ini:

    • spec.storageClassName: storageClassName dalam manifes PersistentVolume dan PersistentVolumeClaim harus cocok agar klaim dapat terikat ke volume. Driver CSI Cloud Storage FUSE tidak menggunakan objek StorageClass. Anda hanya perlu memastikan kolom storageClassName identik di kedua resource. Anda dapat menggunakan string kosong atau tidak kosong untuk kolom ini; kolom ini tidak perlu merujuk ke objek StorageClass yang ada dan hanya berfungsi sebagai label pengikatan antara PV dan PVC.
    • Kolom spec.accessModes dalam manifes PersistentVolume dan PersistentVolumeClaim harus cocok.
    • Kolom spec.capacity.storage dalam manifes PersistentVolume harus cocok dengan spec.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.
  2. Terapkan manifes ke cluster:

    kubectl apply -f PVC_FILE_PATH
    

    Ganti PVC_FILE_PATH dengan jalur ke file YAML Anda.

Menggunakan volume di Pod

  1. 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:

    Manifes contoh menunjukkan setelan yang diperlukan ini:

    Secara opsional, Anda dapat menyesuaikan variabel ini:

    • spec.containers[n].volumeMounts[n].readOnly: Tentukan benar (true) jika hanya pemasangan volume tertentu yang bersifat hanya baca.
    • spec.volumes[n].persistentVolumeClaim.readOnly: Tentukan benar (true) jika semua pemasangan volume bersifat hanya baca.
  2. Terapkan manifes ke cluster:

    kubectl apply -f POD_FILE_PATH
    

    Ganti POD_FILE_PATH dengan jalur ke file YAML Anda.

(Opsional) Memasang bucket Cloud Storage yang sama dengan PersistentVolumes yang berbeda

Mulai dari GKE versi 1.33.0-gke.1932000, Anda dapat menggunakan beberapa PersistentVolumes yang didukung oleh bucket Cloud Storage yang sama. Di setiap objek PersistentVolume, Anda harus menggunakan volumeHandle unik dalam format BUCKET_NAME:UNIQUE_SUFFIX.

Contoh kasus penggunaan dapat berupa pemasangan PersistentVolumes yang berbeda dengan opsi pemasangan yang berbeda ke Pod yang sama, dengan setiap PersistentVolume merujuk ke bucket Cloud Storage yang sama.

Memecahkan masalah

Untuk mengetahui informasi selengkapnya tentang cara memecahkan masalah driver CSI Cloud Storage FUSE, lihat panduan pemecahan masalah dalam dokumentasi project GitHub.

Langkah berikutnya