Mengakses instance Managed Lustre di GKE dengan driver CSI Managed Lustre

Panduan ini menjelaskan cara membuat volume Kubernetes baru yang didukung oleh driver CSI Managed Lustre di GKE dengan penyediaan dinamis. Driver CSI Managed Lustre memungkinkan Anda membuat penyimpanan yang didukung oleh instance Managed Lustre sesuai permintaan, dan mengaksesnya sebagai volume untuk workload stateful Anda.

Dukungan multi-NIC untuk jaringan berperforma tinggi

Untuk cluster GKE yang menjalankan versi 1.35.2-gke.1842000 atau yang lebih baru, driver CSI Managed Lustre diaktifkan secara default untuk menggunakan semua Network Interface Card (NIC) yang tersedia guna meningkatkan throughput. Dukungan ini menggabungkan bandwidth dengan menyebarkan traffic penyimpanan TCP di seluruh antarmuka jaringan Anda.

Untuk menggunakan dukungan multi-NIC, node Anda harus memenuhi persyaratan berikut:

  • NIC Standar untuk TCP: node Anda harus menggunakan NIC standar, seperti Google Virtual NIC (gVNIC) atau VirtIO-Net, untuk menangani traffic penyimpanan TCP.
  • VPC yang sama: semua NIC standar harus berada di jaringan VPC yang sama.
  • Pertimbangan RDMA: node Anda juga dapat memiliki NIC RDMA yang terpasang; namun, driver CSI Managed Lustre hanya menggunakan NIC standar untuk traffic penyimpanan TCP.

Jika Anda ingin menonaktifkan dukungan multi-NIC, lihat Menonaktifkan multi-NIC untuk Lustre.

Port komunikasi Lustre

Driver CSI GKE Managed Lustre menggunakan port yang berbeda untuk berkomunikasi dengan instance Managed Lustre, bergantung pada versi cluster GKE dan konfigurasi Managed Lustre yang ada.

  • Port default (Direkomendasikan): untuk cluster GKE baru yang menjalankan versi 1.33.2-gke.4780000 atau yang lebih baru, driver menggunakan port 988 untuk komunikasi Lustre secara default.

  • Port Lama (Tidak Digunakan Lagi): gunakan port 6988 dengan menambahkan flag --enable-legacy-lustre-port ke perintah gcloud Anda dalam skenario berikut:

    • Versi GKE yang lebih lama: jika cluster GKE Anda menjalankan versi yang lebih lama dari 1.33.2-gke.4780000, flag --enable-legacy-lustre-port akan mengatasi konflik port dengan gke-metadata-server di node GKE.
    • Instance Lustre yang ada: jika Anda terhubung ke instance Managed Lustre yang ada yang dibuat dengan flag gke-support-enabled, Anda harus tetap menyertakan --enable-legacy-lustre-port dalam perintah gcloud, terlepas dari versi cluster Anda. Tanpa flag ini, cluster GKE Anda akan gagal memasang instance Lustre yang ada.

Anda dapat mengonfigurasi cluster baru dan yang ada untuk menggunakan port default 988, atau port lama 6988.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Cloud Managed Lustre API dan Google Kubernetes Engine API.
  • Mengaktifkan API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Menyiapkan variabel lingkungan

Siapkan variabel lingkungan berikut:

export CLUSTER_NAME=CLUSTER_NAME
export PROJECT_ID=PROJECT_ID
export NETWORK_NAME=LUSTRE_NETWORK
export IP_RANGE_NAME=LUSTRE_IP_RANGE
export FIREWALL_RULE_NAME=LUSTRE_FIREWALL_RULE
export LOCATION=ZONE
export CLUSTER_VERSION=CLUSTER_VERSION

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster.
  • PROJECT_ID: Google Cloud Project ID Anda.
  • LUSTRE_NETWORK: jaringan Virtual Private Cloud (VPC) bersama tempat cluster GKE dan instance Managed Lustre berada.
  • LUSTRE_IP_RANGE: nama untuk rentang alamat IP yang dibuat untuk Peering Jaringan VPC dengan Managed Lustre.
  • LUSTRE_FIREWALL_RULE: nama untuk aturan firewall yang mengizinkan traffic TCP dari rentang alamat IP.
  • ZONE: zona geografis cluster GKE Anda; misalnya, us-central1-a.
  • CLUSTER_VERSION: versi cluster GKE.

Menyiapkan jaringan VPC

Anda harus menentukan jaringan VPC yang sama saat membuat instance Managed Lustre dan cluster GKE, atau terhubung melalui Network Connectivity Center jika menggunakan jaringan VPC yang di-peering.

  1. Untuk mengaktifkan jaringan layanan, jalankan perintah berikut:

    gcloud services enable servicenetworking.googleapis.com \
        --project=${PROJECT_ID}
    
  2. Buat jaringan VPC. Menetapkan flag --mtu ke 8896 akan menghasilkan peningkatan performa sebesar 10%.

    gcloud compute networks create ${NETWORK_NAME} \
        --subnet-mode=auto --project=${PROJECT_ID} \
        --mtu=8896
    
  3. Buat rentang alamat IP.

    gcloud compute addresses create ${IP_RANGE_NAME} \
        --global \
        --purpose=VPC_PEERING \
        --prefix-length=20 \
        --description="Managed Lustre VPC Peering" \
        --network=${NETWORK_NAME} \
        --project=${PROJECT_ID}
    
  4. Dapatkan rentang CIDR yang terkait dengan rentang yang Anda buat pada langkah sebelumnya.

    CIDR_RANGE=$(
      gcloud compute addresses describe ${IP_RANGE_NAME} \
          --global  \
          --format="value[separator=/](address, prefixLength)" \
          --project=${PROJECT_ID}
    )
    
  5. Buat aturan firewall untuk mengizinkan traffic TCP dari rentang alamat IP yang Anda buat.

    gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \
        --allow=tcp:988,tcp:6988 \
        --network=${NETWORK_NAME} \
        --source-ranges=${CIDR_RANGE} \
        --project=${PROJECT_ID}
    
  6. Untuk menyiapkan peering jaringan untuk project Anda, pastikan Anda memiliki izin IAM yang diperlukan, khususnya peran compute.networkAdmin atau servicenetworking.networksAdmin.

    1. Buka Google Cloud konsol > IAM & Admin, lalu telusuri principal pemilik project Anda.
    2. Klik ikon pensil, lalu klik + ADD ANOTHER ROLE.
    3. Pilih Compute Network Admin atau Service Networking Admin.
    4. Klik Save.
  7. Hubungkan peering.

    gcloud services vpc-peerings connect \
        --network=${NETWORK_NAME} \
        --project=${PROJECT_ID} \
        --ranges=${IP_RANGE_NAME} \
        --service=servicenetworking.googleapis.com
    

Mengonfigurasi driver CSI Managed Lustre

Bagian ini membahas cara mengaktifkan dan menonaktifkan driver CSI Managed Lustre.

Mengaktifkan driver CSI Managed Lustre di cluster GKE baru

Bagian berikut menjelaskan cara mengaktifkan driver CSI Managed Lustre di cluster GKE baru.

Menggunakan port default 988

Untuk mengaktifkan driver CSI Managed Lustre saat membuat cluster GKE baru yang menjalankan versi 1.33.2-gke.4780000 atau yang lebih baru, jalankan perintah berikut:

Autopilot

gcloud container clusters create-auto "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=${CLUSTER_VERSION} \
    --enable-lustre-csi-driver

Standar

gcloud container clusters create "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=${CLUSTER_VERSION} \
    --addons=LustreCsiDriver

Menggunakan port lama 6988

Untuk mengaktifkan driver CSI Managed Lustre saat membuat cluster GKE baru yang menjalankan versi yang lebih lama dari 1.33.2-gke.4780000, jalankan perintah berikut:

Autopilot

gcloud container clusters create-auto "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=${CLUSTER_VERSION} \
    --enable-lustre-csi-driver \
    --enable-legacy-lustre-port

Standar

gcloud container clusters create "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=${CLUSTER_VERSION} \
    --addons=LustreCsiDriver \
    --enable-legacy-lustre-port

Mengaktifkan driver CSI Managed Lustre di cluster GKE yang ada

Bagian berikut menjelaskan cara mengaktifkan driver CSI Managed Lustre di cluster GKE yang ada.

Menggunakan port default 988

Untuk mengaktifkan driver CSI Managed Lustre di cluster GKE yang ada yang menjalankan versi 1.33.2-gke.4780000 atau yang lebih baru, jalankan perintah berikut:

  gcloud container clusters update ${CLUSTER_NAME} \
      --location=${LOCATION} \
      --update-addons=LustreCsiDriver=ENABLED

Menggunakan port lama 6988

Untuk mengaktifkan driver CSI Managed Lustre di cluster GKE yang ada, Anda mungkin perlu menggunakan port lama 6988 dengan menambahkan flag --enable-legacy-lustre-port. Flag ini diperlukan dalam skenario berikut:

  • Jika cluster GKE Anda berjalan pada versi yang lebih lama dari 1.33.2-gke.4780000.
  • Jika Anda ingin menghubungkan cluster ini ke instance Managed Lustre yang ada yang dibuat dengan flag gke-support-enabled.

    gcloud container clusters update ${CLUSTER_NAME} \
        --location=${LOCATION} \
        --enable-legacy-lustre-port
    

Upgrade node diperlukan di cluster yang ada

Mengaktifkan driver CSI Managed Lustre di cluster yang ada dapat memicu pembuatan ulang node untuk memperbarui modul kernel yang diperlukan untuk klien Managed Lustre. Untuk ketersediaan langsung, sebaiknya upgrade node pool Anda secara manual.

Cluster GKE di saluran rilis diupgrade sesuai dengan peluncuran terjadwalnya, yang dapat memerlukan waktu beberapa minggu, bergantung pada periode pemeliharaan Anda. Jika Anda menggunakan versi GKE statis, Anda harus mengupgrade node pool secara manual.

Hingga upgrade node selesai sepenuhnya, Pod driver CSI mungkin mengalami crashloop di node yang menunggu update. Jika Anda melihat error Operation not permitted di log Pod driver CSI, hal ini menunjukkan bahwa upgrade atau pembuatan ulang node diperlukan.

Setelah upgrade node pool, node CPU mungkin terlihat menggunakan image GPU di Google Cloud konsol atau output CLI. Perilaku ini diharapkan. Image GPU digunakan kembali di node CPU untuk menginstal modul kernel Managed Lustre secara aman. Anda tidak akan dikenai biaya untuk penggunaan GPU.

(Opsional) Membuat node pool multi-NIC

Untuk menggunakan jaringan berperforma tinggi, Anda harus membuat node pool dengan jenis instance yang mendukung beberapa antarmuka jaringan. Dukungan multi-NIC diaktifkan secara default di cluster GKE yang menjalankan versi 1.35.2-gke.1842000 atau yang lebih baru. Pastikan antarmuka jaringan sekunder Anda berada dalam jaringan VPC yang sama dengan antarmuka utama Anda.

Jalankan perintah berikut:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --machine-type=MACHINE_TYPE \
    --enable-gvnic \
    --additional-node-network network=NETWORK_NAME,subnetwork=SECONDARY_SUBNET

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool Anda.
  • CLUSTER_NAME: nama cluster.
  • LOCATION: region atau zona cluster Anda.
  • MACHINE_TYPE: jenis mesin untuk node pool, seperti a3-megagpu-8g yang sering digunakan dengan multi-NIC untuk performa tinggi. Multi-NIC didukung di semua jenis mesin.
  • NETWORK_NAME: nama jaringan VPC.
  • SECONDARY_SUBNET: nama subnet sekunder.

Menonaktifkan multi-NIC di Lustre

Meskipun dukungan multi-NIC direkomendasikan untuk workload berperforma tinggi, Anda mungkin ingin menonaktifkannya dalam skenario tertentu. Misalnya, Anda mungkin tidak ingin menyebarkan traffic Lustre di semua antarmuka hardware yang tersedia, atau Anda mungkin perlu mengisolasi masalah konektivitas ke satu jalur jaringan untuk pemecahan masalah.

Catatan: Jika Anda menonaktifkan dukungan multi-NIC di node yang berjalan, Anda mungkin perlu membuat ulang atau mengupgrade node pool secara manual agar perubahan ini diterapkan.

Untuk cluster

Untuk menonaktifkan jaringan berperforma tinggi untuk seluruh cluster, gunakan flag --disable-multi-nic-lustre saat membuat atau memperbarui cluster. Contoh:

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --disable-multi-nic-lustre

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster.
  • LOCATION: region atau zona cluster Anda.

Untuk node pool

Untuk menonaktifkan jaringan berperforma tinggi untuk node pool tertentu, perbarui node pool untuk menetapkan label lustre.csi.storage.gke.io/multi-nic ke false:

gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--zone=LOCATION \
--node-labels=lustre.csi.storage.gke.io/multi-nic=false

Ganti kode berikut:

  • NODE_POOL_NAME: nama node pool Anda.
  • CLUSTER_NAME: nama cluster.
  • LOCATION: zona cluster Anda.

Menonaktifkan driver CSI Managed Lustre

Anda dapat menonaktifkan driver CSI Managed Lustre di GKEcluster yang ada menggunakan Google Cloud CLI.

gcloud container clusters update ${CLUSTER_NAME} \
    --location=${LOCATION} \
    --update-addons=LustreCsiDriver=DISABLED

Setelah driver CSI dinonaktifkan, GKE akan otomatis membuat ulang node Anda dan menghapus modul kernel Managed Lustre.

Membuat volume baru menggunakan driver CSI Managed Lustre

Bagian berikut menjelaskan proses umum untuk membuat volume Kubernetes yang didukung oleh instance Managed Lustre di GKE:

  1. Buat StorageClass.
  2. Gunakan PersistentVolumeClaim untuk mengakses volume.
  3. Buat workload yang menggunakan volume.

Membuat StorageClass

Saat driver CSI Managed Lustre diaktifkan, GKE akan otomatis membuat StorageClass untuk menyediakan instance Managed Lustre. StorageClass bergantung pada tingkat performa Managed Lustre performance tier, dan merupakan salah satu dari berikut ini:

  • lustre-rwx-125mbps-per-tib
  • lustre-rwx-250mbps-per-tib
  • lustre-rwx-500mbps-per-tib
  • lustre-rwx-1000mbps-per-tib

GKE menyediakan StorageClass default untuk setiap tingkat performa Managed Lustre yang didukung. Hal ini menyederhanakan penyediaan dinamis instance Managed Lustre, karena Anda dapat menggunakan StorageClass bawaan tanpa harus menentukan StorageClass Anda sendiri.

Untuk cluster zona, driver CSI menyediakan instance Managed Lustre di zona yang sama dengan cluster. Untuk cluster regional, driver ini menyediakan instance di salah satu zona dalam region.

Contoh berikut menunjukkan cara membuat StorageClass kustom dengan persyaratan topologi tertentu:

  1. Simpan manifes berikut dalam file bernama lustre-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: lustre-class
    provisioner: lustre.csi.storage.gke.io
    volumeBindingMode: Immediate
    reclaimPolicy: Delete
    parameters:
      perUnitStorageThroughput: "1000"
      network: LUSTRE_NETWORK
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.gke.io/zone
        values:
        - us-central1-a
    

    Untuk mengetahui daftar lengkap kolom yang didukung di StorageClass, lihat dokumentasi referensi driver CSI Managed Lustre.

  2. Buat StorageClass dengan menjalankan perintah ini:

    kubectl apply -f lustre-class.yaml
    

Menggunakan PersistentVolumeClaim untuk mengakses Volume

Bagian ini menunjukkan cara membuat resource PersistentVolumeClaim yang mereferensikan StorageClass driver CSI Managed Lustre.

  1. Simpan manifes berikut dalam file bernama lustre-pvc.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: lustre-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 9000Gi
      storageClassName: lustre-class
    

    Untuk mengetahui daftar lengkap kolom yang didukung di PersistentVolumeClaim, lihat dokumentasi referensi driver CSI Managed Lustre.

  2. Buat PersistentVolumeClaim dengan menjalankan perintah ini:

    kubectl apply -f lustre-pvc.yaml
    

Membuat workload untuk menggunakan volume

Bagian ini menunjukkan contoh cara membuat Pod yang menggunakan resource PersistentVolumeClaim yang Anda buat sebelumnya.

Beberapa Pod dapat menggunakan resource PersistentVolumeClaim yang sama.

  1. Simpan manifes berikut dalam file bernama my-pod.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
          - name: lustre-volume
            mountPath: /data
      volumes:
      - name: lustre-volume
        persistentVolumeClaim:
          claimName: lustre-pvc
    
  2. Terapkan manifes ke cluster.

    kubectl apply -f my-pod.yaml
    
  3. Verifikasi bahwa Pod sedang berjalan. Pod berjalan setelah PersistentVolumeClaim disediakan. Penyelesaian operasi ini mungkin memerlukan waktu beberapa menit.

    kubectl get pods
    

    Outputnya mirip dengan hal berikut ini:

    NAME           READY   STATUS    RESTARTS   AGE
    my-pod         1/1     Running   0          11s
    

Menggunakan fsGroup dengan volume Managed Lustre

Anda dapat mengubah kepemilikan grup direktori tingkat root dari sistem file yang terpasang agar sesuai dengan fsGroup yang diminta pengguna yang ditentukan dalam SecurityContext Pod. fsGroup tidak akan mengubah kepemilikan seluruh sistem file Managed Lustre yang terpasang secara rekursif; hanya direktori root titik pemasangan yang terpengaruh.

Pemecahan masalah

Untuk panduan pemecahan masalah, lihat halaman Pemecahan masalah dalam dokumentasi Managed Lustre.

Pembersihan

Agar akun Anda tidak dikenai biaya, hapus resource penyimpanan yang Anda buat dalam panduan ini. Google Cloud

  1. Hapus Pod dan PersistentVolumeClaim.

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. Periksa status PersistentVolume.

    kubectl get pv
    

    Outputnya mirip dengan hal berikut ini:

    No resources found
    

    Mungkin perlu waktu beberapa menit hingga instance Managed Lustre yang mendasarinya dihapus sepenuhnya.

Langkah berikutnya