All Products
Search
Document Center

Container Service for Kubernetes:Gunakan volume dinamis dan cloud disk

Last Updated:Aug 21, 2026

Cocok untuk beban kerja yang intensif I/O dan sensitif terhadap latensi seperti database dan middleware, mekanisme volume dinamis menyederhanakan manajemen siklus hidup penyimpanan dengan secara otomatis membuat dan memasang cloud disk khusus untuk setiap replika aplikasi.

Cara kerja

StatefulSet menggunakan cloud disk sebagai volume penyimpanan dinamis melalui proses berikut:

  1. Definisikan templat
    Buat atau gunakan StorageClass default sebagai templat untuk membuat cloud disk secara dinamis. StorageClass menentukan parameter utama, seperti tipe disk, kinerja, dan kebijakan reclaim.

  2. Deklarasikan kebutuhan penyimpanan dalam aplikasi

    Dalam StatefulSet, definisikan volumeClaimTemplates dan referensikan StorageClass untuk menentukan kapasitas penyimpanan dan mode akses untuk PVC.

  3. Buat dan pasang volume penyimpanan secara otomatis
    Saat StatefulSet membuat Pod, sistem secara otomatis menghasilkan PVC unik untuk Pod tersebut berdasarkan templat. Komponen CSI kemudian membuat PV berdasarkan StorageClass, mengikat PV ke PVC, dan memasang cloud disk yang sesuai ke Pod.

Prasyarat

  • Batasan zona ketersediaan: Kecuali cloud disk ESSD zone-redundant, tipe cloud disk lain hanya dapat disambungkan ke pod di zona ketersediaan yang sama.

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

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

    Komponen CSI diinstal secara default. Periksa halaman Add-ons untuk memastikan komponen tersebut masih terinstal. Kami merekomendasikan untuk meningkatkan komponen CSI ke versi terbaru.
  • Batasan node virtual: Untuk menggunakan cloud disk pada node virtual, kluster dan kube-scheduler Anda harus memenuhi persyaratan versi berikut.

    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

  • Batasan Node Lingjun: Untuk menggunakan cloud disk pada Node Lingjun, Anda harus memenuhi persyaratan berikut.

    Persyaratan

Langkah 1: Pilih StorageClass

ACK menyediakan beberapa StorageClass default. Karena StorageClass tidak dapat dimodifikasi setelah dibuat, Anda dapat membuat StorageClass secara manual jika konfigurasi default tidak memenuhi kebutuhan Anda.

StorageClass Bawaan

Anda dapat memilih salah satu StorageClass default berikut dan mereferensikan namanya di field storageClassName aplikasi Anda.

Nama kelas penyimpanan

Tipe disk yang disediakan

alicloud-disk-topology-alltype (Direkomendasikan)

StorageClass ini menjadwalkan Pod sebelum membuat Cloud Disk, sehingga mencegah kegagalan pemasangan akibat ketidaksesuaian zona ketersediaan (volumeBindingMode: WaitForFirstConsumer). Sistem mempertimbangkan zona ketersediaan dan tipe instans node, serta inventaris Cloud Disk yang tersedia, dan mencoba membuat disk dalam urutan berikut: ESSD, SSD cloud disk, dan ultra disk. Secara default, sistem memprioritaskan pembuatan disk ESSD PL1 dengan kapasitas minimum 20 GiB.

alicloud-disk-essd

Menyediakan ESSD. Tingkat kinerja default adalah PL1, dan kapasitas disk minimum adalah 20 GiB.

Penting

ESSD di Cloud Box hanya mendukung tingkat kinerja PL0. Anda harus membuat StorageClass secara manual dan menentukan performanceLevel sebagai PL0.

alicloud-disk-ssd

Menyediakan SSD cloud disk. Kapasitas disk minimum adalah 20 GiB.

alicloud-disk-efficiency

Menyediakan ultra disk. Kapasitas disk minimum adalah 20 GiB.

Anda dapat menjalankan kubectl describe sc <nama-storageclass> untuk melihat konfigurasi detail StorageClass.

Pembuatan 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
    # Provisioner. Ini harus diatur ke nilai ini saat menggunakan plug-in Alibaba Cloud Disk CSI.
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      # Tipe Cloud Disk. Sistem mencoba membuat disk dalam urutan yang ditentukan.
      type: cloud_auto,cloud_essd,cloud_ssd  
      # Tipe sistem file
      fstype: ext4
      diskTags: "a:b,b:c"
      encrypted: "false"
      # Tingkat kinerja untuk ESSD
      performanceLevel: PL1 
      provisionedIops: "40000"
      burstingEnabled: "false"
    # Mode pengikatan volume. WaitForFirstConsumer direkomendasikan untuk skenario multi-AZ.
    volumeBindingMode: WaitForFirstConsumer
    # Kebijakan reclaim
    reclaimPolicy: Retain
    # Apakah ekspansi volume diizinkan
    allowVolumeExpansion: true
    # Pembatasan topologi: Membatasi pembuatan disk hanya pada zona ketersediaan tertentu.
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.diskplugin.csi.alibabacloud.com/zone
        values:
        # Ganti dengan zona ketersediaan Anda
        - cn-hangzhou-i
        - cn-hangzhou-k

    Tabel berikut menjelaskan parameter utama.

    Parameter

    Deskripsi

    provisioner

    Provisioner. Parameter wajib ini harus diatur ke diskplugin.csi.alibabacloud.com saat menggunakan plug-in Alibaba Cloud Disk CSI.

    parameters

    type

    Tipe Cloud Disk. Ini adalah parameter wajib. Nilai yang valid meliputi:

    Anda dapat menentukan daftar tipe yang dipisahkan koma, misalnya, type: cloud_ssd,cloud_essd,cloud_auto. Sistem mencoba membuat disk dalam urutan yang ditentukan. Tipe disk akhir bergantung pada faktor seperti tipe instans node dan tipe disk yang tersedia di zona ketersediaan.

    resourceGroupId

    Kelompok sumber daya untuk Cloud Disk. Default: "".

    regionId

    Wilayah Cloud Disk, yang harus sama dengan wilayah kluster.

    fstype

    Sistem file untuk Cloud Disk. Nilai yang valid: ext4 (default) dan xfs.

    mkfsOptions

    Opsi pemformatan untuk Cloud Disk, misalnya, mkfsOptions: "-O project,quota".

    diskTags

    Tag untuk Cloud Disk. Misalnya, diskTags: "a:b,b:c". Anda juga dapat menggunakan format diskTags/a: b. Memerlukan versi komponen CSI v1.30.3 atau lebih baru.

    encrypted

    Menentukan apakah Cloud Disk dienkripsi. Default: false.

    performanceLevel

    Tingkat kinerja ESSD. Nilai yang valid adalah PL0, PL1 (default), PL2, dan PL3.

    Saat digunakan dengan Cloud Box, ini harus diatur ke PL0.

    volumeExpandAutoSnapshot (Tidak digunakan lagi)

    Tidak digunakan lagi sejak versi CSI 1.31.4.

    provisionedIops

    Mengatur IOPS yang disediakan untuk ESSD AutoPL cloud disk.

    burstingEnabled

    Untuk ESSD AutoPL cloud disk, menentukan apakah akan mengaktifkan burst. Default: false.

    multiAttach

    Menentukan apakah akan mengaktifkan fitur multi-attach untuk Cloud Disk. Default: false.

    volumeBindingMode

    Mode pengikatan volume untuk Cloud Disk. Nilai yang valid:

    • Immediate (default): Membuat Cloud Disk sebelum membuat Pod.

    • WaitForFirstConsumer: Menunda pengikatan. Menjadwalkan Pod terlebih dahulu, lalu membuat Cloud Disk di zona ketersediaan Pod.

      Pada kluster multi-AZ, WaitForFirstConsumer direkomendasikan untuk mencegah kegagalan pemasangan yang dapat terjadi jika Cloud Disk dan nodenya berada di zona ketersediaan yang berbeda.

      Jika Anda perlu menjadwalkan Pod ke node virtual, penggunaan StorageClass bertipe WaitForFirstConsumer tidak didukung dengan metode penjadwalan tertentu atau anotasi spesifik. Untuk informasi selengkapnya, lihat Apa yang harus saya lakukan jika PVC tetap dalam status Pending saat Pod dengan Cloud Disk dijadwalkan ke node virtual?.

    reclaimPolicy

    Kebijakan reclaim untuk Cloud Disk.

    • Delete (default): Saat PVC dihapus, PV dan Cloud Disk yang mendasarinya juga dihapus.

    • Retain: Saat PVC dihapus, PV dan Cloud Disk yang mendasarinya dipertahankan.

      Untuk mencegah kehilangan data secara tidak sengaja, kami merekomendasikan menggunakan kebijakan Retain.

    allowVolumeExpansion

    Jika diatur ke true, mengizinkan ekspansi online Cloud Disk.

    allowedTopologies

    Membatasi Cloud Disk hanya disediakan di domain topologi tertentu.

    • key: Label domain topologi. Nilai yang didukung meliputi:

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

      • alibabacloud.com/ecs-instance-id: Saat menggunakan elastic ephemeral disk, Anda dapat menggunakan ini untuk menentukan node.

    • values: Daftar yang berisi ID zona ketersediaan atau node.

  2. Buat StorageClass.

    kubectl create -f disk-sc.yaml
  3. Verifikasi StorageClass.

    kubectl get sc

    Output menunjukkan bahwa StorageClass dibuat dengan mode pengikatan WaitForFirstConsumer.

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

Konsol

  1. Pada halaman Kluster ACK, klik nama kluster Anda. Di panel navigasi kiri, klik Volumes > StorageClasses.

  2. Klik Create, pilih Cloud Disk sebagai Tipe Volume, konfigurasikan parameter, lalu klik Create.

    Parameter

    Deskripsi

    Parameters

    • Parameter default: type.

      Tipe Cloud Disk. Ini adalah parameter wajib. Nilai yang valid meliputi:

      Anda dapat menentukan daftar tipe yang dipisahkan koma, misalnya, type: cloud_ssd,cloud_essd,cloud_auto. Sistem mencoba membuat disk dalam urutan yang ditentukan. Tipe disk akhir bergantung pada faktor seperti tipe instans node dan tipe disk yang tersedia di zona ketersediaan.

    • Show Optional Parameters

      • resourceGroupId: Kelompok sumber daya untuk Cloud Disk. Default: "".

      • regionId: Wilayah Cloud Disk, yang harus sama dengan wilayah kluster.

      • fstype: Sistem file untuk Cloud Disk. Nilai yang valid: ext4 (default) dan xfs.

      • mkfsOptions: Opsi pemformatan untuk Cloud Disk, misalnya, mkfsOptions: "-O project,quota".

      • diskTags: Tag untuk Cloud Disk. Misalnya, diskTags: "a:b,b:c". Anda juga dapat menggunakan format diskTags/a: b. Memerlukan versi komponen CSI v1.30.3 atau lebih baru.

      • encrypted: Menentukan apakah Cloud Disk dienkripsi. Default: false.

      • performanceLevel: Tingkat kinerja ESSD. Nilai yang valid adalah PL0, PL1 (default), PL2, dan PL3.

        Saat digunakan dengan Cloud Box, ini harus diatur ke PL0.
      • provisionedIops: Mengatur IOPS yang disediakan untuk ESSD AutoPL cloud disk.

      • burstingEnabled: Untuk ESSD AutoPL cloud disk, menentukan apakah akan mengaktifkan burst. Default: false.

      • multiAttach: Menentukan apakah akan mengaktifkan fitur multi-attach untuk Cloud Disk. Default: false.

    Reclaim policy

    Kebijakan reclaim untuk Cloud Disk.

    • Delete (default): Saat PVC dihapus, PV dan Cloud Disk yang mendasarinya juga dihapus.

    • Retain: Saat PVC dihapus, PV dan Cloud Disk yang mendasarinya dipertahankan.

      Untuk mencegah kehilangan data secara tidak sengaja, kami merekomendasikan menggunakan kebijakan Retain.

    Binding Mode

    Mode pengikatan volume untuk Cloud Disk. Nilai yang valid:

    • Immediate (default): Membuat Cloud Disk sebelum membuat Pod.

    • WaitForFirstConsumer: Menunda pengikatan. Menjadwalkan Pod terlebih dahulu, lalu membuat Cloud Disk di zona ketersediaan Pod.

      Pada kluster multi-AZ, WaitForFirstConsumer direkomendasikan untuk mencegah kegagalan pemasangan yang dapat terjadi jika Cloud Disk dan nodenya berada di zona ketersediaan yang berbeda.

      Jika Anda perlu menjadwalkan Pod ke node virtual, penggunaan StorageClass bertipe WaitForFirstConsumer tidak didukung dengan metode penjadwalan tertentu atau anotasi spesifik. Untuk informasi selengkapnya, lihat Apa yang harus saya lakukan jika PVC tetap dalam status Pending saat Pod dengan Cloud Disk dijadwalkan ke node virtual?.

    StorageClass baru muncul di halaman StorageClasses.

Langkah 2: Buat aplikasi dengan cloud disk

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

Penting

Cloud Disk menyediakan penyimpanan non-shared dan, kecuali multi-attach diaktifkan, hanya dapat dipasang ke satu Pod dalam satu waktu. Berbagi PVC dalam Deployment multi-replika dapat mencegah Pod baru berjalan jika Cloud Disk sudah digunakan oleh Pod lain.

Jika Anda tetap perlu menggunakan Cloud Disk dengan Deployment, pertimbangkan menggunakan Cloud Disk sebagai volume sementara. Untuk mengaktifkan multi-attach, lihat Gunakan Cloud Disk berbasis NVMe dengan multi-attach dan reservasi.

  1. Buat file bernama statefulset.yaml.

    Contoh berikut membuat StatefulSet dengan dua Pod. Menggunakan volumeClaimTemplates untuk secara otomatis membuat dan mengikat volume 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 mengonfigurasi securityContext berikut untuk mengoptimalkan kinerja 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 di kontainer.
            # Nama harus sesuai dengan metadata.name yang didefinisikan di volumeClaimTemplates.
            - name: pvc-disk
              mountPath: /data
      # Definisikan templat PVC.
      volumeClaimTemplates:
      - metadata:
          name: pvc-disk
        spec:
          # Mode akses
          accessModes: [ "ReadWriteOnce" ]
          # Asosiasikan dengan StorageClass yang dibuat sebelumnya.
          storageClassName: "alicloud-disk-wait-for-first-consumer"
          resources:
            requests:
              # Kapasitas penyimpanan yang diminta, yaitu ukuran Cloud Disk.
              storage: 20Gi
    Penting

    Saat Anda mengonfigurasi securityContext.fsgroup, kubelet secara rekursif mengubah izin file (chmod/chown) saat memasang volume. Hal ini dapat secara signifikan meningkatkan waktu pemasangan untuk volume dengan banyak file.

    Untuk kluster versi 1.20 atau lebih baru, kami merekomendasikan mengatur fsGroupChangePolicy ke OnRootMismatch. Ini mengoptimalkan kinerja pemasangan dengan hanya melakukan perubahan izin rekursif saat volume dipasang pertama kali dan izin direktori root tidak sesuai. Jika kinerja tetap menjadi masalah atau Anda memerlukan kontrol izin yang lebih granular, gunakan initContainer untuk mengelola izin sebelum kontainer aplikasi dimulai.

  2. Buat StatefulSet.

    kubectl create -f statefulset.yaml
  3. Verifikasi bahwa Pod sedang berjalan.

    kubectl get pod -l app=nginx
  4. Verifikasi bahwa Cloud Disk telah dipasang.

    Dalam contoh ini, Pod bernama 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: Verifikasi penyimpanan persisten

Untuk memverifikasi bahwa data pada cloud disk bersifat persisten, Anda akan menulis data ke disk, menghapus Pod, lalu memeriksa apakah data tetap ada setelah Pod dibuat ulang.

  1. Tulis data uji ke Pod.

    Di Pod web-1, buat file bernama test di direktori /data, yaitu titik pemasangan cloud disk.

    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.

    kubectl delete pod web-1

    Jalankan kubectl get pod -l app=nginx lagi. Pod baru dengan nama yang sama, web-1, dibuat secara otomatis.

  3. Verifikasi data di Pod baru.

    Di Pod web-1 yang baru, periksa kembali direktori /data.

    kubectl exec web-1 -- ls /data

    Output menegaskan bahwa file test masih ada. Hal ini menunjukkan bahwa penyimpanan persisten mempertahankan data, bahkan setelah Pod dihapus dan dibuat ulang.

    lost+found
    test

Penerapan produksi

  • Ketersediaan tinggi

    • Pemilihan cloud disk

      Evaluasi faktor-faktor seperti kinerja, penagihan, zona ketersediaan, dan family tipe instans untuk memastikan pod Anda dijadwalkan ke node yang kompatibel.

      Saat memilih tipe cloud disk, perhatikan bahwa SSD cloud disk dan Ultra cloud disk sedang dihentikan penggunaannya. Kami merekomendasikan menggunakan cloud disk ESSD PL0 atau cloud disk ESSD Entry untuk menggantikan Ultra cloud disk, dan cloud disk ESSD AutoPL untuk menggantikan SSD cloud disk.

    • Pemulihan bencana lintas-AZ

      • Pemulihan bencana tingkat aplikasi: Untuk workload kritis seperti database, sebarkan instans aplikasi di beberapa zona ketersediaan dan gunakan mekanisme sinkronisasi data native aplikasi untuk ketersediaan tinggi.

      • Pemulihan bencana tingkat penyimpanan: Pilih tipe cloud disk yang mendukung pemulihan bencana multi-AZ. Fitur ini menulis data secara sinkron ke zona ketersediaan berbeda dalam wilayah yang sama, memungkinkan failover lintas-AZ. Untuk informasi selengkapnya, lihat Gunakan ESSD Co-located Redundant Disks.

  • Keamanan dan backup data

    • Mencegah penghapusan data secara tidak sengaja:

      Untuk mencegah kehilangan data, atur reclaimPolicy StorageClass ke Retain. Hal ini memastikan cloud disk yang mendasarinya dipertahankan saat PVC dihapus, yang menyederhanakan pemulihan data.

    • Backup berkala

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

    • Enkripsi saat diam: Untuk aplikasi yang menangani data sensitif, konfigurasikan encrypted: "true" di StorageClass untuk mengenkripsi cloud disk.

  • Optimasi kinerja dan biaya

Penagihan

Cloud disk yang disediakan secara dinamis oleh StorageClass menggunakan penagihan bayar sesuai penggunaan. Untuk informasi selengkapnya, lihat penagihan penyimpanan blok dan harga penyimpanan blok.

Bersihkan resource

Untuk mencegah biaya tak terduga dan memastikan keamanan data, ikuti langkah-langkah berikut untuk melepaskan resource yang tidak digunakan.

  1. Hapus workload

    • Aksi: Hapus semua aplikasi yang menggunakan PersistentVolumeClaim (PVC) terkait, seperti Deployment dan StatefulSet. Hal ini menghentikan Pod yang berjalan dan melepas volume yang terkait.

      Contoh perintah: kubectl delete deployment <nama-deployment-anda>

  2. Hapus PVC

    • Aksi: Hapus PVC yang terkait dengan aplikasi Anda. reclaimPolicy StorageClass menentukan pelepasan PersistentVolume (PV) dan cloud disk yang mendasarinya.

      • Delete: Jika kebijakannya Delete, menghapus PVC juga akan menghapus PV yang terikat dan cloud disk yang mendasarinya. Tindakan ini tidak dapat dikembalikan. Lakukan dengan hati-hati.

        Untuk mencegah kehilangan data secara tidak sengaja, Anda dapat membuat kebijakan snapshot otomatis untuk mencadangkan cloud disk sebelum penghapusan.
      • Retain: Jika kebijakannya Retain, menghapus PVC mengubah status PV yang terikat menjadi Released, tetapi objek PV dan cloud disk yang mendasarinya dipertahankan. Jika Anda tidak lagi memerlukan cloud disk dan datanya, ikuti petunjuk di Lepaskan cloud disk untuk menghapusnya. Tindakan ini tidak dapat dikembalikan. Lakukan dengan hati-hati.

      Contoh perintah: kubectl delete pvc <nama-pvc-anda>

  3. Hapus definisi resource penyimpanan Kubernetes. Tindakan ini hanya menghapus definisi resource dari kluster dan tidak menghapus cloud disk yang mendasarinya.

    • Hapus PV

      • Aksi: Anda dapat menghapus secara manual definisi resource untuk PV dalam status Released.

      • Contoh perintah: kubectl delete pv <nama-pv-anda>

    • Hapus StorageClass

      • Aksi: Jika Anda tidak lagi memerlukan tipe penyimpanan ini, Anda dapat menghapus StorageClass yang sesuai.

      • Contoh perintah: kubectl delete sc <nama-storageclass-anda>

FAQ

PVC macet dalam status Pending saat dijadwalkan ke node virtual

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

  • Alasan:
    Mode WaitForFirstConsumer mengandalkan kube-scheduler untuk memilih node fisik untuk Pod. Pemilihan ini menentukan zona ketersediaan, dan cloud disk kemudian dibuat di zona ketersediaan tersebut. Namun, mekanisme penjadwalan untuk node virtual tidak mengikuti proses ini. Hal ini mencegah CSI mendapatkan informasi zona ketersediaan, yang pada gilirannya mencegah PV dibuat, sehingga PVC tetap dalam status Pending.

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

    • Label:

      • alibabacloud.com/eci: "true": Menjadwalkan pod untuk berjalan di ECI.

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

    • Node pinning:

      • Mengatur spec.nodeName ke nama node dengan awalan virtual-kubelet mengikat pod ke node tersebut.

    • Anotasi:

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

      • k8s.aliyun.com/eci-fail-strategy: "fail-fast": Mengatur strategi kegagalan untuk pod ECI ke fail-fast.

Pasang cloud disk untuk pod tunggal atau deployment replika tunggal

Untuk aplikasi sederhana yang tidak memerlukan penskalaan multi-replika atau identifier jaringan stabil, Anda dapat membuat PersistentVolumeClaim secara manual dan memasangnya ke pod atau Deployment untuk penyimpanan persisten.

Alur kerjanya sebagai berikut: Pilih StorageClass -> Buat PersistentVolumeClaim -> Pasang PersistentVolumeClaim di aplikasi Anda.

  1. Siapkan StorageClass.

  2. Buat PersistentVolumeClaim 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 cloud disk
            storage: 20Gi
        # Asosiasikan dengan StorageClass yang dibuat sebelumnya
        storageClassName: alicloud-disk-topology-alltype 

      Tabel berikut menjelaskan parameter.

      Parameter

      Deskripsi

      accessModes

      Mode akses volume. Nilai yang valid adalah ReadWriteOnce, ReadOnlyMany, dan ReadWriteMany. Mode akses yang didukung bergantung pada pengaturan multiAttach di StorageClass dan pengaturan volumeMode di PersistentVolumeClaim.

      multiAttach menentukan apakah akan mengaktifkan multi-attach cloud disk. Nilai default adalah false, yang berarti fitur ini dinonaktifkan.
      • Saat multiAttach adalah false dan volumeMode diatur ke nilai apa pun, satu-satunya mode akses yang didukung adalah ReadWriteOnce.

      • Saat multiAttach adalah true dan volumeMode adalah Filesystem, mode akses yang didukung adalah ReadWriteOnce dan ReadOnlyMany.

      • Saat multiAttach diatur ke true dan volumeMode diatur ke Block, ketiga mode akses didukung.

      Penting

      Dalam skenario ini, mode akses biasanya ReadWriteOnce (RWO), yang berarti hanya dapat dipasang oleh satu Pod dalam satu waktu. Oleh karena itu, jumlah replika Deployment tidak boleh lebih dari 1. Jika Anda mencoba menskalakan, Pod baru akan tetap dalam status Pending karena tidak dapat memasang cloud disk yang sudah digunakan.

      volumeMode

      Mode volume. Nilai yang valid:

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

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

      storage

      Kapasitas penyimpanan yang diminta. Tipe cloud disk berbeda memiliki rentang kapasitas berbeda. Pastikan nilai storage berada dalam batas kapasitas tipe cloud disk yang sesuai dengan StorageClass yang direferensikan untuk mencegah kegagalan pembuatan cloud disk.

      storageClassName

      Nama StorageClass yang akan digunakan untuk klaim ini.

    2. Buat PersistentVolumeClaim.

      kubectl create -f disk-pvc.yaml
    3. Periksa PersistentVolumeClaim.

      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

    Konsol

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

    2. Di halaman Persistent Volume Claims, klik Create. Pilih Cloud Disk sebagai PVC Type dan konfigurasikan parameter sesuai petunjuk.

      Parameter

      Deskripsi

      Allocation Mode

      Pilih Use StorageClass.

      Existing Storage Class

      Pilih StorageClass default atau yang dibuat secara manual.

      Capacity

      Kapasitas penyimpanan yang diminta. Tipe cloud disk berbeda memiliki rentang kapasitas berbeda. Pastikan nilai storage berada dalam batas kapasitas tipe cloud disk yang sesuai dengan StorageClass yang direferensikan untuk mencegah kegagalan pembuatan cloud disk.

      Access Mode

      Skenario ini hanya mendukung ReadWriteOnce, yang berarti satu pod dapat memasang volume dengan akses baca-tulis.

      Setelah membuat PersistentVolumeClaim, Anda dapat melihatnya di halaman Persistent Volume Claims.

  3. Pasang PersistentVolumeClaim di aplikasi Anda.

    1. Buat file bernama disk-deployment.yaml.

      Perluas untuk melihat contoh 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 di kontainer
              volumeMounts:
              - name: my-persistent-storage  # Harus sesuai dengan nama yang didefinisikan di volumes di bawah
                mountPath: /data  # Pasang ke direktori /data di 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 dibuat sebelumnya
    2. Sebarkan Deployment.

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

    1. Konfirmasi bahwa pod sedang berjalan.

      kubectl get pods -l app=nginx-single
    2. Sambungkan ke pod dan verifikasi bahwa cloud 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 pada titik pemasangan
      kubectl exec $POD_NAME -- df -h /data

      Output berikut menunjukkan bahwa cloud disk 20 GiB berhasil dipasang.

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

Referensi