Halaman ini menjelaskan cara menyiapkan dan bersiap menggunakan driver CSI Cloud Storage FUSE untuk GKE.
Untuk menggunakan driver CSI Cloud Storage FUSE, lakukan langkah-langkah berikut:
Buat bucket Cloud Storage
Jika Anda belum melakukannya, buat bucket Cloud Storage. Anda akan memasang bucket ini sebagai volume di cluster GKE Anda. Untuk meningkatkan performa, tetapkan Jenis lokasi ke Region, lalu pilih region yang cocok dengan cluster GKE Anda.
Mengaktifkan driver CSI Cloud Storage FUSE
Ikuti langkah-langkah berikut, bergantung pada apakah Anda menggunakan cluster GKE Autopilot atau Standard. Sebaiknya gunakan cluster Autopilot untuk mendapatkan pengalaman Kubernetes yang terkelola sepenuhnya. Untuk memilih mode yang paling sesuai untuk workload Anda, lihat Memilih mode operasi GKE.
Autopilot
Driver CSI Cloud Storage FUSE diaktifkan secara default untuk cluster Autopilot. Anda dapat langsung membuka Mengonfigurasi akses ke bucket Cloud Storage.
Standar
Jika cluster Standard Anda mengaktifkan driver CSI Cloud Storage FUSE, lanjutkan ke bagian Mengonfigurasi akses ke bucket Cloud Storage.
Driver CSI Cloud Storage FUSE tidak diaktifkan secara default di cluster Standard. Untuk membuat cluster Standard dengan driver CSI Cloud Storage FUSE diaktifkan, Anda dapat menggunakan perintah gcloud container clusters create
:
gcloud container clusters create CLUSTER_NAME \
--addons GcsFuseCsiDriver \
--cluster-version=VERSION \
--location=LOCATION \
--workload-pool=PROJECT_ID.svc.id.goog
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda.VERSION
: nomor versi GKE. Anda harus memilih 1.24 atau yang lebih baru.LOCATION
: region atau zona Compute Engine untuk cluster.PROJECT_ID
: project ID Anda.
Untuk mengaktifkan driver di cluster Standard yang sudah ada, gunakan perintah gcloud container clusters update
:
gcloud container clusters update CLUSTER_NAME \
--update-addons GcsFuseCsiDriver=ENABLED \
--location=LOCATION
Untuk memverifikasi bahwa driver CSI Cloud Storage FUSE diaktifkan di cluster Anda, jalankan perintah berikut:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--format="value(addonsConfig.gcsFuseCsiDriverConfig.enabled)"
Mengonfigurasi akses ke bucket Cloud Storage
Driver CSI Cloud Storage FUSE menggunakan Workload Identity Federation untuk GKE sehingga Anda dapat menetapkan izin terperinci tentang cara Pod GKE Anda dapat mengakses data yang disimpan di Cloud Storage.
Agar bucket Cloud Storage Anda dapat diakses oleh cluster GKE, lakukan autentikasi menggunakan Workload Identity Federation untuk GKE dengan bucket Cloud Storage yang ingin Anda pasang dalam spesifikasi Pod:
- Jika Anda belum mengaktifkan Workload Identity Federation untuk GKE, ikuti langkah-langkah ini untuk mengaktifkannya. Jika Anda ingin menggunakan node pool yang ada, aktifkan Workload Identity Federation for GKE secara manual di node pool setelah mengaktifkan Workload Identity Federation for GKE di cluster.
Dapatkan kredensial untuk cluster Anda:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION
Ganti kode berikut:
CLUSTER_NAME
: nama cluster Anda yang telah mengaktifkan Workload Identity Federation untuk GKE.LOCATION
: region atau zona Compute Engine untuk cluster.
Buat namespace yang akan digunakan untuk Akun Layanan Kubernetes. Anda juga dapat menggunakan namespace
default
atau namespace yang sudah ada.kubectl create namespace NAMESPACE
Ganti
NAMESPACE
dengan nama namespace Kubernetes untuk Akun Layanan Kubernetes.Buat Akun Layanan Kubernetes yang akan digunakan aplikasi Anda. Anda juga dapat menggunakan Akun Layanan Kubernetes yang sudah ada di namespace mana pun, termasuk Akun Layanan Kubernetes
default
.kubectl create serviceaccount KSA_NAME \ --namespace NAMESPACE
Ganti
KSA_NAME
dengan nama ServiceAccount Kubernetes Anda.Berikan salah satu peran IAM untuk Cloud Storage ke Akun Layanan Kubernetes. Ikuti langkah-langkah berikut, bergantung pada apakah Anda memberikan akses Kubernetes ServiceAccount ke bucket Cloud Storage tertentu saja, atau akses global ke semua bucket dalam project.
Akses bucket tertentu
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE_NAME"
Ganti kode berikut:
BUCKET_NAME
: nama bucket Cloud Storage Anda.PROJECT_NUMBER
: nomor project numerik cluster GKE Anda. Untuk menemukan nomor project Anda, lihat Mengidentifikasi project.PROJECT_ID
: project ID cluster GKE Anda.NAMESPACE
: nama namespace Kubernetes untuk Akun Layanan Kubernetes.KSA_NAME
: nama ServiceAccount Kubernetes baru Anda.ROLE_NAME
: peran IAM yang akan ditetapkan ke ServiceAccount Kubernetes Anda.- Untuk beban kerja hanya baca, gunakan peran Storage Object Viewer (
roles/storage.objectViewer
). - Untuk beban kerja baca-tulis, gunakan peran Storage Object User (
roles/storage.objectUser
).
- Untuk beban kerja hanya baca, gunakan peran Storage Object Viewer (
Akses bucket global
gcloud projects add-iam-policy-binding GCS_PROJECT \ --member "principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role "ROLE_NAME"
Ganti kode berikut:
GCS_PROJECT
: project ID bucket Cloud Storage Anda.PROJECT_NUMBER
: nomor project numerik cluster GKE Anda. Untuk menemukan nomor project Anda, lihat Mengidentifikasi project.PROJECT_ID
: project ID cluster GKE Anda.NAMESPACE
: nama namespace Kubernetes untuk Akun Layanan Kubernetes.KSA_NAME
: nama ServiceAccount Kubernetes baru Anda.ROLE_NAME
: peran IAM yang akan ditetapkan ke ServiceAccount Kubernetes Anda.- Untuk beban kerja hanya baca, gunakan peran Storage Object Viewer (
roles/storage.objectViewer
). - Untuk beban kerja baca-tulis, gunakan peran Storage Object User (
roles/storage.objectUser
).
- Untuk beban kerja hanya baca, gunakan peran Storage Object Viewer (
Mengonfigurasi akses untuk Pod dengan jaringan host
Untuk versi cluster GKE yang lebih lama dari 1.33.3-gke.1226000
, driver CSI Cloud Storage FUSE tidak mendukung Pod yang berjalan di jaringan host (hostNetwork: true
) karena batasan Federasi Identitas Beban Kerja untuk GKE. Namun, untuk versi GKE yang lebih baru, Anda dapat mengonfigurasi autentikasi yang aman untuk Pod yang mengaktifkan hostNetwork
saat menggunakan driver CSI Cloud Storage FUSE untuk memasang bucket Cloud Storage. Dukungan jaringan host hanya tersedia di cluster GKE Standard.
Pastikan cluster GKE Anda memenuhi persyaratan berikut:
- Bidang kontrol dan node pool di cluster GKE Standard Anda harus memiliki versi
1.33.3-gke.1226000
atau yang lebih baru. - Aktifkan Workload Identity di cluster Anda.
- Berikan izin IAM yang diperlukan ke Akun Layanan Kubernetes yang digunakan Pod yang mendukung
hostNetwork
untuk mengakses bucket Cloud Storage Anda. Untuk mengetahui informasi selengkapnya, lihat Mengautentikasi ke Cloud Storage FUSE.
Anda menentukan atribut volume hostNetworkPodKSA: "true"
dalam definisi Pod atau PersistentVolume untuk mengizinkan Pod HostNetwork
Anda mengakses volume Cloud Storage. Konfigurasi yang tepat berbeda-beda berdasarkan cara Anda mengelola container sidecar Cloud Storage FUSE.
Sidecar terkelola
Bagian ini berlaku jika GKE secara otomatis menyuntikkan dan mengelola container sidecar Cloud Storage FUSE ke dalam Pod Anda. Opsi ini adalah penyiapan default dan yang direkomendasikan untuk driver CSI Cloud Storage FUSE.
Volume sementara
Manifes Pod berikut mengonfigurasi volume efemeral untuk Pod HostNetwork
agar dapat mengakses bucket Cloud Storage.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
Volume persisten
Manifes PV berikut mengonfigurasi PV untuk Pod HostNetwork
agar dapat mengakses bucket Cloud Storage.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
Sidecar pribadi
Bagian ini berlaku jika Anda mengelola container sidecar Cloud Storage FUSE secara manual dalam Pod atau menggunakan image sidecar kustom.
Pastikan image sidecar Anda didasarkan pada driver CSI Cloud Storage FUSE versi v1.17.2 atau yang lebih baru.
Volume sementara
Manifes Pod berikut mengonfigurasi volume efemeral untuk Pod HostNetwork
agar dapat mengakses bucket Cloud Storage.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
namespace: ns1
annotations:
gke-gcsfuse/volumes: "true"
spec:
serviceAccountName: test-ksa-ns1
hostNetwork: true
containers:
- image: busybox
name: busybox
command:
- sleep
- "3600"
volumeMounts:
- name: gcs-fuse-csi-ephemeral
mountPath: /data
volumes:
- name: gcs-fuse-csi-ephemeral
csi:
driver: gcsfuse.csi.storage.gke.io
volumeAttributes:
bucketName: test-bucket
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
Di kolom identityProvider
, ganti kode berikut:
PROJECT_ID
: Google Cloud Project ID Anda.LOCATION
: lokasi cluster Anda.CLUSTER_NAME
: nama cluster GKE Standar Anda.
Volume persisten
Manifes PV berikut mengonfigurasi PV untuk Pod HostNetwork
agar dapat mengakses bucket Cloud Storage.
apiVersion: v1
kind: PersistentVolume
metadata:
name: gcp-cloud-storage-csi-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 5Gi
persistentVolumeReclaimPolicy: Retain
# storageClassName does not need to refer to an existing StorageClass object.
storageClassName: test-storage-class
mountOptions:
- uid=1001
- gid=3003
csi:
driver: gcsfuse.csi.storage.gke.io
volumeHandle: test-wi-host-network-2
volumeAttributes:
hostNetworkPodKSA: "true"
identityProvider: "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME"
Di kolom identityProvider
, ganti kode berikut:
PROJECT_ID
: Google Cloud Project ID Anda.LOCATION
: lokasi cluster Anda.CLUSTER_NAME
: nama cluster GKE Standar Anda.
Langkah berikutnya
- Memecahkan masalah Cloud Storage FUSE
- Mengoptimalkan Cloud Storage FUSE untuk performa
- Pelajari cara memasang bucket Cloud Storage dengan menentukan bucket secara inline dengan spesifikasi Pod.
- Pelajari cara memasang bucket Cloud Storage menggunakan resource PersistentVolume.
- Pelajari lebih lanjut cara mengonfigurasi aplikasi untuk menggunakan Workload Identity Federation for GKE.