Menggunakan resource EFS

Elastic File System (EFS) adalah mekanisme AWS dasar untuk menyediakan penyimpanan (ruang disk) ke cluster Anda. PersistentVolume adalah resource cluster yang menyediakan penyimpanan EFS untuk workload Anda dan memastikannya tetap ada meskipun tidak ada workload yang terhubung ke dalamnya. Topik ini menjelaskan cara beban kerja dapat mengakses PersistentVolume dengan PersistentVolumeClaim.

GKE di AWS mendukung penyediaan statis PersistentVolumes untuk semua versi Kubernetes yang didukung. Untuk cluster di Kubernetes versi 1.24 atau yang lebih baru, GKE di AWS juga mendukung penyediaan dinamis. Untuk menggunakan penyediaan dinamis, administrator cluster Anda harus mengonfigurasinya. Untuk mempelajari caranya, lihat mengonfigurasi PersistentVolume.

Membuat PersistentVolumeClaim

Pilih tab yang sesuai di bawah ini, bergantung pada apakah Anda ingin workload terhubung ke volume persisten yang disediakan secara statis atau dinamis.

Statis

Petunjuk ini mengasumsikan bahwa administrator cluster Anda telah menyediakan setidaknya satu PersistentVolume. Untuk mengakses PersistentVolume ini dan menggunakan EFS dasar dengan workload Anda, buat PersistentVolumeClaim.

Untuk membuat PersistentVolumeClaim untuk PersistentVolume yang disediakan secara statis, salin manifes YAML berikut ke dalam file bernama efs-claim.yaml.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: CLAIM_NAME
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: "" # Leave as empty string for static provisioning
  resources:
    requests:
      storage: 5Gi

Ganti:

  • CLAIM_NAME: nama yang Anda pilih untuk diikat oleh PersistentVolumeClaim - misalnya, efs-claim1. Biarkan kosong untuk mengikat ke kelas penyimpanan default
  1. Terapkan YAML ke cluster Anda.

      kubectl apply -f efs-claim.yaml
    

    Output ini mengonfirmasi pembuatan PersistentVolumeClaim.

    persistentvolumeclaim/CLAIM_NAME created
    

Dinamis

Petunjuk ini mengasumsikan bahwa administrator cluster Anda telah menyediakan setidaknya satu StorageClass untuk penyediaan dinamis. Untuk membuat PersistentVolume yang disediakan secara dinamis dengan StorageClass ini dan menggunakan titik akses EFS yang mendasarinya dengan workload Anda, buat PersistentVolumeClaim.

Untuk membuat PersistentVolumeClaim, ikuti langkah-langkah berikut. Driver EFS CSI menggunakan PersistentVolumeClaim ini dengan StorageClass yang ditunjukkan untuk menyediakan PersistentVolume secara dinamis.

  1. Salin manifes YAML berikut ke dalam file bernama efs-claim.yaml.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: CLAIM_NAME
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: "EFS_STORAGE_CLASS_NAME"
  resources:
    requests:
      storage: 5Gi

Ganti:

  • CLAIM_NAME: nama yang Anda pilih untuk PersistentVolumeClaim - misalnya, efs-claim1
  • EFS_STORAGE_CLASS_NAME: nama StorageClass yang Anda inginkan untuk diikat oleh PersistentVolumeClaim. Biarkan kolom ini kosong untuk mengikat ke kelas penyimpanan {i>default<i}
  1. Terapkan YAML ke cluster Anda.

      kubectl apply -f efs-claim.yaml
    

    Output-nya mengonfirmasi pembuatan PersistentVolumeClaim.

    persistentvolumeclaim/CLAIM_NAME created
    

Membuat StatefulSet

Setelah membuat PersistentVolumeClaim, Anda dapat menggunakannya dalam beban kerja. Bagian ini membuat contoh StatefulSet yang menggunakan PersistentVolumeClaim. Anda juga dapat menggunakan PersistentVolumeClaim dengan jenis beban kerja lainnya seperti Pod dan Deployment dengan mereferensikan klaim di spec.volumes.

Untuk membuat StatefulSet yang memasang resource EFS yang dirujuk dalam PersistentVolumeClaim, lakukan langkah-langkah berikut.

  1. Salin manifes YAML berikut ke dalam file bernama efs-statefulset.yaml. Manifes contoh ini meluncurkan container Linux Ubuntu yang memasang resource EFS di /efs-data. Container menulis setiap lima detik ke file di resource EFS Anda yang bernama out.txt.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: efs-shell
    spec:
      selector:
        matchLabels:
          app: test-efs
      serviceName: efs-app
      replicas: 1
      template:
        metadata:
          labels:
            app: test-efs
        spec:
          terminationGracePeriodSeconds: 10
          containers:
          - name: linux
            image: ubuntu:bionic
            command: ["/bin/sh"]
            args: ["-c", "while true; do echo $(date -u) >> /efs-data/out.txt; sleep 5; done"]
            volumeMounts:
            - name: efs-volume
              mountPath: /efs-data
          volumes:
          - name: efs-volume
            persistentVolumeClaim:
              claimName: CLAIM_NAME
    

    Ganti CLAIM_NAME dengan nama PersistentVolumeClaim yang Anda tentukan sebelumnya - misalnya, efs-claim1.

  2. Terapkan YAML ke cluster Anda.

     kubectl apply -f efs-statefulset.yaml
    

    Output-nya mengonfirmasi pembuatan StatefulSet.

    statefulset.apps/efs-shell created
    

    StatefulSet mungkin memerlukan waktu beberapa menit untuk mendownload dan meluncurkan image container.

  3. Pastikan Pod StatefulSet memiliki status Running dengan kubectl get pods.

      kubectl get pods -l app=test-efs
    

    Output mencakup nama Pod dan statusnya. Dalam respons berikut, nama Pod adalah efs-shell-0.

    NAME          READY   STATUS    RESTARTS   AGE
    efs-shell-0   1/1     Running   0          1m
    
  4. Setelah Pod dalam status Running, gunakan kubectl exec untuk terhubung ke Pod yang menghosting StatefulSet.

      kubectl exec -it efs-shell-0 -- bash
    

    Perintah kubectl meluncurkan shell pada Pod.

  5. Untuk memastikan bahwa resource EFS sudah terpasang, periksa isi file out.txt dengan perintah tail.

    tail /efs-data/out.txt
    

    Output berisi waktu terbaru dalam UTC.

  6. Putuskan koneksi dari Pod dengan perintah exit.

      exit
    

    Shell akan kembali ke komputer lokal Anda.

Pembersihan

Untuk menghapus StatefulSet, gunakan kubectl delete.

  kubectl delete -f efs-statefulset.yaml

Langkah selanjutnya