All Products
Search
Document Center

Container Service for Kubernetes:Gunakan volume disk yang di-provision secara statis

Last Updated:Jul 06, 2025

Disk cocok untuk aplikasi yang tidak memerlukan berbagi data tetapi membutuhkan IOPS tinggi dan latensi rendah. Anda dapat memasang disk yang ada ke pod sebagai volume disk yang di-provision secara statis untuk memenuhi persyaratan penyimpanan persisten. Topik ini menjelaskan cara menggunakan volume disk yang di-provision secara statis dan memverifikasi bahwa volume tersebut dapat digunakan untuk menyimpan data secara persisten.

Skenario

Disk cocok untuk skenario berikut:

  • Anda ingin membuat aplikasi yang memerlukan throughput I/O disk tinggi dan tidak memerlukan berbagi data. Aplikasi tersebut dapat menggunakan layanan penyimpanan seperti MySQL dan Redis.

  • Anda ingin menulis log dengan kecepatan tinggi.

  • Anda ingin menyimpan data secara independen dari siklus hidup pod.

Anda dapat memasang disk yang ada ke pod sebagai volume disk yang di-provision secara statis. Dalam mode ini, Anda harus secara manual membuat Persistent Volume (PV) dan Persistent Volume Claim (PVC). Ini memastikan bahwa PV sudah siap sebelum kontainer dimulai. Untuk informasi lebih lanjut, lihat Volume Disk.

Prasyarat

  • Plugin Container Storage Interface (CSI) telah terpasang di kluster.

    Catatan
    • Di panel navigasi kiri halaman manajemen kluster, pilih Operations > Add-ons. Pada tab Storage, Anda dapat memeriksa apakah csi-plugin dan csi-provisioner telah terpasang. Untuk informasi lebih lanjut tentang cara memperbarui plugin CSI untuk menggunakan kemampuan tertentu, lihat Perbarui csi-plugin dan csi-provisioner.

    • Jika kluster Anda menggunakan FlexVolume, Anda harus bermigrasi ke plugin CSI karena FlexVolume tidak lagi tersedia. Untuk informasi lebih lanjut, lihat Tingkatkan dari FlexVolume ke CSI.

  • Disk yang ingin Anda pasang memenuhi persyaratan berikut:

    • Metode penagihan disk adalah bayar sesuai pemakaian dan disk dalam keadaan Pending.

    • Disk berada di zona yang sama dengan instance Elastic Compute Service (ECS), dan tipe disk kompatibel dengan tipe instance ECS.

      Penting

      Disk tidak dapat dipasang lintas zona, dan tipe disk tertentu tidak dapat dilekatkan ke instance ECS tertentu. Pastikan zona dan spesifikasi instance ECS sesuai dengan disk yang ada. Jika tidak, disk gagal dipasang. Untuk informasi lebih lanjut tentang aturan pencocokan antara tipe disk dan tipe instance ECS, lihat Ikhtisar Keluarga Instance.

Catatan penggunaan

  • Disk tidak dapat dibagi. Jika multi-attach tidak diaktifkan untuk disk, setiap disk hanya dapat dipasang ke satu pod. Untuk informasi tentang fitur multi-attach, lihat Gunakan Fitur Multi-Attach dan NVMe Reservation pada Disk NVMe.

  • Anda hanya dapat memasang disk ke pod yang berada di zona yang sama dengan disk.

  • Ketika pod dibuat ulang, disk asli dipasang ke pod. Jika pod tidak dapat dijadwalkan ke zona asli karena batasan tertentu, pod tetap dalam keadaan Pending karena disk tidak dapat dilekatkan.

  • Kami merekomendasikan agar Anda memasang disk ke pod atau StatefulSets alih-alih Deployments.

    Catatan

    Jika multi-attach dinonaktifkan, sebuah disk hanya dapat dipasang ke satu pod. Jika Anda ingin memasang disk ke Deployment, Anda harus mengatur jumlah replika pod menjadi satu untuk Deployment tersebut. Jika Anda mengonfigurasi beberapa pod, Anda tidak dapat memasang volume disk terpisah ke setiap pod. Selain itu, Anda tidak dapat menentukan prioritas pemasangan dan pelepasan volume pod. Saat Anda memulai ulang pod dalam Deployment, disk mungkin gagal dipasang ke pod yang diperbarui karena kebijakan pembaruan yang digunakan oleh Deployment. Kami merekomendasikan agar Anda tidak memasang disk ke Deployment.

  • Jika konfigurasi aplikasi mencakup parameter securityContext.fsgroup saat Anda menggunakan volume disk, kubelet secara otomatis menjalankan perintah chmod dan chown setelah volume dipasang, yang dapat memperlambat proses pemasangan volume.

    Catatan

    Setelah Anda menambahkan parameter securityContext.fsgroup ke konfigurasi aplikasi, Container Service for Kubernetes (ACK) secara otomatis memodifikasi kepemilikan file dalam volume ketika disk dipasang ke aplikasi. Waktu yang diperlukan untuk modifikasi kepemilikan bervariasi berdasarkan jumlah file dalam volume. Jika banyak file ada dalam volume, proses modifikasi memerlukan waktu lama. Untuk kluster yang menjalankan Kubernetes 1.20 atau lebih baru, Anda dapat mengatur parameter fsGroupChangePolicy dalam konfigurasi pod ke OnRootMismatch. Ini memastikan bahwa ACK hanya memodifikasi kepemilikan file selama kali pertama pod dimulai. Saat Anda memperbarui atau membuat ulang pod setelah pembuatan, proses pemasangan volume tidak melibatkan modifikasi kepemilikan. Jika pengaturan di atas tidak memenuhi kebutuhan bisnis Anda, kami merekomendasikan agar Anda membuat init container dan memberikan izin kepada init container untuk melakukan operasi terkait.

Pasang volume disk yang di-provision secara statis menggunakan kubectl

Langkah 1: Buat PV

  1. Sambungkan ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Menyambungkan ke Kluster atau Kelola Kluster Kubernetes Melalui kubectl di Cloud Shell.

  2. Ubah file YAML berikut dan simpan file sebagai disk-pv.yaml:

    Ganti parameter berikut dalam file YAML:

    • <YOUR-DISK-ID>: ID disk yang ada. Contoh:d-uf628m33r5rsbi******

    • <YOUR-DISK-SIZE>: Ukuran disk yang ada. Contoh: 20 GiB.

    • <YOUR-DISK-ZONE-ID>: Zona tempat disk yang ada berada. Contoh: cn-shanghai-f.

    • <YOUR-DISK-CATEGORY>: Tipe disk yang ada. Contoh: cloud_essd.

      Tabel berikut menjelaskan nilai-nilai dari kategori disk yang berbeda.

      • cloud_essd_entry: Disk SSD Enterprise (ESSD) Entry.

      • cloud_auto: Disk ESSD AutoPL.

      • cloud_essd: ESSD.

      • cloud_ssd: SSD standar.

      • cloud_efficiency: Disk ultra.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: "<YOUR-DISK-ID>"
      annotations:
        csi.alibabacloud.com/volume-topology: '{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node.csi.alibabacloud.com/disktype.<YOUR-DISK-CATEGORY>","operator":"In","values":["available"]}]}]}'
    spec:
      capacity:
        storage: "<YOUR-DISK-SIZE>"
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        namespace: default
        name: disk-pvc
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: diskplugin.csi.alibabacloud.com
        volumeHandle: "<YOUR-DISK-ID>"
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.diskplugin.csi.alibabacloud.com/zone
              operator: In
              values:
              - "<YOUR-DISK-ZONE-ID>"
      storageClassName: alicloud-disk-topology-alltype
      volumeMode: Filesystem

    Tabel berikut menjelaskan parameter.

    Parameter

    Deskripsi

    csi.alibabacloud.com/volume-topology

    Anotasi. Parameter ini digunakan untuk mengonfigurasi batasan node tambahan yang diperlukan untuk memasang disk. Untuk memastikan bahwa pod dapat dijadwalkan ke node ECS yang kompatibel, kami sarankan Anda menentukan tipe disk.

    claimRef

    Tentukan PVC yang ingin Anda ikat ke PV. Jika Anda ingin PV terikat ke PVC apa pun, hapus parameter ini.

    accessModes

    Mode akses PVC. Anda harus memilih ReadWriteOnce, yang menentukan bahwa volume dipasang ke satu pod dalam mode baca-tulis.

    persistentVolumeReclaimPolicy

    Kebijakan pengambilan kembali PV.

    • Delete: Ketika PVC dihapus, PV dan disk terkait juga dihapus.

    • Retain: Ketika PVC dihapus, PV dan disk terkait dipertahankan dan hanya dapat dihapus secara manual.

    driver

    Dalam contoh ini, parameter ini disetel ke diskplugin.csi.alibabacloud.com. Nilai ini menentukan bahwa plugin CSI Alibaba Cloud digunakan.

    nodeAffinity

    Konfigurasi afinitas node. Disk tidak dapat dipasang lintas zona. Anda dapat menggunakan parameter ini untuk menjadwalkan pod ke node ECS yang sesuai di zona tempat disk berada.

    storageClassName

    Parameter ini tidak tersedia untuk volume yang di-provision secara statis. Anda tidak perlu membuat StorageClass terlebih dahulu. Namun, pastikan nilai ConfigMap sama di PV dan PVC.

  3. Buat PV.

    kubectl create -f disk-pv.yaml
  4. Periksa PV.

    kubectl get pv

    Output yang diharapkan:

    NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM              STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
    d-uf628m33r5rsbi******   20Gi       RWO            Retain           Available   default/disk-pvc   disk           <unset>                          1m36s

Langkah 2: Buat PVC

  1. Buat file bernama disk-pvc.yaml dan salin konten berikut ke file:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: "<YOUR-DISK-SIZE>"
      storageClassName: alicloud-disk-topology-alltype
      volumeName: "<YOUR-DISK-ID>"

    Tabel berikut menjelaskan parameter.

    Parameter

    Deskripsi

    accessModes

    Mode akses PVC. Anda harus memilih ReadWriteOnce, yang menentukan bahwa volume dipasang ke satu pod dalam mode baca-tulis.

    storage

    Kapasitas penyimpanan yang dialokasikan ke pod. Nilainya tidak boleh melebihi kapasitas disk.

    storageClassName

    Parameter ini tidak tersedia untuk volume yang di-provision secara statis. Anda tidak perlu membuat StorageClass terlebih dahulu. Namun, pastikan nilai ConfigMap sama di PV dan PVC.

    volumeName

    Tentukan PV yang ingin Anda ikat ke PVC. Jika Anda ingin mengikat PVC ke PV apa pun, hapus parameter ini.

  2. Buat PVC.

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

    kubectl get pvc

    Output berikut menunjukkan bahwa PV terikat ke PVC.

    NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    disk-pvc   Bound    d-uf628m33r5rsbi******   20Gi       RWO            disk           <unset>                 64s

Langkah 3: Buat aplikasi dan pasang disk ke aplikasi

  1. Buat file bernama disk-test.yaml dan salin konten berikut ke file.

    Blok kode berikut menentukan konfigurasi StatefulSet yang menyediakan satu pod. Pod meminta sumber daya penyimpanan menggunakan PVC disk-pvc, yang dipasang ke jalur /data pod.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: disk-test
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
            - name: pvc-disk
              mountPath: /data
          volumes:
            - name: pvc-disk
              persistentVolumeClaim:
                claimName: disk-pvc
  2. Buat StatefulSet dan pasang disk ke StatefulSet.

    kubectl create -f disk-test.yaml
  3. Periksa apakah pod yang disediakan oleh StatefulSet telah diterapkan.

    kubectl get pod -l app=nginx

    Output berikut menunjukkan bahwa satu pod telah diterapkan untuk StatefulSet.

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          14s
  4. Lihat file di jalur pemasangan untuk memeriksa apakah disk telah dipasang.

    kubectl exec disk-test-0 -- df -h /data

    Output yang diharapkan:

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

Pasang volume disk yang di-provision secara statis di konsol ACK

Langkah 1: Buat PV

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih Volumes > Persistent Volumes.

  3. Di halaman Persistent Volumes, klik Create.

  4. Di kotak dialog Buat, konfigurasikan parameter dan klik Create.

    Parameter

    Deskripsi

    Contoh

    PV Type

    Pilih Cloud Disk.

    Cloud Disk

    Access Mode

    Hanya ReadWriteOnce yang didukung.

    ReadWriteOnce

    Disk ID

    Klik Select Disk dan pilih disk yang berada di wilayah yang sama dengan node.

    d-uf628m33r5rsbi******

    File System Type

    Pilih sistem file disk. Nilai valid: ext4, ext3, xfs, dan vfat. Nilai default: ext4.

    ext4

    Setelah Anda membuat PV, Anda dapat melihat PV di halaman Persistent Volumes.

Langkah 2: Buat PVC

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

  2. Di pojok kanan atas halaman Persistent Volume Claims, klik Create.

  3. Di kotak dialog Buat, konfigurasikan parameter dan klik Create.

    Parameter

    Deskripsi

    Contoh

    PVC Type

    Pilih Cloud Disk.

    Cloud Disk

    Name

    Masukkan nama kustom untuk PVC. Nama harus mengikuti persyaratan format yang ditampilkan di UI.

    diks-pvc

    Allocation Mode

    Pilih Existing Volumes.

    Volume yang Ada

    Existing Storage Class

    Pilih volume yang Anda buat di Langkah 1.

    d-uf690053kttkprgx****, 20GiB

    Capacity

    Kapasitas penyimpanan yang dialokasikan ke pod. Nilainya tidak boleh melebihi kapasitas disk.

    20Gi

    Setelah Anda membuat PVC, Anda dapat melihat PVC di halaman Persistent Volume Claims. PV yang Anda buat terikat ke PVC.

Langkah 3: Buat aplikasi dan pasang disk ke aplikasi

  1. Di panel navigasi kiri halaman detail, pilih Workloads > StatefulSets.

  2. Di pojok kanan atas halaman StatefulSets, klik Create from Image.

  3. Konfigurasikan parameter StatefulSet dan klik Create.

    Tabel berikut menjelaskan beberapa parameter. Konfigurasikan parameter lainnya sesuai dengan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Gunakan StatefulSet untuk Membuat Aplikasi Stateful.

    Halaman Wizard

    Parameter

    Deskripsi

    Contoh

    Basic Information

    Name

    Masukkan nama kustom untuk StatefulSet. Nama harus mengikuti persyaratan format yang ditampilkan di UI.

    disk-test

    Replicas

    Jumlah replika pod yang disediakan oleh StatefulSet.

    1

    Container

    Image Name

    Alamat image yang digunakan untuk menerapkan aplikasi.

    anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    Required Resources

    Tentukan jumlah vCore, jumlah memori, dan jumlah penyimpanan sementara yang diperlukan oleh aplikasi.

    • CPU: 0.25 vCore

    • Memori: 512 MiB

    • Penyimpanan Sementara: Lewati

    Volume

    Klik Add PVC dan konfigurasikan parameter.

    • Mount Source: Pilih PVC yang Anda buat di Langkah 2.

    • Container Path: Tentukan jalur container tempat Anda ingin memasang disk.

    • Sumber Pemasangan: disk-pvc.

    • Jalur Container: /data

  4. Periksa apakah aplikasi telah diterapkan.

    1. Di halaman StatefulSets, klik nama aplikasi yang Anda buat.

    2. Di tab Pods, periksa apakah pod dalam status Running.

Periksa apakah persistensi data diaktifkan berdasarkan disk menggunakan kubectl

StatefulSet yang dibuat dalam contoh sebelumnya menyediakan satu pod, dan disk dipasang ke pod tersebut. Jika Anda menghapus pod, sistem secara otomatis membuat ulang pod. Disk asli dipasang ke pod baru dan data tetap tersimpan di disk. Untuk menguji apakah data disimpan ke disk, lakukan langkah-langkah berikut:

  1. Lihat file di jalur pemasangan untuk memeriksa apakah file di disk dapat dilihat.

    kubectl exec disk-test-0 -- ls /data

    Output yang diharapkan:

    lost+found
  2. Buat file di disk.

    kubectl exec disk-test-0 -- touch /data/test
  3. Hapus pod.

    kubectl delete pod disk-test-0
    Catatan

    Setelah Anda menghapus pod, sistem secara otomatis membuat ulang pod.

  4. Periksa pod baru.

    kubectl get pod -l app=nginx

    Output berikut menunjukkan bahwa pod baru memiliki nama yang sama dengan pod yang Anda hapus.

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          27s
  5. Periksa apakah disk asli dipasang ke pod dan file tetap ada di disk.

    kubectl exec disk-test-0 -- ls /data

    Output berikut menunjukkan bahwa file test tetap ada di disk.

    lost+found  
    test

Referensi