Saat beban kerja meningkat, volume disk yang dipasang ke Pod dapat kehabisan ruang. Container Service for Kubernetes (ACK) mendukung perluasan volume disk online menggunakan FlexVolume di Kubernetes 1.16 dan versi lebih baru—dalam sebagian besar kasus, tidak diperlukan restart Pod. Topik ini mencakup dua skenario perluasan: memperluas saat Pod tetap dalam status Running dan memperluas setelah merestart Pod.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
File kubeconfig untuk kluster Anda dan kubectl yang telah dikonfigurasi untuk terhubung ke kluster tersebut. Lihat Hubungkan ke kluster ACK menggunakan kubectl.
Volume persisten (PV) yang disediakan secara dinamis dan dipasang melalui Persistent Volume Claim (PVC) yang mencakup parameter
storageClassName.Plugin FlexVolume versi v1.14.8.109-5f88ade-aliyun atau lebih baru. Periksa halaman komponen kluster di Konsol ACK untuk melakukan upgrade.
Batasan
Sebelum memperluas volume disk, tinjau batasan berikut:
| Batasan | Detail |
|---|---|
| Hanya PV yang disediakan secara dinamis | Hanya PV yang disediakan secara dinamis dengan StorageClass yang dapat diperluas secara online. Volume inline dan volume yang didukung oleh basic disk tidak dapat diperluas tanpa gangguan layanan. |
| Ukuran disk maksimum | Disk berukuran 2.000 GiB atau lebih kecil dapat diperluas tanpa gangguan layanan. |
| Pod harus dalam status Running | Pod harus tetap dalam status Running selama proses perluasan. Jika tidak dalam status Running, gunakan metode berbasis restart sebagai gantinya. |
Persyaratan StorageClass
StorageClass harus memiliki allowVolumeExpansion: true. StorageClass yang dibuat oleh ACK mengatur nilai ini secara otomatis. Untuk StorageClass yang dibuat secara manual, atur nilai ini secara eksplisit:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-available
provisioner: alicloud/disk
allowVolumeExpansion: trueCadangkan data Anda
Sebelum memperluas, buat Snapshot disk untuk melindungi dari kehilangan data akibat kesalahan selama proses perluasan.
Berikan izin ResizeDisk kepada peran RAM
Sebelum memperluas volume disk, berikan izin ResizeDisk kepada Master RAM Role kluster. Tanpa izin ini, permintaan perluasan akan mengembalikan error otorisasi.
Masuk ke Konsol ACK.
Pada panel navigasi sebelah kiri, klik Clusters.
Temukan kluster tersebut dan klik Details pada kolom Actions.
Pada panel navigasi sebelah kiri, klik Cluster Information.
Klik tab Cluster Resources, lalu klik tautan di samping Master RAM Role.
Di Konsol RAM, berikan izin ResizeDisk kepada role tersebut. Untuk detailnya, lihat Ubah dokumen dan deskripsi kebijakan kustom.

Untuk cluster khusus ACK yang menggunakan FlexVolume atau kluster ACK yang dikelola, ikuti langkah 1–4 di atas dan klik tautan di samping Master RAM Role.
Perluas volume disk tanpa merestart Pod
Gunakan metode ini saat Pod berada dalam status Running. Disk diperbesar secara online tanpa gangguan layanan.
Periksa status saat ini
Verifikasi bahwa Pod berstatus Running:
kubectl get podOutput yang diharapkan:
web-0 1/1 Running 0 42sPeriksa penggunaan disk saat ini di dalam Pod:
kubectl exec web-0 -- df /dataOutput yang diharapkan:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 20511312 45080 20449848 1% /dataCatat ukuran saat ini: 20 GiB.
Konfirmasi bahwa PVC dalam status bound dan periksa kapasitasnya saat ini:
kubectl get pvcOutput yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-ssd-web-0 Bound d-wz9hpoifm43yn9zie6gl 20Gi RWO alicloud-disk-available 57s
Perluas volume
Lakukan patch pada PVC untuk meminta ukuran penyimpanan baru:
kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'Tunggu sekitar satu menit hingga proses perluasan selesai.
Verifikasi perluasan
Konfirmasi bahwa PV telah diperbarui menjadi 30 GiB:
kubectl get pv d-wz9hpoifm43yn9zie6glOutput yang diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE d-wz9hpoifm43yn9zie6gl 30Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 5m23sKonfirmasi bahwa PVC mencerminkan kapasitas baru:
kubectl get pvc kubectl get pvOutput yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-ssd-web-0 Bound d-wz9hpoifm43yn9zie6gl 30Gi RWO alicloud-disk-available 5m10sVerifikasi bahwa ukuran disk baru terlihat di dalam Pod:
kubectl exec web-0 -- df /dataOutput yang diharapkan:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 30832548 45036 30771128 1% /dataVolume disk telah diperluas dari 20 GiB menjadi 30 GiB tanpa downtime.
Restart Pod untuk memperluas volume disk
Gunakan metode ini ketika sistem file tidak mencerminkan ukuran baru hingga Pod direstart, atau saat Pod tidak dalam status Running.
Periksa status saat ini
Verifikasi status Pod dan catat ukuran disk saat ini:
kubectl get podOutput yang diharapkan:
web-0 1/1 Running 0 42sPeriksa penggunaan disk saat ini di dalam Pod:
kubectl exec web-0 -- df /dataOutput yang diharapkan:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/vdb 20511312 45080 20449848 1% /dataKonfirmasi bahwa PVC dan PV dalam status bound:
kubectl get pvc kubectl get pv
Cegah Pod agar tidak dijadwalkan ulang
Temukan label zona dari PV:
kubectl get pv d-wz9g2j5qbo37r2lamkg4 -oyaml | grep failure-domain.beta.kubernetes.io/zoneOutput yang diharapkan:
failure-domain.beta.kubernetes.io/zone: cn-shenzhen-eUbah label zona menjadi nilai yang tidak valid sehingga Pod tidak dapat dijadwalkan:
kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-shenzhen-e-nozone --overwriteOutput yang diharapkan:
persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeledHapus Pod untuk memicu restart. Pod akan masuk ke status Pending karena label zona tidak lagi cocok dengan node mana pun:
kubectl delete pod web-0Verifikasi bahwa Pod berstatus Pending:
kubectl get podOutput yang diharapkan:
web-0 0/1 Pending 0 27s
Perluas volume
Lakukan patch pada PVC untuk meminta ukuran penyimpanan baru:
kubectl patch pvc disk-ssd-web-0 -p '{"spec":{"resources":{"requests":{"storage":"30Gi"}}}}'
Kembalikan Pod
Kembalikan label zona asli agar Pod dapat dijadwalkan kembali:
kubectl label pv d-wz9g2j5qbo37r2lamkg4 failure-domain.beta.kubernetes.io/zone=cn-shenzhen-e --overwriteOutput yang diharapkan:
persistentvolume/d-wz9g2j5qbo37r2lamkg4 labeledTunggu sekitar satu menit hingga Pod direstart dan proses perluasan selesai.
Verifikasi perluasan
Konfirmasi bahwa Pod berstatus Running:
kubectl get podOutput yang diharapkan:
web-0 1/1 Running 0 3m23sKonfirmasi bahwa PVC mencerminkan kapasitas baru:
kubectl get pvcOutput yang diharapkan:
disk-ssd-web-0 Bound d-wz9g2j5qbo37r2lamkg4 30Gi RWO alicloud-disk-available 17mKonfirmasi bahwa PV mencerminkan kapasitas baru:
kubectl get pv d-wz9g2j5qbo37r2lamkg4Output yang diharapkan:
d-wz9g2j5qbo37r2lamkg4 30Gi RWO Delete Bound default/disk-ssd-web-0 alicloud-disk-available 17mVerifikasi bahwa ukuran disk baru terlihat di dalam Pod:
kubectl exec web-0 -- df /dataOutput yang diharapkan:
/dev/vdb 30832548 45036 30771128 1% /dataVolume disk telah diperluas dari 20 GiB menjadi 30 GiB.