全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan volume disk yang disediakan secara dinamis untuk penyimpanan persisten

更新时间:Dec 10, 2025

Penyediaan volume secara dinamis secara otomatis membuat dan memasang disk independen untuk setiap replika aplikasi. Metode ini ideal untuk database, middleware, dan aplikasi lain yang memerlukan I/O tinggi serta latensi rendah, sekaligus menyederhanakan manajemen siklus hidup penyimpanan.

Cara kerja

Proses berikut menjelaskan cara menggunakan volume disk yang disediakan secara dinamis dalam StatefulSet:

  1. Definisikan templat
    Anda dapat membuat StorageClass baru atau menggunakan StorageClass default sebagai templat untuk pembuatan disk dinamis. Templat ini menentukan parameter utama, seperti tipe disk, tingkat performa, dan kebijakan pengembalian (reclaim policy).

  2. Deklarasikan kebutuhan penyimpanan dalam aplikasi

    Definisikan volumeClaimTemplates dalam StatefulSet dan referensikan StorageClass tersebut. Hal ini mendeklarasikan spesifikasi untuk klaim volume persisten (PVC) yang akan digunakan oleh pod, seperti kapasitas penyimpanan dan mode akses.

  3. Otomatisasi pembuatan dan pemasangan volume
    Saat StatefulSet membuat pod, sistem secara otomatis menghasilkan PVC unik untuk pod tersebut berdasarkan templat. Komponen Container Storage Interface (CSI) membuat volume persisten (PV) berdasarkan aturan StorageClass dan mengikat PV tersebut ke PVC. Terakhir, disk dipasang ke pod.

Cakupan

  • Batasan zona: Kecuali SSD Perusahaan (ESSD) dengan redundansi regional, tipe disk lain tidak dapat dipasang lintas zona. Disk tersebut hanya dapat dipasang ke pod dalam zona yang sama.

  • Batasan keluarga instans: Beberapa tipe disk hanya dapat disambungkan ke keluarga instans tertentu.

  • Batasan komponen CSI: Komponen csi-plugin dan csi-provisioner harus diinstal.

    Komponen CSI diinstal secara default. Pastikan Anda tidak menguninstall-nya secara manual. Anda dapat melihat status instalasi di halaman Add-ons. Kami menyarankan Anda untuk upgrade komponen CSI ke versi terbaru.
  • Batasan node virtual: Untuk menggunakan disk pada node virtual, Anda harus memenuhi persyaratan versi kluster dan kube-scheduler tertentu.

    Klik untuk melihat persyaratan versi

    Versi kluster

    Versi kube-scheduler

    1.28 atau lebih baru

    6.9.3 atau lebih baru

    1.26

    6.8.7

    1.24

    6.4.7

    1.22

    6.4.5

Langkah 1: Pilih StorageClass

ACK menyediakan beberapa StorageClass default. StorageClass tidak dapat diubah setelah dibuat. Jika konfigurasi default tidak memenuhi kebutuhan Anda, Anda dapat membuat StorageClass baru. Untuk informasi selengkapnya, lihat Buat StorageClass secara manual.

Gunakan StorageClass default

Pilih salah satu StorageClass default berikut dan referensikan namanya di bidang storageClassName aplikasi Anda.

Nama StorageClass

Tipe disk yang dibuat secara dinamis

alicloud-disk-topology-alltype (Direkomendasikan)

Secara default, pod dijadwalkan sebelum disk dibuat untuk mencegah kegagalan pemasangan akibat ketidaksesuaian zona (volumeBindingMode: WaitForFirstConsumer). Sistem mencoba membuat disk dalam urutan ESSD, SSD standar, dan disk ultra, berdasarkan zona dan tipe instans node tempat pod dijadwalkan, serta ketersediaan inventaris disk. Secara default, sistem memprioritaskan pembuatan ESSD PL1 dengan kapasitas minimum 20 GiB.

alicloud-disk-essd

SSD Perusahaan (ESSD). Tingkat performa default adalah PL1, dan kapasitas disk minimum adalah 20 GiB.

Penting

ESSD di CloudBox hanya mendukung tingkat performa PL0. Anda harus membuat StorageClass secara manual dan menentukan performanceLevel sebagai PL0.

alicloud-disk-ssd

SSD standar. Kapasitas disk minimum adalah 20 GiB.

alicloud-disk-efficiency

Disk ultra. Kapasitas disk minimum adalah 20 GiB.

Jalankan perintah kubectl describe sc <storageclass-name> untuk melihat konfigurasi detail StorageClass.

Buat StorageClass secara manual

kubectl

  1. Buat file bernama disk-sc.yaml.

    Contoh berikut menunjukkan StorageClass yang menggunakan volumeBindingMode: WaitForFirstConsumer untuk menunda pengikatan PV.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      # Nama StorageClass
      name: alicloud-disk-wait-for-first-consumer
    # Tipe driver. Nilai ini tetap saat menggunakan plugin CSI disk Alibaba Cloud.
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      # Tipe disk. Sistem memilih tipe berdasarkan prioritas.
      type: cloud_auto,cloud_essd,cloud_ssd  
      # Tipe sistem file
      fstype: ext4
      diskTags: "a:b,b:c"
      encrypted: "false"
      # Tingkat performa ESSD
      performanceLevel: PL1 
      provisionedIops: "40000"
      burstingEnabled: "false"
    # Mode pengikatan. Kami merekomendasikan penggunaan WaitForFirstConsumer dalam skenario multi-zona.
    volumeBindingMode: WaitForFirstConsumer
    # Kebijakan pengembalian
    reclaimPolicy: Retain
    # Menentukan apakah ekspansi volume diizinkan
    allowVolumeExpansion: true
    # Batasan topologi: Membatasi pembuatan disk hanya pada zona tertentu
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.diskplugin.csi.alibabacloud.com/zone
        values:
        # Ganti dengan zona aktual Anda
        - cn-hangzhou-i
        - cn-hangzhou-k

    Tabel berikut menjelaskan parameter utama.

    Parameter

    Deskripsi

    provisioner

    Tipe driver. Ini adalah parameter yang diperlukan. Saat menggunakan plugin CSI disk Alibaba Cloud, nilainya tetap pada diskplugin.csi.alibabacloud.com.

    parameters

    type

    Tipe disk. Ini adalah parameter yang diperlukan. Nilai yang valid:

    Anda dapat menentukan kombinasi nilai apa pun, seperti type: cloud_ssd,cloud_essd,cloud_auto. Sistem mencoba membuat disk sesuai urutan yang ditentukan. Tipe disk akhir bergantung pada faktor seperti instans node dan tipe disk yang didukung di zona tersebut.

    resourceGroupId

    Kelompok sumber daya tempat disk berada. Nilai default adalah "".

    regionId

    Wilayah tempat disk berada. Harus sama dengan wilayah kluster.

    fstype

    Sistem file yang digunakan oleh disk. Nilai yang valid: ext4 (default) dan xfs.

    mkfsOptions

    Parameter untuk memformat disk, seperti mkfsOptions: "-O project,quota".

    diskTags

    Tag disk. Misalnya, diskTags: "a:b,b:c". Anda juga dapat menentukan tag dalam format diskTags/a: b. Komponen CSI harus v1.30.3 atau lebih baru.

    encrypted

    Menentukan apakah disk dienkripsi. Nilai default adalah false, artinya disk tidak dienkripsi.

    performanceLevel

    Tingkat performa ESSD. Nilai yang valid adalah PL0, PL1 (default), PL2, atau PL3.

    Saat digunakan dengan CloudBox, nilai ini harus diatur ke PL0.

    volumeExpandAutoSnapshot [Usang]

    Parameter ini telah usang sejak CSI v1.31.4.

    provisionedIops

    Digunakan untuk mengonfigurasi performa yang disediakan (IOPS) disk saat menggunakan ESSD AutoPL disk.

    burstingEnabled

    Menentukan apakah Burst (lonjakan performa) diaktifkan untuk ESSD AutoPL disk. Nilai default adalah false, yang menonaktifkan lonjakan performa.

    multiAttach

    Menentukan apakah fitur multi-attach disk diaktifkan. Default-nya adalah false (dinonaktifkan).

    volumeBindingMode

    Mode pengikatan disk. Nilai yang valid:

    • Immediate (default): Membuat disk sebelum membuat pod.

    • WaitForFirstConsumer: Menunda pengikatan. Pod dijadwalkan terlebih dahulu, lalu disk dibuat di zona yang sama dengan pod.

      Dalam skenario multi-zona, kami merekomendasikan penggunaan WaitForFirstConsumer untuk mencegah kegagalan pemasangan akibat disk dan node ECS berada di zona berbeda.

      Jika Anda menjadwalkan pod ke node virtual menggunakan metode penjadwalan tertentu atau menambahkan Anotasi tertentu, Anda tidak dapat menggunakan StorageClass bertipe WaitForFirstConsumer. Untuk informasi selengkapnya, lihat Apa yang harus saya lakukan jika PVC tetap dalam status Pending saat pod dengan disk terpasang dijadwalkan ke node virtual?.

    reclaimPolicy

    Kebijakan pengembalian disk.

    • Delete (default): Saat PVC dihapus, PV dan disk juga dihapus.

    • Retain: Saat PVC dihapus, PV dan data disk tidak dihapus. Anda harus menghapusnya secara manual.

      Jika keamanan data menjadi prioritas utama, kami merekomendasikan penggunaan Retain untuk mencegah penghapusan data secara tidak sengaja.

    allowVolumeExpansion

    Jika diatur ke true, Anda dapat memperbesar volume disk tanpa gangguan layanan.

    allowedTopologies

    Membatasi pembuatan disk hanya pada domain topologi tertentu.

    • key: Label domain topologi. Nilai yang didukung:

      • topology.diskplugin.csi.alibabacloud.com/zone: key topologi khusus yang disediakan oleh plugin CSI Alibaba Cloud.

      • alibabacloud.com/ecs-instance-id: Saat menggunakan disk elastis sementara, Anda dapat menentukan node.

    • values: Daftar yang berisi ID zona atau node.

  2. Jalankan perintah berikut untuk membuat StorageClass.

    kubectl create -f disk-sc.yaml
  3. Jalankan perintah berikut untuk melihat StorageClass.

    kubectl get sc

    Output menunjukkan bahwa StorageClass telah dibuat dan berada dalam mode pengikatan WaitForFirstConsumer.

    NAME                                    PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    alicloud-disk-wait-for-first-consumer   diskplugin.csi.alibabacloud.com   Retain          WaitForFirstConsumer   true                   10s

Console

  1. Pada halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Storage > StorageClasses.

  2. Klik Create, pilih Cloud Disk sebagai tipe PV, atur parameter, lalu klik OK.

    Parameter

    Deskripsi

    Parameters

    • Parameter default: type.

      Tipe disk. Ini adalah parameter yang diperlukan. Nilai yang valid:

      Anda dapat menentukan kombinasi nilai apa pun, seperti type: cloud_ssd,cloud_essd,cloud_auto. Sistem mencoba membuat disk sesuai urutan yang ditentukan. Tipe disk akhir bergantung pada faktor seperti instans node dan tipe disk yang didukung di zona tersebut.

    • Klik untuk melihat parameter opsional

      • resourceGroupId: Kelompok sumber daya tempat disk berada. Nilai default adalah "".

      • regionId: Wilayah tempat disk berada. Harus sama dengan wilayah kluster.

      • fstype: Sistem file yang digunakan oleh disk. Nilai yang valid: ext4 (default) dan xfs.

      • mkfsOptions: Parameter untuk memformat disk, seperti mkfsOptions: "-O project,quota".

      • diskTags: Tag disk. Misalnya, diskTags: "a:b,b:c". Anda juga dapat menentukan tag dalam format diskTags/a: b. Komponen CSI harus v1.30.3 atau lebih baru.

      • encrypted: Menentukan apakah disk dienkripsi. Nilai default adalah false, artinya disk tidak dienkripsi.

      • performanceLevel: Tingkat performa ESSD. Nilai yang valid: PL0, PL1 (default), PL2, atau PL3.

        Saat digunakan dengan CloudBox, nilai ini harus diatur ke PL0.
      • provisionedIops: Menentukan performa yang disediakan (IOPS) untuk ESSD AutoPL disk.

      • burstingEnabled: Menentukan apakah Burst (lonjakan performa) diaktifkan untuk ESSD AutoPL disk. Nilai default adalah false.

      • multiAttach: Menentukan apakah fitur multi-attach disk diaktifkan. Nilai default adalah false.

    Reclaim Policy

    Kebijakan pengembalian disk.

    • Delete (default): Saat PVC dihapus, PV dan disk juga dihapus.

    • Retain: Saat PVC dihapus, PV dan data disk tidak dihapus. Anda harus menghapusnya secara manual.

      Jika keamanan data menjadi prioritas utama, kami merekomendasikan penggunaan Retain untuk mencegah penghapusan data secara tidak sengaja.

    Binding Mode

    Mode pengikatan disk. Nilai yang valid:

    • Immediate (default): Membuat disk sebelum membuat pod.

    • WaitForFirstConsumer: Menunda pengikatan. Pod dijadwalkan terlebih dahulu, lalu disk dibuat di zona yang sama dengan pod.

      Dalam skenario multi-zona, kami merekomendasikan penggunaan WaitForFirstConsumer untuk mencegah kegagalan pemasangan akibat disk dan node ECS berada di zona berbeda.

      Jika Anda menjadwalkan pod ke node virtual menggunakan metode penjadwalan tertentu atau menambahkan Anotasi tertentu, Anda tidak dapat menggunakan StorageClass bertipe WaitForFirstConsumer. Untuk informasi selengkapnya, lihat Apa yang harus saya lakukan jika PVC tetap dalam status Pending saat pod dengan disk terpasang dijadwalkan ke node virtual?.

    Setelah StorageClass dibuat, Anda dapat melihatnya di halaman StorageClasses.

Langkah 2: Buat aplikasi dan pasang disk

Bagian ini menggunakan StatefulSet sebagai contoh untuk menunjukkan cara memasang volume disk.

Penting

Disk merupakan penyimpanan non-bersama. Jika multi-attach tidak diaktifkan, disk hanya dapat dipasang ke satu pod dalam satu waktu. Jika Anda berbagi PVC dalam deployment multi-replika, pod baru akan gagal karena tidak dapat memasang disk yang sedang digunakan oleh pod yang ada. Kami merekomendasikan penggunaan StatefulSet atau memasang disk terpisah untuk setiap pod.

Untuk menggunakan disk cloud dalam Deployment, kami merekomendasikan menggunakan disk cloud sebagai volume penyimpanan sementara. Untuk mengaktifkan multi-attach, lihat Gunakan disk cloud NVMe dengan multi-attach dan Reservation.

  1. Buat file bernama statefulset.yaml.

    Contoh berikut membuat StatefulSet dengan dua pod. Menggunakan volumeClaimTemplates untuk secara otomatis membuat dan mengikat penyimpanan persisten independen untuk setiap pod.
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "nginx"
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          # Kami merekomendasikan konfigurasi securityContext berikut untuk mengoptimalkan performa pemasangan
          securityContext:
            fsGroup: 1000
            fsGroupChangePolicy: "OnRootMismatch"
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
            # Pasang volume data ke direktori /data kontainer
            # Nama harus sama dengan metadata.name yang didefinisikan dalam volumeClaimTemplates
            - name: pvc-disk
              mountPath: /data
      # Definisikan templat PVC
      volumeClaimTemplates:
      - metadata:
          name: pvc-disk
        spec:
          # Mode akses
          accessModes: [ "ReadWriteOnce" ]
          # Asosiasikan StorageClass yang telah dibuat sebelumnya
          storageClassName: "alicloud-disk-wait-for-first-consumer"
          resources:
            requests:
              # Kapasitas penyimpanan yang diminta, yaitu ukuran disk
              storage: 20Gi
    Penting

    Mengonfigurasi securityContext.fsgroup dalam pod menyebabkan kubelet secara rekursif mengubah izin file (chmod/chown) saat volume dipasang. Jika volume berisi banyak file, proses ini secara signifikan meningkatkan waktu pemasangan.

    Untuk kluster yang menjalankan Kubernetes 1.20 atau lebih baru, kami merekomendasikan menyetel fsGroupChangePolicy ke OnRootMismatch. Pengaturan ini hanya melakukan perubahan izin rekursif pada pemasangan pertama dan hanya jika izin direktori root volume tidak sesuai dengan izin yang diperlukan. Hal ini mengoptimalkan performa pemasangan. Jika performa masih belum memenuhi kebutuhan Anda atau jika Anda memerlukan kontrol izin yang lebih granular, kami merekomendasikan penggunaan initContainer untuk menjalankan perintah penyesuaian izin sebelum kontainer aplikasi utama dimulai.

  2. Jalankan perintah berikut untuk membuat StatefulSet.

    kubectl create -f statefulset.yaml
  3. Jalankan perintah berikut untuk memastikan pod berada dalam status Running.

    kubectl get pod -l app=nginx
  4. Jalankan perintah berikut untuk memeriksa jalur pemasangan dan memastikan disk telah dipasang.

    Dalam contoh ini, nama pod adalah web-1. Ganti dengan nama pod aktual Anda.
    kubectl exec web-1 -- df -h /data

    Output yang diharapkan:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdb         20G   24K   20G   1% /data

Langkah 3: Simulasikan kegagalan pod dan verifikasi penyimpanan persisten

Untuk memverifikasi bahwa data yang disimpan di disk tetap ada setelah pod dibuat ulang, Anda dapat menulis data ke pod, menghapus pod, lalu memeriksa apakah data tersebut masih ada.

  1. Tulis data uji ke pod.

    Untuk pod web-1, buat file test di jalur pemasangan disk /data.

    kubectl exec web-1 -- touch /data/test
    kubectl exec web-1 -- ls /data

    Output yang diharapkan:

    lost+found
    test
  2. Simulasikan kegagalan pod dengan menghapus pod tersebut.

    kubectl delete pod web-1

    Jalankan kembali kubectl get pod -l app=nginx. Pod baru bernama web-1 dibuat secara otomatis.

  3. Verifikasi data di pod baru.

    Periksa folder /data di pod baru web-1 lagi.

    kubectl exec web-1 -- ls /data

    Output yang diharapkan menunjukkan bahwa file test masih ada. Hal ini mengonfirmasi bahwa data disimpan secara persisten meskipun pod dihapus dan dibuat ulang.

    lost+found
    test

Peluncuran

  • Ketersediaan tinggi

    • Pemilihan disk

      Evaluasi performa disk, metode penagihan, zona node, dan keluarga instans. Hal ini memastikan pod dapat dijadwalkan ke node yang kompatibel.

      Saat memilih tipe disk, perhatikan bahwa SSD standar dan disk ultra sedang dihentikan penggunaannya. Kami merekomendasikan penggunaan ESSD PL0 atau ESSD Entry disk untuk menggantikan disk ultra, dan menggantikan SSD standar dengan disk ESSD AutoPL.

    • Bangun solusi pemulihan bencana lintas zona

      • Pemulihan bencana tingkat aplikasi: Untuk layanan kritis, seperti database, sebarkan instans aplikasi di beberapa zona. Gunakan mekanisme sinkronisasi data aplikasi untuk mencapai ketersediaan tinggi.

      • Pemulihan bencana tingkat penyimpanan: Pilih tipe disk yang mendukung pemulihan bencana multi-zona. Tulis data secara real time ke zona berbeda dalam wilayah yang sama untuk mengaktifkan pemulihan kesalahan lintas zona. Untuk informasi selengkapnya, lihat Gunakan SSD Perusahaan (ESSD) regional.

  • Keamanan dan backup data

    • Cegah penghapusan data tidak sengaja:

      Untuk mencegah kehilangan data, atur reclaimPolicy StorageClass ke Retain. Saat PVC dihapus, disk backend tidak dihapus. Hal ini menyederhanakan pemulihan data.

    • Backup berkala

      Volume dinamis menyederhanakan penyediaan resource, tetapi tidak menggantikan backup data. Untuk layanan inti, gunakan Backup Center untuk mencadangkan dan memulihkan data.

    • Aktifkan enkripsi data statis: Untuk aplikasi yang menangani data sensitif, konfigurasikan encrypted: "true" dalam StorageClass untuk mengenkripsi disk.

  • Optimasi performa dan biaya

    • Aktifkan pemasangan paralel

      Secara default, operasi disk pada satu node bersifat serial. Gunakan pemasangan disk paralel untuk mempercepat startup pod.

    • Aktifkan ekspansi volume online

      Atur allowVolumeExpansion: true dalam StorageClass. Hal ini memungkinkan Anda untuk memperbesar volume disk secara online jika kebutuhan penyimpanan Anda bertambah.

    • Konfigurasikan pemantauan dan peringatan penyimpanan

      Konfigurasikan peringatan berdasarkan pemantauan penyimpanan kontainer untuk segera mendeteksi anomali volume atau bottleneck performa.

Penagihan

Disk yang dibuat secara dinamis menggunakan StorageClass ditagih dengan model bayar sesuai penggunaan. Untuk informasi selengkapnya, lihat penagihan Elastic Block Storage dan harga Elastic Block Storage.

FAQ

Apa yang harus saya lakukan jika PVC macet dalam status Pending saat pod dengan disk terpasang dijadwalkan ke node virtual?

Masalah ini dapat terjadi jika Anda menggunakan StorageClass yang tidak mendukung penjadwalan ke node virtual. Saat Anda menjadwalkan pod ke node virtual menggunakan label atau anotasi tertentu, StorageClass dengan mode volumeBindingMode: WaitForFirstConsumer tidak didukung.

  • Alasan:
    Mode WaitForFirstConsumer bergantung pada kube-scheduler untuk memilih node fisik bagi pod. Hal ini menentukan zona pod, yang kemudian digunakan untuk membuat disk. Namun, beberapa mekanisme penjadwalan untuk node virtual tidak mengikuti proses ini. Akibatnya, Container Storage Interface (CSI) tidak dapat memperoleh informasi zona. Akibatnya, PV tidak dapat dibuat, dan PVC tetap dalam status Pending.

  • Jika Anda mengalami masalah ini, periksa apakah pod atau namespace-nya mengandung konfigurasi berikut:

    • Label:

      • alibabacloud.com/eci: "true": Menjadwalkan pod ke pod ECI.

      • alibabacloud.com/acs: "true": Menjadwalkan pod ke pod ACS.

    • Spesifikasi node:

      • Pod secara langsung menentukan node menggunakan spec.nodeName. Nama node memiliki awalan virtual-kubelet.

    • Anotasi:

      • k8s.aliyun.com/eci-vswitch: Menentukan vSwitch untuk pod ECI.

      • k8s.aliyun.com/eci-fail-strategy: "fail-fast": Mengatur kebijakan penanganan kegagalan pod ECI menjadi fail-fast.

Bagaimana cara memasang volume disk untuk pod tunggal atau deployment satu replika?

Untuk aplikasi sederhana yang tidak memerlukan penskalaan multi-replika atau Network ID yang stabil, buat PVC secara manual dan pasang ke pod atau deployment untuk mengaktifkan penyimpanan persisten.

Prosesnya sebagai berikut: Pilih StorageClass, buat PVC, lalu pasang PVC tersebut dalam aplikasi.

  1. Siapkan StorageClass.

  2. Buat PVC untuk meminta resource penyimpanan.

    kubectl

    1. Buat file bernama disk-pvc.yaml.

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: disk-pvc
      spec:
        # Mode akses
        accessModes:
        - ReadWriteOnce
        volumeMode: Filesystem
        resources:
          requests:
            # Kapasitas penyimpanan yang diminta, yaitu ukuran disk
            storage: 20Gi
        # Asosiasikan dengan StorageClass yang telah dibuat sebelumnya
        storageClassName: alicloud-disk-topology-alltype 

      Tabel berikut menjelaskan parameter.

      Parameter

      Deskripsi

      accessModes

      Mode akses volume. Nilai yang valid: ReadWriteOnce, ReadOnlyMany, atau ReadWriteMany. Nilai yang didukung bergantung pada pengaturan multiAttach dalam StorageClass dan pengaturan volumeMode dalam PVC.

      multiAttach menentukan apakah multi-attach untuk disk diaktifkan. Nilai default adalah false.
      • Jika multiAttach adalah false dan volumeMode diatur ke nilai apa pun, hanya ReadWriteOnce yang didukung.

      • Jika multiAttach adalah true dan volumeMode adalah Filesystem, hanya ReadWriteOnce dan ReadOnlyMany yang didukung.

      • Jika multiAttach adalah true dan volumeMode adalah Block, ketiga mode akses didukung.

      Penting

      Dalam skenario ini, mode akses biasanya ReadWriteOnce (RWO), artinya volume hanya dapat dipasang oleh satu pod dalam satu waktu. Oleh karena itu, jumlah replika deployment tidak boleh lebih dari 1. Jika Anda mencoba memperluas deployment, pod baru akan macet dalam status Pending karena tidak dapat memasang disk yang sedang digunakan.

      volumeMode

      Mode volume persisten. Nilai yang valid:

      • Filesystem (default): Volume diformat dan dipasang sebagai direktori.

      • Block: Volume disediakan ke pod sebagai perangkat blok yang belum diformat.

      storage

      Kapasitas penyimpanan yang diminta. Rentang kapasitas bervariasi untuk tipe disk berbeda. Pastikan nilai storage mematuhi batas kapasitas tipe disk yang sesuai dengan StorageClass yang direferensikan untuk mencegah kegagalan pembuatan disk.

      storageClassName

      StorageClass yang akan diikat.

    2. Buat PVC.

      kubectl create -f disk-pvc.yaml
    3. Lihat PVC.

      kubectl get pvc

      Dalam output, karena StorageClass menggunakan mode WaitForFirstConsumer, PVC berada dalam status Pending hingga pod pertama yang menggunakannya berhasil dijadwalkan.

      NAME       STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS                            VOLUMEATTRIBUTESCLASS   AGE
      disk-pvc   Pending                                      alicloud-disk-wait-for-first-consumer   <unset>                 14s

    Console

    1. Di panel navigasi kiri halaman manajemen kluster, pilih Volumes > Persistent Volume Claims.

    2. Pada halaman Persistent Volume Claims, klik Create. Atur PVC Type ke Cloud Disk dan konfigurasikan parameter sesuai petunjuk.

      Parameter

      Deskripsi

      Allocation Mode

      Pilih Use StorageClass.

      Existing StorageClass

      StorageClass default atau yang dibuat secara manual.

      Capacity

      Kapasitas penyimpanan yang diminta. Rentang kapasitas bervariasi untuk tipe disk berbeda. Pastikan nilai storage mematuhi batas kapasitas tipe disk yang sesuai dengan StorageClass yang direferensikan untuk mencegah kegagalan pembuatan disk.

      Access Mode

      Hanya ReadWriteOnce yang didukung. Artinya, volume hanya dapat dipasang sebagai baca-tulis oleh satu pod.

      Setelah PVC dibuat, Anda dapat melihatnya di halaman Persistent Volume Claims.

  3. Pasang PVC dalam aplikasi.

    1. Buat file bernama disk-deployment.yaml.

      Klik untuk melihat contoh file YAML

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: single-pod-app
      spec:
        # Pastikan jumlah replika adalah 1
        replicas: 1
        selector:
          matchLabels:
            app: nginx-single
        template:
          metadata:
            labels:
              app: nginx-single
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              # Definisikan titik pemasangan dalam kontainer
              volumeMounts:
              - name: my-persistent-storage  # Harus sesuai dengan nama yang didefinisikan dalam volumes di bawah
                mountPath: /data  # Pasang ke direktori /data dalam kontainer
            # Deklarasikan dan referensikan PVC di tingkat pod
            volumes:
            - name: my-persistent-storage # Volume yang akan direferensikan oleh kontainer
              persistentVolumeClaim:
                claimName: disk-pvc # Referensikan PVC yang telah dibuat sebelumnya
    2. Jalankan perintah berikut untuk menerapkan deployment.

      kubectl create -f disk-deployment.yaml
  4. Verifikasi hasil pemasangan.

    1. Verifikasi bahwa pod berjalan dengan benar.

      kubectl get pods -l app=nginx-single
    2. Login ke pod dan periksa apakah disk dipasang ke direktori /data.

      # Dapatkan nama pod
      POD_NAME=$(kubectl get pods -l app=nginx-single -o jsonpath='{.items[0].metadata.name}')
      
      # Jalankan perintah df -h
      kubectl exec $POD_NAME -- df -h /data

      Output berikut menunjukkan bahwa disk 20 GiB berhasil dipasang.

      Filesystem      Size  Used Avail Use% Mounted on
      /dev/vdb         20G   24K   20G   1% /data

Referensi