Menyiapkan driver CSI Cloud Storage FUSE untuk GKE

Dokumen ini menunjukkan cara menyiapkan driver CSI Cloud Storage FUSE untuk mengakses bucket Cloud Storage dari Google Kubernetes Engine (GKE).

Dengan driver CSI Cloud Storage FUSE, workload GKE Anda dapat mengakses bucket Cloud Storage sebagai sistem file lokal. Driver CSI mengintegrasikan Cloud Storage dengan GKE, dan menyederhanakan cara aplikasi yang di-container-kan berinteraksi dengan set data besar yang disimpan dalam bucket. Driver CSI menyediakan antarmuka standar untuk penyimpanan GKE. Dalam dokumen ini, Anda menyiapkan lingkungan dan menghubungkan cluster GKE ke bucket Cloud Storage menggunakan driver CSI Cloud Storage FUSE.

Dokumen ini ditujukan untuk developer, administrator, dan spesialis penyimpanan yang mengintegrasikan workload GKE dengan penyimpanan objek. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna GKE umum.

Membuat bucket Cloud Storage

Jika belum melakukannya, buat bucket Cloud Storage. Anda akan memasang bucket ini sebagai volume di cluster GKE. Untuk meningkatkan performa, tetapkan Location type 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 Standar. Sebaiknya gunakan cluster Autopilot untuk pengalaman Kubernetes yang dikelola sepenuhnya. Untuk memilih mode yang paling sesuai dengan workload Anda, lihat Memilih mode operasi GKE.

Autopilot

Driver CSI Cloud Storage FUSE diaktifkan secara default untuk cluster Autopilot. Anda dapat langsung ke Mengonfigurasi akses ke bucket Cloud Storage.

Standar

Jika cluster Standar Anda mengaktifkan driver CSI Cloud Storage FUSE, lanjutkan ke Mengonfigurasi akses ke bucket Cloud Storage.

Driver CSI Cloud Storage FUSE tidak diaktifkan secara default di cluster Standar. Untuk membuat cluster Standar 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 Standar 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 for GKE sehingga Anda dapat menetapkan izin terperinci tentang cara Pod GKE mengakses data yang disimpan di Cloud Storage.

Agar bucket Cloud Storage Anda dapat diakses oleh cluster GKE, lakukan autentikasi menggunakan Workload Identity Federation for GKE dengan bucket Cloud Storage yang ingin Anda pasang dalam spesifikasi Pod:

  1. Jika Anda belum mengaktifkan Workload Identity Federation for GKE, ikuti langkah-langkah berikut untuk mengaktifkannya. Jika ingin menggunakan node pool yang ada, aktifkan Workload Identity Federation for GKE secara manual di node pool Anda setelah mengaktifkan Workload Identity Federation for GKE di cluster Anda.
  2. Dapatkan kredensial untuk cluster Anda:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=LOCATION
    

    Ganti kode berikut:

  3. Buat namespace yang akan digunakan untuk Kubernetes ServiceAccount. Anda juga dapat menggunakan namespace default atau namespace apa pun yang sudah ada.

    kubectl create namespace NAMESPACE
    

    Ganti NAMESPACE dengan nama namespace Kubernetes untuk Kubernetes ServiceAccount.

  4. Buat Kubernetes ServiceAccount yang akan digunakan aplikasi Anda. Anda juga dapat menggunakan Kubernetes ServiceAccount yang sudah ada di namespace mana pun, termasuk Kubernetes ServiceAccount default.

    kubectl create serviceaccount KSA_NAME \
        --namespace NAMESPACE
    

    Ganti KSA_NAME dengan nama Kubernetes ServiceAccount Anda.

  5. Berikan salah satu peran IAM untuk Cloud Storage ke Kubernetes ServiceAccount. Ikuti langkah-langkah berikut, bergantung pada apakah Anda memberikan akses Kubernetes ServiceAccount hanya ke bucket Cloud Storage tertentu, 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 Kubernetes ServiceAccount.
    • KSA_NAME: nama Kubernetes ServiceAccount baru Anda.
    • ROLE_NAME: peran IAM untuk ditetapkan ke Kubernetes ServiceAccount Anda.
      • Untuk workload hanya baca, gunakan peran Storage Object Viewer (roles/storage.objectViewer).
      • Untuk workload baca-tulis, gunakan peran Storage Object User (roles/storage.objectUser).

    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 Kubernetes ServiceAccount.
    • KSA_NAME: nama Kubernetes ServiceAccount baru Anda.
    • ROLE_NAME: peran IAM untuk ditetapkan ke Kubernetes ServiceAccount Anda.
      • Untuk workload hanya baca, gunakan peran Storage Object Viewer (roles/storage.objectViewer).
      • Untuk workload baca-tulis, gunakan peran Storage Object User (roles/storage.objectUser).

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 Workload Identity Federation for GKE. Namun, untuk versi GKE yang lebih baru, Anda dapat mengonfigurasi autentikasi 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 Standar.

Pastikan cluster GKE Anda memenuhi persyaratan berikut:

  • Bidang kontrol dan node pool di cluster GKE Standar 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 mengaktifkan hostNetwork untuk mengakses bucket Cloud Storage Anda. Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi ke Cloud Storage FUSE.

Anda menentukan atribut volume hostNetworkPodKSA: "true" dalam definisi Pod atau PersistentVolume untuk mengizinkan Pod HostNetwork 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 otomatis menyuntikkan dan mengelola container sidecar Cloud Storage FUSE ke dalam Pod Anda. Opsi ini adalah penyiapan default dan direkomendasikan untuk driver CSI Cloud Storage FUSE.

Volume sementara

Manifes Pod berikut mengonfigurasi volume sementara 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 sementara 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: project ID Anda Google Cloud .
  • 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: project ID Anda Google Cloud .
  • LOCATION: lokasi cluster Anda.
  • CLUSTER_NAME: nama cluster GKE Standar Anda.

Langkah berikutnya