全部产品
Search
文档中心

Container Service for Kubernetes:Secara otomatis memperluas kapasitas volume persisten NAS dengan CNFS

更新时间:Feb 11, 2026

Penskalaan manual volume persisten NAS memerlukan intervensi manusia. Fitur auto-scaling dari Container Network File System (CNFS) lebih efisien karena memungkinkan Anda menetapkan kebijakan untuk secara otomatis memicu skala keluar saat penggunaan penyimpanan mencapai ambang batas tertentu, sehingga menyediakan manajemen kapasitas elastis.

Cara kerja

Penskalaan otomatis volume persisten NAS ditangani oleh komponen storage-operator dan tidak memerlukan perubahan pada kode bisnis Anda. Alur kerja utamanya adalah sebagai berikut.

image
  1. Tentukan kebijakan: Buat resource StorageAutoScalerPolicy untuk memberikan instruksi skala keluar kepada storage-operator. Kebijakan ini mencakup PersistentVolumeClaim (PVC) target, kondisi pemicu, dan aksi skala keluar.

    StorageClass yang digunakan oleh PVC harus dikonfigurasi dengan allowVolumeExpansion: true.
  2. Pemantauan berkelanjutan: storage-operator terus-menerus memantau penggunaan penyimpanan real-time dari PVC target berdasarkan kebijakan tersebut.

  3. Picu skala keluar: Ketika kondisi pemicu terpenuhi, storage-operator secara otomatis mengirim permintaan skala keluar ke PVC.

  4. Jalankan skala keluar: Permintaan diproses oleh driver Container Storage Interface (CSI). Layanan Alibaba Cloud NAS yang mendasari kemudian melakukan operasi skala keluar sistem file sesungguhnya.

  5. Sinkronisasi status: Setelah skala keluar selesai, status PVC secara otomatis diperbarui untuk mencerminkan kapasitas baru.

Penerapan

  • Komponen penyimpanan memenuhi persyaratan berikut:

    • csi-plugin dan csi-provisioner: Versi v1.20.5-ff6490f-aliyun atau yang lebih baru.

      Untuk meningkatkan komponen, lihat Upgrade CSI components.
    • storage-operator: Versi v1.18.8.56-2aa33ba-aliyun atau yang lebih baru.

      Untuk meningkatkan komponen, lihat Manage the storage-operator component.

      Jika Anda menggunakan versi storage-operator yang lebih lama dari v1.33.1, Anda juga harus memodifikasi ConfigMap secara manual untuk mengaktifkan fitur auto-scaling.

      Show details

      Jalankan perintah berikut untuk memodifikasi ConfigMap storage-operator guna menerapkan dan mengaktifkan fitur ini.

      kubectl patch configmap/storage-operator \
        -n kube-system \
        --type merge \
        -p '{"data":{"storage-auto-expander":"{\"imageRep\":\"acs/storage-auto-expander\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-auto-expander/install.yaml\",\"type\":\"deployment\"}"}}'
    • cnfs-controller: Komponen ini telah diinstal.

      Ini adalah komponen terkelola yang diinstal secara default. Pastikan komponen ini belum di-uninstall.
  • CNFS telah dibuat dan statusnya Available. Untuk informasi selengkapnya, lihat bagian tentang pembuatan CNFS di Manage NAS file systems with CNFS.

    Query the CNFS status

    1. Lihat objek CNFS.

      kubectl get cnfs

      Expected output:

      NAME                                      AGE
      default-cnfs-nas-837d6ea-20210819155623   14d
    2. Lihat status objek CNFS.

      kubectl get cnfs <CNFS_NAME> -o yaml | grep Available

      Expected output:

      status: Available

Langkah 1: Tentukan kebijakan skala keluar volume persisten NAS

Menentukan kebijakan skala keluar merupakan inti dari auto-scaling. Pada langkah ini, Anda membuat kebijakan yang menetapkan kondisi pemicu dan perilaku skala keluar.

Gunakan templat YAML berikut untuk membuat StorageAutoScalerPolicy.

Kebijakan ini memicu operasi auto-scaling ketika penggunaan kapasitas PVC yang memiliki label app: nginx di namespace default atau nginx melebihi 80%. Setiap skala keluar meningkatkan kapasitas saat ini sebesar 100%, hingga maksimum 200 GiB.
cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1alpha1
kind: StorageAutoScalerPolicy
metadata:
  name: hybrid-expand-policy
spec:
   # Terapkan kebijakan ini ke PVC yang sesuai menggunakan pemilih label.
  pvcSelector:
    matchLabels:
      app: nginx  # Harus sama dengan label yang dikonfigurasi untuk PVC dan deployment.
   # Namespace tempat kebijakan berlaku.
  namespaces:
    - default
    - nginx
   # Kondisi yang memicu skala keluar.
  conditions:
    - name: condition1
      key: volume-capacity-used-percentage  # Metrik pemantauan: persentase penggunaan kapasitas.
      operator: Gt  # Operator perbandingan: Gt (Greater than).
      values:
        - "80"   # Ambang batas: 80%.
   # Aksi yang dilakukan ketika kondisi terpenuhi.
  actions:
    - name: action1
      type: volume-expand  # Jenis aksi: skala keluar.
      params:
        scale: 100%   # Ukuran langkah penskalaan: Tambahkan 100% dari kapasitas saat ini.
        limits: 200Gi   # Batas kapasitas: Kapasitas total setelah skala keluar tidak boleh melebihi 200 GiB.
EOF

Parameter

Deskripsi

pvcSelector

Mencocokkan PVC yang dikenai kebijakan skala keluar ini menggunakan pemilih label.

namespaces

Daftar namespace tempat kebijakan berlaku. Logika OR diterapkan untuk beberapa namespace. Jika parameter ini tidak dikonfigurasi, nilai default-nya adalah default.

conditions

Aturan pemicu yang terdiri dari satu atau beberapa pernyataan kondisional (condition). Logika AND diterapkan untuk beberapa pernyataan condition. Aturan dipicu hanya jika semua pernyataan condition terpenuhi.

  • key: Jenis metrik pemantauan.

    • volume-capacity-used-percentage: Persentase kapasitas yang digunakan. Kondisi ini terpenuhi ketika persentase kapasitas yang benar-benar digunakan pada volume persisten melebihi ambang batas yang ditentukan.

    • volume-capacity-free-size: Jumlah ruang kosong. Kondisi ini terpenuhi ketika ruang kosong pada volume persisten kurang dari ambang batas yang ditentukan.

    • volume-capacity-pvc-size: Kapasitas yang diminta oleh PVC. Kondisi ini terpenuhi ketika kapasitas awal yang diminta oleh PVC (pvc.spec.resources.requests.storage) kurang dari ambang batas yang ditentukan.

  • operator: Operator perbandingan. Nilai yang didukung adalah Gt (lebih besar dari), Lt (lebih kecil dari), Eq (sama dengan), dan Ne (tidak sama dengan). Nilai-nilai ini tidak peka huruf besar/kecil.

  • values: Nilai spesifik untuk aturan tersebut.

actions

Daftar aksi yang dilakukan ketika conditions terpenuhi. Sistem menjalankan action pertama yang memenuhi kondisi.

  • type: Jenis operasi. Saat ini hanya mendukung volume-expand (skala keluar).

  • scale: Ukuran langkah penskalaan. Nilainya dapat berupa bidang statis, seperti 100Gi, atau persentase, seperti 50%.

  • limits: Batas kapasitas. Kapasitas total PVC setelah skala keluar tidak boleh melebihi nilai ini. Kami menyarankan Anda menetapkan parameter ini untuk mengontrol biaya.

Langkah 2: Buat StorageClass

Buat StorageClass untuk menentukan templat penyimpanan guna membuat volume persisten secara dinamis berdasarkan sistem file NAS yang sudah ada. Parameter allowVolumeExpansion harus diatur ke true untuk menyediakan garis dasar kapasitas yang jelas bagi volume persisten (PV). Kebijakan auto-scaling mengandalkan garis dasar ini untuk menghitung penggunaan.

cat << EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: alibabacloud-cnfs-nas  # Nama StorageClass. Akan dirujuk di PVC nanti.
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
  volumeAs: subpath
  # Format bidang server adalah <nas-server-address>:/<path>.
  server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
  archiveOnDelete: "true"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# Harus diatur ke true untuk mengaktifkan ekspansi volume. Ini adalah prasyarat untuk fitur auto-scaling.
allowVolumeExpansion: true
EOF
Untuk informasi selengkapnya tentang parameter, lihat Manage NAS file systems with CNFS.

Langkah 3: Terapkan aplikasi dan PVC terkaitnya

Setelah membuat kebijakan, Anda harus menerapkan aplikasi dengan label yang sesuai agar kebijakan tersebut terhubung dengan PVC yang relevan.

Gunakan templat YAML berikut untuk membuat PVC dan deployment. Pastikan labels (app: nginx) untuk kedua objek tersebut persis sama dengan konfigurasi pvcSelector.matchLabels dalam kebijakan.

cat << EOF | kubectl apply -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cnfs-nas-pvc
  labels:
    app: nginx   # Harus sama dengan konfigurasi pvcSelector.matchLabels dalam kebijakan skala keluar.
spec:
  accessModes:
    - ReadWriteMany
  # Rujuk StorageClass yang dibuat sebelumnya.
  storageClassName: alibabacloud-cnfs-nas
  resources:
    requests:
      storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cnfs-nas-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx  # Harus sama dengan konfigurasi pvcSelector.matchLabels dalam kebijakan skala keluar.
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
        volumeMounts:
        - mountPath: "/data"
          name: cnfs-nas-pvc
      volumes:
      - name: cnfs-nas-pvc
        persistentVolumeClaim:
          claimName: cnfs-nas-pvc
EOF

Langkah 4: Verifikasi hasil auto-scaling

Setelah kebijakan diterapkan, tulis data analog untuk memicu skala keluar. Kemudian, amati event dan metrik pemantauan terkait untuk memverifikasi bahwa kebijakan tersebut efektif.

  1. Lihat semua pod di namespace default.

    kubectl get pods -l app=nginx

    Expected output:

    NAME                                                            READY   STATUS    RESTARTS   AGE
    cnfs-nas-deployment-56dbcc7fb7-wh79z   1/1      Running            0          20m
  2. Masuk ke pod aplikasi dan tulis data uji sebesar 20 GiB ke direktori yang dipasang. Hal ini membuat penggunaan penyimpanan melebihi ambang batas 80%.

    Operasi penulisan mungkin memakan waktu lama, tergantung pada faktor seperti throughput jaringan dan performa penyimpanan backend.
    kubectl exec -it <POD_NAME> -- dd if=/dev/zero of=/data/testfile bs=1G count=20
  3. Lihat event yang memicu skala keluar.

    kubectl get events | grep cnfs-nas-pvc

    Setelah skala keluar dipicu, sistem menghasilkan event terkait. Output yang diharapkan harus mencakup event seperti StartExpand dan VolumeResizeSuccessful. Event-event ini menunjukkan bahwa skala keluar berhasil dipicu dan diselesaikan, serta kapasitas diperluas dari 20 GiB menjadi 40 GiB.

    12s         Warning   StartExpand                  persistentvolumeclaim/cnfs-nas-pvc          Start to expand of pvc cnfs-nas-pvc from 20Gi to 40Gi, usedCapacityPercentage:99%, freeSize:204MB.
    12s         Normal    ExternalExpanding            persistentvolumeclaim/cnfs-nas-pvc          waiting for an external controller to expand this PVC
    12s         Normal    Resizing                     persistentvolumeclaim/cnfs-nas-pvc          External resizer is resizing volume nas-462db2b2-717d-44fe-b0b6-fb4db03a****
    12s         Normal    VolumeResizeSuccessful       persistentvolumeclaim/cnfs-nas-pvc          Resize volume succeeded

    Anda juga dapat menjalankan kubectl get pvc untuk memeriksa apakah kapasitas PVC telah diperbarui.

  4. Lihat informasi penggunaan volume persisten di dasbor pemantauan CSI NAS.

    Anda harus mengaktifkan Alibaba Cloud Prometheus Monitoring.
    1. Pada halaman Prometheus Monitoring, klik tab Storage Monitoring, lalu klik tab CSI NAS.

    2. Di dasbor CSI NAS, pilih Namespace dan PVC Name tempat volume persisten NAS berada. Lalu, Anda dapat melihat kapasitas saat ini dari volume persisten NAS di area Total Capacity.

      Dalam contoh ini, atur Namespace ke default dan PVC ke cnfs-nas-pvc.NAS存储卷容量

      Gambar di atas menunjukkan bahwa skala keluar dipicu pada pukul 10:23:30, dan kapasitas setelah skala keluar adalah 100 GiB.

Rekomendasi untuk lingkungan produksi

Untuk memanfaatkan fitur auto-scaling volume persisten NAS secara optimal di lingkungan produksi, ikuti praktik terbaik berikut.

Dimensi

Deskripsi

Optimasi biaya

  • Tetapkan batas kapasitas: Dalam actions kebijakan skala keluar, tetapkan nilai limits yang wajar untuk mencegah pertumbuhan kapasitas tak terbatas akibat kesalahan bisnis atau konfigurasi.

  • Tetapkan ukuran langkah penskalaan yang wajar: Parameter scale mendukung persentase atau nilai kapasitas statis. Untuk volume persisten yang sangat besar, menggunakan bidang statis seperti 200 GiB mungkin memberikan kontrol biaya yang lebih tepat dibandingkan menggunakan persentase seperti 50%.

Kebijakan dan keandalan

  • Sediakan buffer keamanan: Jangan menetapkan ambang batas skala keluar di conditions terlalu tinggi, misalnya 95%. Kami menyarankan menetapkannya antara 75% hingga 80%. Hal ini menyediakan waktu dan kapasitas bagi sistem untuk menyelesaikan proses skala keluar dan mencegah kegagalan aplikasi akibat kehabisan ruang sebelum skala keluar selesai.

  • Pemantauan dan peringatan: Aktifkan container storage monitoring, pantau dasbor berdasarkan metrik, dan hubungkan dan konfigurasikan Alibaba Cloud Prometheus Monitoring.

  • Manajemen detail halus: Buat objek StorageAutoScalerPolicy yang berbeda untuk aplikasi atau lingkungan yang berbeda guna menerapkan manajemen kapasitas berbasis skenario secara detail halus.

Pertimbangan performa

Seimbangkan kapasitas dan performa: Auto-scaling menyelesaikan masalah kapasitas, bukan bottleneck performa. Jika aplikasi melambat karena operasi input/output per detik (IOPS) atau banyak operasi baca/tulis file kecil, pertimbangkan memilih tipe NAS dengan performa lebih tinggi.