Dengan membuat PV dan PVC secara manual, Anda dapat memasang cloud disk ke Pod sebagai volume yang disediakan secara statis. Metode ini menyediakan penyimpanan persisten, ideal untuk workload yang memerlukan performa I/O disk tinggi dan latensi rendah tanpa berbagi data.
Disk cocok untuk skenario berikut:
-
Aplikasi yang memerlukan throughput I/O disk tinggi tanpa berbagi data, seperti MySQL dan Redis.
-
Penulisan log berkecepatan tinggi.
-
Persistensi data yang independen dari siklus hidup pod.
Alur Kerja
|
Prasyarat
Persyaratan komponen CSI: Komponen csi-plugin dan csi-provisioner harus diinstal.
Komponen CSI diinstal secara default. Periksa halaman untuk memastikan komponen tersebut masih terinstal. Kami merekomendasikan untuk memutakhirkan komponen CSI ke versi terbaru.
Cloud disk harus berada dalam status Available dan memenuhi persyaratan berikut:
Batasan zona ketersediaan: Kecuali cloud disk ESSD zone-redundant, tipe cloud disk lain hanya dapat disambungkan ke pod dalam zona ketersediaan yang sama.
Batasan family tipe instans: Beberapa tipe cloud disk hanya dapat disambungkan ke family tipe instans tertentu.
Batasan node virtual: Untuk menggunakan cloud disk pada node virtual, kluster dan kube-scheduler Anda harus memenuhi persyaratan versi berikut.
Batasan node Lingjun: Untuk menggunakan cloud disk pada node Lingjun, persyaratan berikut harus dipenuhi.
Langkah 1: Buat PV
Buat PV untuk mendeklarasikan cloud disk yang sudah ada sebagai resource penyimpanan yang tersedia di kluster.
kubectl
Buat file bernama disk-pv.yaml dengan konten berikut.
Dapatkan ID disk, ukuran disk, ID zona, dan kategori disk, lalu ganti variabel dalam file YAML dengan nilai aktual.
apiVersion: v1 kind: PersistentVolume metadata: # ID cloud disk yang sudah ada, misalnya d-uf628m33r5rsbi****** name: "<YOUR-DISK-ID>" annotations: # Direkomendasikan. Memastikan Pod dijadwalkan ke node yang mendukung tipe disk ini. # <YOUR-DISK-CATEGORY> adalah kategori cloud disk yang sudah ada. Nilai yang didukung mencakup cloud_essd_entry, cloud_auto, cloud_essd, cloud_ssd, cloud_efficiency, dan cloud_regional_disk_auto. csi.alibabacloud.com/volume-topology: '{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node.csi.alibabacloud.com/disktype.<YOUR-DISK-CATEGORY>","operator":"In","values":["available"]}]}]}' spec: capacity: # Ukuran cloud disk yang sudah ada, misalnya 20Gi. storage: "<YOUR-DISK-SIZE>" claimRef: apiVersion: v1 kind: PersistentVolumeClaim namespace: default name: disk-pvc accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain csi: driver: diskplugin.csi.alibabacloud.com # ID cloud disk yang sudah ada, misalnya d-uf628m33r5rsbi****** volumeHandle: "<YOUR-DISK-ID>" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.diskplugin.csi.alibabacloud.com/zone operator: In values: # Zona tempat cloud disk berada, misalnya cn-shanghai-f. - "<YOUR-DISK-ZONE-ID>" storageClassName: alicloud-disk-topology-alltype volumeMode: FilesystemTabel berikut menjelaskan parameter utama.
Parameter
Deskripsi
csi.alibabacloud.com/volume-topologyAnotasi ini mengatur afinitas node untuk cloud disk, memastikan bahwa Pod yang menggunakan disk ini dijadwalkan ke node yang mendukung tipe disk tersebut. Hal ini mencegah kegagalan pemasangan akibat ketidakcocokan node.
Untuk memastikan penjadwalan yang akurat, kami merekomendasikan agar Anda menentukan kategori disk. Tipe yang didukung adalah sebagai berikut:
ESSD Entry disk:
cloud_essd_entryESSD AutoPL disk:
cloud_autoESSD disk:
cloud_essdStandard SSD:
cloud_ssdUltra disk:
cloud_efficiencyZone-redundant disk:
cloud_regional_disk_auto(memerlukan penyesuaian pada parameter nodeAffinity)
claimRefMenentukan PVC yang dapat mengikat PV ini. Untuk mengizinkan PVC apa pun mengikat PV ini, hapus parameter ini.
accessModesMode akses. Mode yang didukung bergantung pada apakah fitur multi-attach untuk cloud disk diaktifkan.
Multi-attach dinonaktifkan: Hanya
ReadWriteOnce(RWO) yang didukung. Cloud disk dapat dipasang ke satu node dalam mode baca/tulis.Multi-attach diaktifkan:
Sebagai sistem file standar (diformat): Mendukung
ReadWriteOnce(RWO) danReadOnlyMany(ROX).Untuk mencegah korupsi data akibat penulisan konkuren ke sistem file seperti ext4 di beberapa node, mode
ReadWriteMany(RWX) tidak didukung.Sebagai perangkat blok mentah (tidak diformat): Mendukung
ReadWriteOnce(RWO),ReadOnlyMany(ROX), danReadWriteMany(RWX).
persistentVolumeReclaimPolicyKebijakan reclaim untuk PV, yang menentukan apa yang terjadi pada PV dan cloud disk dasarnya ketika PVC yang terikat dihapus.
Delete: Ketika PVC dihapus, baik PV maupun cloud disk dihapus. Gunakan pengaturan ini dengan hati-hati.Untuk mencegah kehilangan data secara tidak sengaja, Anda dapat membuat kebijakan snapshot otomatis untuk mencadangkan cloud disk sebelum penghapusan.
Retain: Ketika PVC dihapus, PV dan cloud disk tidak dihapus. Anda harus melepaskannya secara manual.
driverAtur ke
diskplugin.csi.alibabacloud.comsaat menggunakan disk Alibaba Cloud.nodeAffinityPengaturan afinitas node. Kecuali disk ESSD zone-redundant, tipe cloud disk lain hanya dapat disambungkan ke Pod dalam zona yang sama. Konfigurasi ini memastikan bahwa Pod dijadwalkan ke node ECS dalam zona yang sama dengan cloud disk.
Untuk disk zone-redundant, ubah konfigurasi menjadi berikut untuk mengizinkan disk dipasang di zona mana pun dalam wilayah tersebut.
Dalam konfigurasi ini,
<YOUR-DISK-REGION-ID>adalah wilayah tempat cloud disk berada, misalnyacn-shanghai.nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/region operator: In values: - "<YOUR-DISK-REGION-ID>"storageClassNamePengaturan ini tidak berpengaruh pada volume yang disediakan secara statis, dan Anda tidak perlu membuat StorageClass yang sesuai. Namun, Anda harus memastikan bahwa nilai pengaturan ini sama di PV dan PVC.
Buat PV.
kubectl create -f disk-pv.yamlPeriksa status PV dan pastikan statusnya
Available.kubectl get pvOutput yang diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE d-uf628m33r5rsbi****** 20Gi RWO Retain Available default/disk-pvc alicloud-disk-topology-alltype <unset> 1m36s
Konsol
-
Pada halaman Kluster ACK, klik nama kluster Anda. Di panel navigasi kiri, klik .
Pada halaman Persistent Volumes, klik Create, atur PV Type ke Cloud Disk, dan konfigurasikan parameter PV sesuai petunjuk.
Parameter
Deskripsi
Access Mode
Hanya ReadWriteOnce yang didukung.
Disk ID:
Klik Select Disk dan pilih cloud disk yang belum dipasang di wilayah dan zona yang sama dengan node.
File System Type:
Pilih tipe sistem file untuk menyimpan data di cloud disk. File System Type: yang didukung meliputi ext4, ext3, xfs, dan vfat.
Langkah 2: Buat PVC
Buat PVC untuk mengikat PV yang Anda buat pada langkah sebelumnya.
kubectl
Buat file bernama disk-pvc.yaml dengan konten berikut.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce resources: requests: # Kapasitas penyimpanan yang diminta, harus sesuai dengan kapasitas PV. storage: "<YOUR-DISK-SIZE>" # Harus sesuai dengan storageClassName yang ditentukan di PV. storageClassName: alicloud-disk-topology-alltype # Tentukan PV yang akan diikat. volumeName: "<YOUR-DISK-ID>"Tabel berikut menjelaskan parameter utama.
Parameter
Deskripsi
accessModesMode akses. Harus konsisten dengan konfigurasi PV.
storageKapasitas penyimpanan yang dialokasikan ke Pod. Harus konsisten dengan kapasitas PV.
storageClassNamePengaturan ini tidak berpengaruh pada volume yang disediakan secara statis, dan Anda tidak perlu membuat StorageClass yang sesuai. Namun, Anda harus memastikan bahwa nilai pengaturan ini sama di PV dan PVC.
volumeNameMenentukan PV yang akan diikat. Untuk mengizinkan PVC mengikat PV yang sesuai apa pun, hapus parameter ini.
Buat PVC.
kubectl create -f disk-pvc.yamlPeriksa status PVC dan pastikan statusnya
Bound.kubectl get pvcOutput yang diharapkan, yang menunjukkan bahwa PVC terikat ke PV cloud disk:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Bound d-bp1ff1mn65jk8s****** 20Gi RWO alicloud-disk-topology-alltype <unset> 6s
Konsol
Di panel navigasi kiri halaman manajemen kluster, pilih .
Pada halaman Persistent Volume Claims, klik Create, atur PVC Type ke Disk, dan buat PVC sesuai petunjuk.
Parameter
Deskripsi
Allocation Mode
Pilih Existing Volumes.
Existing Volumes
Pilih PV yang Anda buat sebelumnya.
Capacity
Kapasitas penyimpanan yang dialokasikan ke Pod, yang tidak boleh melebihi kapasitas cloud disk.
Langkah 3: Buat aplikasi dan pasang cloud disk
Buat workload dan gunakan cloud disk dengan memasang PVC.
Cloud Disk menyediakan penyimpanan non-shared dan, kecuali jika multi-attach diaktifkan, hanya dapat dipasang ke satu Pod sekaligus. Berbagi PVC dalam Deployment multi-replika dapat mencegah Pod baru dimulai jika Cloud Disk sedang 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.
kubectl
Buat file bernama disk-test.yaml dengan konten berikut.
Contoh berikut membuat StatefulSet dengan satu replika. Pod meminta resource penyimpanan melalui PVC bernama
disk-pvcdan memasang volume ke path/data.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-pvcPentingSaat Anda mengonfigurasi
securityContext.fsgroup, kubelet secara rekursif mengubah izin file (chmod/chown) saat memasang volume. Hal ini dapat meningkatkan waktu pemasangan secara signifikan untuk volume dengan banyak file.Untuk kluster versi 1.20 atau lebih baru, kami merekomendasikan mengatur
fsGroupChangePolicykeOnRootMismatch. Ini mengoptimalkan performa pemasangan dengan hanya melakukan perubahan izin rekursif saat volume dipasang pertama kali dan izin direktori root tidak sesuai. Jika performa tetap menjadi masalah atau Anda memerlukan kontrol izin yang lebih granular, gunakaninitContaineruntuk mengelola izin sebelum kontainer aplikasi dimulai.Saat Pod dibangun ulang, Pod tersebut memasang kembali cloud disk asli. Jika batasan lain mencegah Pod dijadwalkan ke zona aslinya, Pod akan tetap dalam status Pending karena tidak dapat memasang cloud disk.
Buat StatefulSet dan pasang cloud disk.
kubectl create -f disk-test.yamlPeriksa status Pod dan pastikan statusnya
Running.kubectl get pod -l app=nginxOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 14sPeriksa path pemasangan untuk memastikan cloud disk telah dipasang.
kubectl exec disk-test-0 -- df -h /dataOutput yang diharapkan:
Filesystem Size Used Avail Use% Mounted on /dev/vdb 20G 24K 20G 1% /data
Konsol
Di panel navigasi kiri halaman manajemen kluster, pilih .
Pada halaman StatefulSets, klik Create from Image, dan ikuti petunjuk di halaman untuk mengonfigurasi parameter StatefulSet.
Tabel berikut menjelaskan item konfigurasi utama. Untuk instruksi konfigurasi detail, lihat Buat StatefulSet.
Halaman konfigurasi
Parameter
Deskripsi
Basic Information
Replicas:
Konfigurasikan jumlah replika untuk StatefulSet.
Container
Image Name
Masukkan alamat image yang digunakan untuk men-deploy aplikasi, seperti
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6.Required Resources
Atur resource vCPU, memori, dan penyimpanan sementara yang diperlukan.
Dalam contoh ini, CPU diatur ke 0,25 Core, dan memori diatur ke 512 MiB.
Volume
Klik Add PVC, lalu konfigurasikan parameter.
Mount Source: Pilih PVC yang Anda buat sebelumnya.
Container Path: Masukkan path di kontainer tempat cloud disk dipasang, seperti /data.
Periksa status deployment aplikasi.
Pada halaman StatefulSets, klik nama aplikasi.
Pada tab Pods, pastikan Pod berada dalam status Running.
Verifikasi persistensi data
Ikuti proses "tulis data > hapus Pod > periksa data" untuk memverifikasi bahwa data yang disimpan di cloud disk tetap ada setelah Pod dibangun ulang.
Tulis data uji ke Pod.
Periksa path pemasangan untuk melihat data di cloud disk.
kubectl exec disk-test-0 -- ls /dataOutput yang diharapkan:
lost+foundTulis data uji ke Pod.
Ambil Pod
disk-test-0sebagai contoh. Buat file uji di direktori/data, yaitu path pemasangan cloud disk.kubectl exec disk-test-0 -- touch /data/test
Simulasikan kegagalan Pod dengan menghapus Pod.
kubectl delete pod disk-test-0Jalankan perintah
kubectl get pod -l app=nginxlagi. Pod dengan nama yang sama akan dibuat secara otomatis.Verifikasi data di Pod baru.
Periksa kembali direktori
/datadi Pod barudisk-test-0.kubectl exec disk-test-0 -- ls /dataDalam output yang diharapkan, file uji yang dibuat sebelumnya masih ada, menunjukkan bahwa data tetap ada meskipun Pod dihapus dan dibangun ulang.
lost+found test
Pertimbangan produksi
Ketersediaan tinggi
Pemilihan disk cloud
Konfigurasikan dengan benar
nodeAffinitydancsi.alibabacloud.com/volume-topologydi PV untuk memastikan bahwa Pod dapat dijadwalkan dengan sukses dan cloud disk dapat dipasang ulang setelah Pod dibangun ulang.Pemilihan cloud disk
Evaluasi faktor seperti performa, penagihan, zona ketersediaan, dan family tipe instans untuk memastikan pod Anda dijadwalkan ke node yang kompatibel.
Saat memilih tipe cloud disk, perhatikan bahwa cloud disk SSD dan Ultra cloud disk sedang dihentikan. Kami merekomendasikan menggunakan cloud disk ESSD PL0 atau cloud disk ESSD Entry untuk menggantikan Ultra cloud disk, dan cloud disk ESSD AutoPL untuk menggantikan cloud disk SSD.
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 data
Cadangan rutin: Gunakan kebijakan snapshot otomatis untuk membuat snapshot cloud disk Anda untuk pencadangan dan pemulihan data.
Optimalisasi performa dan biaya
Attach paralel
Untuk mempercepat startup pod, gunakan attach paralel untuk cloud disk.
Pemantauan dan alert penyimpanan
Konfigurasikan alert berdasarkan pemantauan penyimpanan kontainer untuk segera mendeteksi anomali volume penyimpanan atau bottleneck performa.
Bersihkan resource
Untuk menghindari biaya tak terduga dan memastikan keamanan data, ikuti proses ini untuk melepaskan resource yang tidak digunakan.
Hapus workload
Aksi: Hapus semua aplikasi yang menggunakan PVC terkait, seperti Deployment dan StatefulSet. Aksi ini menghentikan Pod yang berjalan dan melepas volume.
Contoh perintah:
kubectl delete deployment <YOUR-DEPLOYMENT-NAME>
Hapus PVC
Aksi: Hapus PVC yang terkait dengan aplikasi. Setelah penghapusan, apa yang terjadi pada PV yang terikat bergantung pada
persistentVolumeReclaimPolicy-nya.Detail kebijakan reclaim:
Retain: Setelah PVC dihapus, status PV yang terikat berubah menjadiReleased, tetapi objek PV dan cloud disk backend tetap dipertahankan. Jika Anda memastikan bahwa cloud disk dan semua datanya tidak lagi diperlukan, lihat Lepaskan cloud disk untuk menghapusnya. Aksi ini tidak dapat dikembalikan, jadi lakukan dengan hati-hati.Delete: Setelah PVC dihapus, baik objek PV maupun cloud disk backend dihapus. Data di cloud disk akan hilang secara permanen dan tidak dapat dipulihkan. Gunakan kebijakan ini dengan hati-hati.Untuk mencegah kehilangan data secara tidak sengaja, Anda dapat membuat kebijakan snapshot otomatis untuk mencadangkan cloud disk sebelum penghapusan.
Contoh perintah:
kubectl delete pvc <YOUR-PVC-NAME>
Hapus objek PV: Aksi ini hanya menghapus definisi resource dari kluster dan tidak menghapus cloud disk backend.
Aksi: Hapus secara manual PV yang berada dalam status
Released.Contoh perintah:
kubectl delete pv <YOUR-PV-NAME>
Dokumen terkait
Untuk rekomendasi optimalisasi konfigurasi deployment cloud disk multi-zona, lihat Rekomendasi konfigurasi ketersediaan tinggi untuk volume cloud disk.
Jika kapasitas cloud disk Anda tidak mencukupi atau disk penuh, lihat Perluas volume cloud disk untuk mengubah ukurannya.
Jika Anda tidak lagi menggunakan cloud disk dan ingin menghentikan penagihan, Anda dapat melepaskan cloud disk. Setelah dilepas, cloud disk dan data yang tersimpan di dalamnya dihapus, dan penagihan dihentikan.
Jika Anda mengalami masalah saat menggunakan volume cloud disk, lihat FAQ tentang volume cloud disk.
Jika kluster Anda masih menggunakan komponen FlexVolume yang sudah tidak digunakan lagi, migrasikan dari FlexVolume ke CSI.
