Dokumen ini menunjukkan cara mengonfigurasi setelan resource untuk container sidecar driver CSI Cloud Storage FUSE di Google Kubernetes Engine (GKE).
Untuk mengoptimalkan performa dan penggunaan resource aplikasi Anda di GKE, konfigurasikan setelan resource tertentu untuk container sidecar driver CSI Cloud Storage FUSE. Dengan menyiapkan resource ini—seperti image pribadi, buffer tulis kustom, dan volume cache baca kustom—Anda dapat memperoleh kontrol yang lebih besar atas cara aplikasi Anda berinteraksi dengan Cloud Storage. Konfigurasi ini dapat menghasilkan akses data yang lebih cepat, waktu pemrosesan yang lebih singkat, dan berpotensi mengurangi konsumsi resource secara keseluruhan di cluster GKE Anda.
Dokumen ini ditujukan untuk developer, administrator, dan arsitek yang mengoptimalkan performa aplikasi. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.
Sebelum memulai, pahami konsep workload dan penyimpanan berikut:
Cara kerja container sidecar
Driver CSI Cloud Storage FUSE menggunakan container sidecar 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 driver mendeteksi anotasi gke-gcsfuse/volumes: "true" dalam spesifikasi Pod, driver akan otomatis menyisipkan 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 Tugas atau Pod dengan RestartPolicy dari Never.
Kompatibilitas OSS Istio
Container sidecar driver CSI Cloud Storage FUSE dan Istio dapat berjalan bersamaan dan serentak di Pod Anda.
Namun, di GKE versi 1.29 dan yang lebih baru, Anda mungkin mengalami
kegagalan autentikasi jika Cloud Storage FUSE mencoba terhubung ke server metadata
sebelum proxy Istio siap. Jika mengalami kegagalan autentikasi ini,
Anda dapat menyelesaikan masalah ini dengan menambahkan traffic.sidecar.istio.io/excludeOutboundIPRanges: 169.254.169.254/32
ke metadata.annotations dalam spesifikasi Pod. Anotasi ini
mengonfigurasi Istio untuk mengecualikan alamat IP server metadata GKE
dari pengalihan.
Mengonfigurasi buffer tulis kustom
Cloud Storage FUSE menyimpan 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 staging 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 caching file, seperti SSD Lokal, penyimpanan berbasis Persistent Disk, dan RAM disk (memori). GKE akan menggunakan volume yang ditentukan untuk buffering penulisan file. Untuk mempelajari opsi ini lebih lanjut, lihat Memilih penyimpanan untuk mendukung cache file Anda.
Untuk menggunakan volume buffer kustom yang didukung oleh Persistent Disk, Anda harus menentukan fsGroup bukan nol di securityContext Pod Anda. Langkah ini memberikan izin baca atau izin tulis yang diperlukan untuk volume ke container sidecar non-root. Setelan ini tidak diperlukan jika PVC Anda
memasang bucket Cloud Storage sebagai volume persisten
menggunakan driver CSI Cloud Storage FUSE.
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 penyimpanan cache 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 yang didukung oleh Persistent Disk, Anda harus
menentukan fsGroup non-nol di securityContext Pod Anda. Langkah ini memberikan izin baca atau izin tulis yang diperlukan untuk volume ke container sidecar non-root. Setelan ini tidak diperlukan jika PVC Anda
memasang bucket Cloud Storage sebagai volume persisten
menggunakan driver CSI Cloud Storage FUSE.
Contoh berikut menunjukkan cara menggunakan PersistentVolumeClaim yang telah ditetapkan 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:
fsGroupID. - 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 Container Registry 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:
- Lihat tabel kompatibilitas GKE ini untuk menemukan image container sidecar publik yang kompatibel.
- Tarik ke lingkungan lokal Anda dan kirimkan ke registry container pribadi Anda.
Dalam manifes, tentukan container bernama
gke-gcsfuse-sidecardengan hanya kolom image. GKE akan menggunakan image container sidecar yang ditentukan untuk menyiapkan injeksi container sidecar.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. Contoh,
us-central1-docker.pkg.dev/my-project/my-registry. - PRIVATE_IMAGE_TAG: tag image container sidecar pribadi Anda. Contoh,
v1.17.1-gke.1.
- PRIVATE_REGISTRY: Container Registry pribadi Anda. Contoh,
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
Batas (GKE versi 1.29.1-gke.1670000 dan yang lebih baru):
- CPU tanpa batas
- memori tak terbatas
- penyimpanan efemeral tak terbatas
Batas (sebelum GKE versi 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 lainnya tidak ditetapkan, batas dan permintaan resource Pod akan ditetapkan sama. Jika permintaan dan batas ditetapkan, Pod akan menggunakan permintaan dan batas resource persis seperti 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 lainnya 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 container 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, 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.
(Opsional) Menganalisis performa menggunakan Cloud Profiler
Anda dapat menggunakan Cloud Profiler untuk mendapatkan visibilitas berkelanjutan dan terperinci ke dalam konsumsi resource aplikasi yang banyak menggunakan penyimpanan. Data terperinci dapat membantu Anda memantau penggunaan CPU dan penggunaan memori secara proaktif di driver CSI Cloud Storage FUSE dan container sidecar-nya. Insight yang Anda peroleh dari data Cloud Profiler dapat membantu Anda mengidentifikasi jalur kode yang tidak efisien, mengoptimalkan alokasi resource, dan memecahkan masalah kompleks seperti kebocoran memori atau peristiwa kehabisan memori (OOM) yang tidak terduga sebelum memengaruhi stabilitas layanan.
Penggunaan Cloud Profiler bersifat opsional dan dirancang untuk administrator yang memerlukan diagnostik performa mendetail. Cloud Profiler diaktifkan secara default untuk driver node. Untuk container sidecar, fitur ini bersifat opsional dan dapat Anda aktifkan secara manual.
Sebelum mengaktifkan Cloud Profiler
Untuk menggunakan Cloud Profiler dengan driver CSI Cloud Storage FUSE, pastikan Anda menggunakan GKE versi 1.36.0-gke.2403000 atau yang lebih baru. Sebelum membuat profil, Anda harus mengaktifkan Cloud Profiler API dan mengonfigurasi izin IAM yang sesuai untuk komponen yang ingin Anda buat profilnya.
Mengaktifkan API
Mengaktifkan Cloud Profiler API
Memberikan izin ke driver node
Untuk mengirim data pembuatan profil ke Cloud Profiler, driver node memerlukan izin IAM. Karena driver node berjalan di jaringan host secara default, driver tersebut melakukan autentikasi menggunakan akun layanan IAM yang terkait dengan node GKE, bukan menggunakan Workload Identity Federation for GKE.
Berikan peran roles/cloudprofiler.agent ke akun layanan node Anda:
gcloud projects add-iam-policy-binding PROJECT_ID \
--role=roles/cloudprofiler.agent \
--member=serviceAccount:NODE_SERVICE_ACCOUNT
Ganti kode berikut:
PROJECT_ID: Google Cloud Project ID Anda.NODE_SERVICE_ACCOUNT: akun layanan IAM yang digunakan oleh node GKE Anda. Biasanya, akun ini adalah akun layanan Compute Engine default, misalnya,PROJECT_NUMBER-compute@, kecuali jika node Anda dikonfigurasi untuk menggunakan akun layanan yang berbeda.
Memberikan izin ke container sidecar
Untuk mengirim data pembuatan profil ke Cloud Profiler, container sidecar dan proses gcsfuse memerlukan izin IAM. Komponen ini melakukan autentikasi menggunakan Workload Identity Federation for GKE, yang menggunakan Akun Layanan Kubernetes (KSA) yang terkait dengan Pod workload Anda.
Berikan peran roles/cloudprofiler.agent ke KSA yang digunakan Pod Anda:
gcloud projects add-iam-policy-binding projects/PROJECT_ID \
--role=roles/cloudprofiler.agent \
--member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME \
--condition=None
Ganti kode berikut:
PROJECT_ID: Google Cloud Project ID Anda.PROJECT_NUMBER: nomor project Google Cloud Anda.NAMESPACE: nama namespace Kubernetes Anda.KSA_NAME: nama Akun Layanan Kubernetes Anda.
Mengaktifkan Cloud Profiler untuk workload sidecar
Untuk membuat profil untuk pemasang sidecar dan proses gcsfuse yang mendasarinya, tetapkan atribut volume enableCloudProfilerForSidecar ke "true" dalam spesifikasi beban kerja Anda. Mengaktifkan Cloud Profiler untuk container sidecar juga akan otomatis mengaktifkannya untuk proses gcsfuse yang mendasarinya.
Ganti BUCKET_NAME dengan nama bucket Cloud Storage Anda:
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: BUCKET_NAME
enableCloudProfilerForSidecar: "true"
Melihat data pembuatan profil
Untuk melihat data pembuatan profil, buka halaman Cloud Profiler di konsol Google Cloud . Gunakan filter Nama layanan sebagai berikut untuk menganalisis komponen yang sedang Anda selidiki:
| Komponen | Filter nama layanan |
|---|---|
| Driver Node | gcs-fuse-csi-driver |
| Pemasang Sidecar | gke-gcsfuse-sidecar |
| GCSFuse | gcsfuse |
Cloud Profiler mengidentifikasi setiap instance menggunakan format POD_NAME_POD_UID. Hal ini memastikan bahwa setiap instance diidentifikasi secara unik meskipun Pod dimulai ulang.
(Opsional) Nonaktifkan pembuatan profil GCSFuse
Secara default, mengaktifkan pembuatan profil untuk container sidecar juga akan membuat profil proses gcsfuse yang mendasarinya. Anda mungkin ingin menonaktifkan pembuatan profil gcsfuse untuk mengurangi overhead resource atau memfokuskan analisis hanya pada performa container sidecar.
Untuk menonaktifkan pembuatan profil gcsfuse sambil tetap mengaktifkan pembuatan profil sidecar, tambahkan enable-cloud-profiler=false ke atribut mountOptions dalam spesifikasi volume Anda.
Ganti BUCKET_NAME dengan nama bucket Cloud Storage Anda:
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: BUCKET_NAME
enableCloudProfilerForSidecar: "true"
mountOptions: "enable-cloud-profiler=false"
Mengonfigurasi panjang respons logging
Secara default, container gke-gcsfuse-sidecar menghasilkan log pada level info dan error.
Namun, untuk men-debug atau melakukan analisis yang lebih mendetail, Anda mungkin perlu menyesuaikan detail logging. Bagian ini menguraikan cara meningkatkan atau menurunkan level logging.
Anda dapat menggunakan opsi pemasangan untuk mengonfigurasi panjang respons logging 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 kebutuhan Anda:
tracedebuginfowarningerror
Setelah Pod di-deploy, driver CSI akan memulai gcsfuse dengan level 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:"
Memecahkan masalah
Untuk mengetahui informasi selengkapnya tentang pemecahan masalah driver CSI Cloud Storage FUSE, 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.