Menggunakan resource EFS

Elastic File System (EFS) adalah mekanisme AWS yang mendasarinya untuk menyediakan penyimpanan (ruang disk) ke cluster Anda. PersistentVolume adalah resource cluster yang membuat penyimpanan EFS tersedia untuk workload Anda dan memastikan bahwa penyimpanan tersebut tetap ada meskipun tidak ada workload yang terhubung ke penyimpanan tersebut. Topik ini menjelaskan cara workload dapat mengakses PersistentVolume dengan PersistentVolumeClaim.

Halaman ini ditujukan bagi Operator dan spesialis Penyimpanan yang ingin mengonfigurasi dan mengelola penyimpanan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten, lihat Peran dan tugas pengguna GKE umum. Google Cloud

GKE on AWS mendukung penyediaan statis PersistentVolume 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, bergantung pada apakah Anda ingin beban kerja 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 yang mendasarinya 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 PersistentVolumeClaim yang akan diikat - 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 CSI EFS 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 pengikatan PersistentVolumeClaim. Kosongkan kolom ini untuk mengikat ke kelas penyimpanan default
  1. Terapkan YAML ke cluster Anda.

      kubectl apply -f efs-claim.yaml
    

    Output mengonfirmasi pembuatan PersistentVolumeClaim.

    persistentvolumeclaim/CLAIM_NAME created
    

Buat StatefulSet

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

Untuk membuat StatefulSet yang me-mount resource EFS yang dirujuk di PersistentVolumeClaim Anda, lakukan langkah-langkah berikut.

  1. Salin manifes YAML berikut ke dalam file bernama efs-statefulset.yaml. Contoh manifes ini meluncurkan container Ubuntu Linux yang memasang resource EFS Anda di /efs-data. Kontainer 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 mengonfirmasi pembuatan StatefulSet.

    statefulset.apps/efs-shell created
    

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

  3. Konfirmasi bahwa Pod StatefulSet berada dalam 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 berstatus Berjalan, gunakan kubectl exec untuk terhubung ke Pod yang menghosting StatefulSet.

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

    Perintah kubectl meluncurkan shell di Pod.

  5. Untuk mengonfirmasi bahwa resource EFS Anda telah di-mount, periksa konten 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 Anda akan kembali ke komputer lokal Anda.

Pembersihan

Untuk menghapus StatefulSet, gunakan kubectl delete.

  kubectl delete -f efs-statefulset.yaml

Langkah berikutnya