Menginstal driver Antarmuka Penyimpanan Container

Halaman ini menjelaskan cara menginstal driver penyimpanan Container Storage Interface (CSI) ke GKE pada cluster VMware.

Ringkasan

CSI adalah API standar terbuka yang memungkinkan Kubernetes mengekspos sistem penyimpanan arbitrer ke workload dalam container. Saat Anda men-deploy driver penyimpanan yang kompatibel dengan CSI ke GKE di cluster VMware, cluster dapat terhubung langsung ke perangkat penyimpanan yang kompatibel tanpa harus melalui penyimpanan vSphere.

Volume Kubernetes dikelola oleh driver penyimpanan khusus vendor, yang secara historis telah dikompilasi menjadi biner Kubernetes. Sebelumnya, Anda tidak dapat menggunakan driver penyimpanan yang tidak disertakan dengan Kubernetes. Menginstal driver CSI akan menambahkan dukungan untuk sistem penyimpanan yang tidak didukung secara native oleh Kubernetes. Selain itu, CSI juga memungkinkan penggunaan fitur penyimpanan modern, seperti snapshot dan pengubahan ukuran.

Untuk menggunakan driver CSI, Anda perlu membuat StorageClass Kubernetes. Anda menetapkan driver CSI sebagai penyedia untuk StorageClass. Kemudian, Anda dapat menetapkan StorageClass sebagai default cluster, atau mengonfigurasi beban kerja untuk menggunakan StorageClass (contoh StatefulSet).

Sebelum memulai

Secara default, GKE di VMware menggunakan datastore vSphere melalui driver vsphereVolume bawaan. Selain itu, driver bawaan untuk NFS dan iSCSI dapat memasang dan memasang volume yang ada ke workload Anda.

Menginstal driver CSI vendor

Vendor penyimpanan mengembangkan driver CSI mereka sendiri, dan bertanggung jawab untuk memberikan petunjuk penginstalan. Dalam kasus sederhana, penginstalan mungkin hanya melibatkan deployment manifes ke cluster Anda. Lihat daftar driver CSI dalam dokumentasi CSI.

Memverifikasi penginstalan driver

Setelah menginstal driver CSI, Anda dapat memverifikasi penginstalan dengan menjalankan salah satu perintah berikut, bergantung pada GKE cluster pada versi VM VMware:

1.2.0-gke.5

kubectl get csinodes \
-o jsonpath='{range .items[*]} {.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'

1.1.0-gke.6

kubectl get nodes \
-o jsonpath='{.items[*].metadata.annotations.csi\.volume\.kubernetes\.io\/nodeid}'

Menggunakan driver CSI

Untuk menggunakan driver CSI:

  1. Buat StorageClass Kubernetes yang mereferensikan driver di kolom provisioner-nya.

  2. Untuk menyediakan penyimpanan, Anda dapat:

Pertimbangan untuk StorageClasses yang didukung oleh driver CSI

Saat Anda membuat StorageClass, pertimbangkan hal berikut:

  • Dokumentasi driver CSI harus menyertakan parameter khusus driver yang Anda berikan ke StorageClass, termasuk nama penyedia.
  • Anda harus memberi nama StorageClass setelah propertinya, bukan setelah nama driver atau alat tertentu di belakangnya. Penamaan StorageClass setelah propertinya memungkinkan Anda membuat StorageClasses dengan nama yang sama di beberapa cluster dan lingkungan, dan memungkinkan aplikasi Anda mendapatkan penyimpanan dengan properti yang sama di seluruh cluster.

Contoh: Mereferensikan StorageClass dalam StatefulSet

Contoh berikut memodelkan cara menentukan driver CSI di StorageClass, lalu mereferensikan StorageClass dalam workload StatefulSet. Contoh ini mengasumsikan driver telah diinstal ke cluster.

Berikut adalah StorageClass sederhana bernama premium-rwo yang menggunakan driver CSI fiktif, csi.example.com, sebagai penyedianya:

fast-sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: premium-rwo
provisioner: csi.example.com # CSI driver
parameters: # You provide vendor-specific parameters to this specification
  type: example-parameter # Be sure to follow the vendor's instructions
  datastore: my-datastore
reclaimPolicy: Retain
allowVolumeExpansion: true

Anda mereferensikan StorageClass dalam spesifikasi volumeClaimTemplates StatefulSet.

Saat Anda mereferensikan StorageClass dalam spesifikasi volumeClaimTemplates StatefulSet, Kubernetes akan menyediakan penyimpanan stabil menggunakan PersistentVolumes (PV). Kubernetes memanggil penyedia yang ditentukan dalam StorageClass untuk membuat volume penyimpanan baru. Dalam hal ini, Kubernetes memanggil penyedia csi.example.com fiktif, yang memanggil API penyedia untuk membuat volume. Setelah volume disediakan, Kubernetes secara otomatis membuat PV untuk mewakili penyimpanan.

Berikut adalah StatefulSet sederhana yang mereferensikan StorageClass:

statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: registry.k8s.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: fast # This field references the existing StorageClass

Langkah selanjutnya