Mengonfigurasi penampung sidecar driver CSI Cloud Storage FUSE untuk GKE


Panduan ini menunjukkan cara mengonfigurasi resource untuk container pendamping driver CSI Cloud Storage FUSE, termasuk menyiapkan image pribadi, buffer tulis kustom, dan volume cache baca kustom. Biasanya, Anda tidak perlu mengubah setelan ini.

Driver CSI Cloud Storage FUSE menggunakan container sidecar yang dapat disesuaikan untuk memasang dan mengakses bucket Cloud Storage secara efisien. Dengan mengonfigurasi sidecar, Anda dapat menyesuaikan performa aplikasi dan penggunaan resource, yang dapat menghasilkan akses data yang lebih cepat, waktu pemrosesan yang lebih singkat, dan berpotensi menurunkan konsumsi resource keseluruhan untuk aplikasi Anda.

Panduan ini ditujukan bagi Developer, Admin, dan arsitek yang ingin mengoptimalkan performa, keamanan, dan efisiensi aplikasi mereka yang berinteraksi dengan GKE.

Sebelum membaca halaman ini, pastikan Anda memahami dasar-dasar Cloud Storage, Kubernetes, dan konsep containerization.

Cara kerja container pendamping

Driver CSI Cloud Storage FUSE menggunakan container pendamping untuk memasang bucket Cloud Storage agar dapat diakses sebagai sistem file lokal oleh aplikasi Kubernetes. Container sidecar ini, yang bernama gke-gcsfuse-sidecar, berjalan bersama container workload dalam Pod yang sama. Saat mendeteksi anotasi gke-gcsfuse/volumes: "true" dalam spesifikasi Pod, driver akan otomatis memasukkan container sidecar. Pendekatan container sidecar ini membantu memastikan keamanan dan mengelola resource secara efektif.

Container sidecar menangani kompleksitas pemasangan bucket Cloud Storage dan menyediakan akses sistem file ke aplikasi tanpa mengharuskan Anda mengelola runtime Cloud Storage FUSE secara langsung. Anda dapat mengonfigurasi batas resource untuk container sidecar menggunakan anotasi seperti gke-gcsfuse/cpu-limit dan gke-gcsfuse/memory-limit. Model container sidecar juga memastikan bahwa instance Cloud Storage FUSE terikat dengan siklus proses workload, sehingga mencegahnya menggunakan resource secara tidak perlu. Artinya, container sidecar akan otomatis dihentikan saat container workload keluar, terutama dalam workload Job atau Pod dengan RestartPolicy Never.

Kompatibilitas Istio

Container sidecar driver CSI Cloud Storage FUSE dan Istio dapat berdampingan dan berjalan secara bersamaan di Pod Anda. Proxy sidecar Istio mengelola traffic jaringan, sedangkan sidecar CSI mengoptimalkan akses penyimpanan, sehingga aplikasi Anda dapat berinteraksi secara efisien dengan Google Cloud Storage dengan performa dan kemampuan observasi yang lebih baik.

Mengonfigurasi buffer tulis kustom

Cloud Storage FUSE melakukan penahapan penulisan di direktori lokal, lalu mengupload ke Cloud Storage pada operasi close atau fsync.

Bagian ini menjelaskan cara mengonfigurasi volume buffer kustom untuk penulisan buffering Cloud Storage FUSE. Skenario ini mungkin berlaku jika Anda perlu mengganti volume emptyDir default untuk Cloud Storage FUSE guna melakukan penahapan file dalam operasi tulis. Hal ini berguna jika Anda perlu menulis file yang lebih besar dari 10 GiB di cluster Autopilot.

Anda dapat menentukan jenis penyimpanan apa pun yang didukung oleh driver CSI Cloud Storage FUSE untuk penyiapan cache file, seperti SSD Lokal, penyimpanan berbasis Persistent Disk, dan disk RAM (memori). GKE akan menggunakan volume yang ditentukan untuk penyimpanan sementara penulisan file. Untuk mempelajari opsi ini lebih lanjut, lihat Memilih penyimpanan untuk mencadangkan cache file Anda.

Untuk menggunakan volume buffer kustom, Anda harus menentukan fsGroup yang bukan nol.

Contoh berikut menunjukkan cara menggunakan PersistentVolumeClaim yang telah ditentukan sebelumnya sebagai volume buffer:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    gke-gcsfuse/volumes: "true"
spec:
  securityContext:
    fsGroup: FS_GROUP
  containers:
  ...
  volumes:
  - name: gke-gcsfuse-buffer
    persistentVolumeClaim:
      claimName: BUFFER_VOLUME_PVC

Ganti kode berikut:

  • FS_GROUP: ID fsGroup.
  • BUFFER_VOLUME_PVC: nama PVC yang telah ditentukan sebelumnya.

Mengonfigurasi volume cache baca kustom

Bagian ini menjelaskan cara mengonfigurasi volume cache kustom untuk caching baca Cloud Storage FUSE.

Skenario ini mungkin berlaku jika Anda perlu mengganti volume emptyDir default untuk Cloud Storage FUSE guna meng-cache file dalam operasi baca. Anda dapat menentukan jenis penyimpanan apa pun yang didukung oleh GKE, seperti PersistentVolumeClaim, dan GKE akan menggunakan volume yang ditentukan untuk penyiapan cache file. Hal ini berguna jika Anda perlu menyimpan dalam cache file yang lebih besar dari 10 GiB di cluster Autopilot. Untuk menggunakan volume cache kustom, Anda harus menentukan fsGroup yang tidak nol.

Contoh berikut menunjukkan cara menggunakan PersistentVolumeClaim yang telah ditentukan sebelumnya sebagai volume cache:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    gke-gcsfuse/volumes: "true"
spec:
  securityContext:
    fsGroup: FS_GROUP
  containers:
  ...
  volumes:
  - name: gke-gcsfuse-cache
    persistentVolumeClaim:
      claimName: CACHE_VOLUME_PVC

Ganti kode berikut:

  • FS_GROUP: ID fsGroup.
  • CACHE_VOLUME_PVC: nama PersistentVolumeClaim yang telah ditentukan sebelumnya.

Mengonfigurasi image pribadi untuk container sidecar

Bagian ini menjelaskan cara menggunakan image container sidecar jika Anda menghostingnya di registry container pribadi. Skenario ini mungkin berlaku jika Anda perlu menggunakan node pribadi untuk tujuan keamanan.

Untuk mengonfigurasi dan menggunakan image container sidecar pribadi, ikuti langkah-langkah berikut:

  1. Lihat tabel kompatibilitas GKE ini untuk menemukan image container file bantuan publik yang kompatibel.
  2. Tarik ke lingkungan lokal Anda dan kirim ke container registry pribadi Anda.
  3. Dalam manifes, tentukan container bernama gke-gcsfuse-sidecar dengan hanya kolom image. GKE akan menggunakan image container file bantuan yang ditentukan untuk menyiapkan injeksi container file bantuan.

    Berikut ini contohnya:

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        gke-gcsfuse/volumes: "true"
    spec:
      containers:
      - name: gke-gcsfuse-sidecar
        image: PRIVATE_REGISTRY/gcs-fuse-csi-driver-sidecar-mounter:PRIVATE_IMAGE_TAG
      - name: main # your main workload container.
    

    Ganti kode berikut:

    • PRIVATE_REGISTRY: container registry pribadi Anda.
    • PRIVATE_IMAGE_TAG: tag image container sidecar pribadi Anda.

Mengonfigurasi resource container sidecar

Secara default, container gke-gcsfuse-sidecar dikonfigurasi dengan permintaan dan batas resource berikut untuk cluster Standard dan Autopilot:

Permintaan:

  • CPU 250m
  • Memori 256 MiB
  • Penyimpanan efemeral 5 GiB

Batasan (GKE versi 1.29.1-gke.1670000 dan yang lebih baru):

  • CPU tanpa batas
  • memori tak terbatas
  • penyimpanan efemeral tanpa batas

Batas (sebelum versi GKE 1.29.1-gke.1670000):

  • CPU 250m
  • Memori 256 MiB
  • Penyimpanan efemeral 5 GiB

Secara default, container gke-gcsfuse-metadata-prefetch dikonfigurasi dengan permintaan dan batas resource berikut untuk cluster Standard dan Autopilot:

Permintaan:

  • CPU 10m
  • Memori 10 MiB
  • Penyimpanan efemeral 10 MiB

Batas:

  • CPU 50m
  • Memori 250 MiB
  • penyimpanan efemeral tanpa batas

Di cluster Standard dan Autopilot, Anda dapat mengganti nilai default. Cara GKE menangani resource penampung bergantung pada mode operasi cluster Anda:

  • Cluster standar: Jika salah satu permintaan atau batas ditetapkan dan yang lain tidak ditetapkan, batas dan permintaan resource Pod akan ditetapkan sama. Jika permintaan dan batas ditetapkan, Pod akan menggunakan permintaan dan batas resource persis yang Anda tentukan. Jika Anda tidak menetapkan nilai apa pun, resource default (yang dijelaskan di atas) akan diterapkan secara langsung.
  • Cluster Autopilot: Jika salah satu permintaan atau batas ditetapkan dan yang lain tidak ditetapkan, batas dan permintaan resource Pod akan ditetapkan sama. Lihat Menetapkan batas resource di Autopilot untuk memahami cara penggantian resource, dan nilai resource default yang ditetapkan akan memengaruhi perilaku pod.

Untuk menimpa nilai default untuk penampung gke-gcsfuse-sidecar, Anda dapat menentukan anotasi gke-gcsfuse/[cpu-limit|memory-limit|ephemeral-storage-limit|cpu-request|memory-request|ephemeral-storage-request] seperti yang ditunjukkan dalam contoh berikut:

Untuk menimpa nilai default untuk penampung gke-gcsfuse-metadata-prefetch (mulai dari GKE versi 1.32.3-gke.1717000 dan yang lebih baru), Anda dapat menentukan anotasi gke-gcsfuse/[metadata-prefetch-cpu-limit|metadata-prefetch-memory-limit|metadata-prefetch-ephemeral-storage-limit|metadata-prefetch-cpu-request|metadata-prefetch-memory-request|metadata-prefetch-ephemeral-storage-request] seperti yang ditunjukkan dalam contoh berikut:

apiVersion: v1
kind: Pod
metadata:
  annotations:
    gke-gcsfuse/volumes: "true"

    # gke-gcsfuse-sidecar overrides
    gke-gcsfuse/cpu-limit: "10"
    gke-gcsfuse/memory-limit: 10Gi
    gke-gcsfuse/ephemeral-storage-limit: 1Ti
    gke-gcsfuse/cpu-request: 500m
    gke-gcsfuse/memory-request: 1Gi
    gke-gcsfuse/ephemeral-storage-request: 50Gi

    # gke-gcsfuse-metadata-prefetch overrides
    gke-gcsfuse/metadata-prefetch-cpu-limit: "10"
    gke-gcsfuse/metadata-prefetch-memory-limit: 10Gi
    gke-gcsfuse/metadata-prefetch-ephemeral-storage-limit: 1Ti
    gke-gcsfuse/metadata-prefetch-cpu-request: 500m
    gke-gcsfuse/metadata-prefetch-memory-request: 1Gi
    gke-gcsfuse/metadata-prefetch-ephemeral-storage-request: 50Gi

Anda dapat menggunakan nilai "0" untuk membatalkan setelan batas atau permintaan resource apa pun, tetapi perhatikan bahwa container gke-gcsfuse-sidecar sudah tidak memiliki semua batas (cpu-limit, memory-limit, dan ephemeral-storage-limit), dan container gke-gcsfuse-metadata-prefetch sudah tidak memiliki ephemeral-storage-limit, jadi menetapkan batas ini ke "0" pada cluster dengan GKE versi 1.32.3-gke.1717000 atau yang lebih baru, tidak akan berpengaruh.

Misalnya, menyetel gke-gcsfuse/metadata-prefetch-memory-limit: "0", menunjukkan bahwa Anda ingin batas memori container gke-gcsfuse-metadata-prefetch tidak disetel. Hal ini berguna jika Anda tidak dapat memutuskan jumlah resource yang dibutuhkan fitur pengambilan data metadata untuk beban kerja Anda, dan ingin membiarkan pengambilan data metadata menggunakan semua resource yang tersedia di node.

Mengonfigurasi verbositas logging

Secara default, penampung gke-gcsfuse-sidecar menghasilkan log di level info dan error. Namun, untuk men-debug atau melakukan analisis yang lebih mendetail, Anda mungkin perlu menyesuaikan kejelasan logging. Bagian ini menguraikan cara menaikkan atau menurunkan tingkat logging.

Anda dapat menggunakan opsi pemasangan untuk mengonfigurasi kejelasan log atau menggunakan kemampuan driver CSI untuk menerjemahkan nilai atribut volume ke dalam setelan konfigurasi gcsfuse yang diperlukan.

Dalam manifes Pod target, sertakan konfigurasi berikut:

      volumeAttributes:
        bucketName: BUCKET_NAME
        mountOptions: "implicit-dirs"
        gcsfuseLoggingSeverity:  LOGGING_SEVERITY

Untuk menggunakan opsi pemasangan, sertakan konfigurasi berikut dalam manifes Pod target:

  mountOptions: "logging:severity:LOGGING_SEVERITY"

Ganti kode berikut:

  • BUCKET_NAME: nama bucket Cloud Storage Anda.
  • LOGGING_SEVERITY: salah satu nilai berikut, berdasarkan persyaratan Anda:
    • trace
    • debug
    • info
    • warning
    • error

Setelah pod di-deploy, driver CSI akan memulai gcsfuse dengan tingkat logging yang baru dikonfigurasi.

Anda dapat menggunakan filter berikut untuk memverifikasi apakah tingkat keparahan logging diterapkan:

resource.labels.container_name="gke-gcsfuse-sidecar"
resource.type="k8s_container"
resource.labels.pod_name="POD_NAME"
"severity:"

Langkah berikutnya