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 untuk Pod Kubernetes di Google Kubernetes Engine (GKE). Pertimbangkan untuk menggunakan opsi penyimpanan ini jika Anda sudah memahami PersistentVolume dan menginginkan konsistensi dengan deployment yang ada yang mengandalkan jenis resource ini.

Panduan ini ditujukan untuk pengguna operator dan admin 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:

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.

Menggunakan 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 cache file. Cache file dapat meningkatkan performa aplikasi GKE dengan menyimpan file Cloud Storage yang sering diakses ke 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 dengan ukuran 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 dalam sistem file lokal Pod. 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.

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

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

    Contoh manifes menunjukkan setelan yang diperlukan berikut:

    • spec.csi.driver: gunakan gcsfuse.csi.storage.gke.io sebagai nama driver CSI.

    Secara opsional, Anda dapat menyesuaikan variabel berikut:

    • 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 file dalam cache)

    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:

    • Kolom spec.storageClassName dalam manifes PersistentVolume dan PersistentVolumeClaim 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 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"
        gke-gcsfuse/ephemeral-storage-limit: "50Gi" 
    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:

    Contoh manifes menunjukkan setelan yang diperlukan berikut:

    Secara opsional, Anda dapat menyesuaikan variabel berikut:

    • spec.containers[n].volumeMonts[n].readOnly: Tentukan benar jika hanya volume tertentu yang bersifat hanya baca.
    • spec.volumes[n].persistentVolumeClaim.readOnly: Tentukan 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.

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 di 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