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.
CatatanDi panel navigasi kiri halaman manajemen kluster, pilih . 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.
PentingDisk 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.
CatatanJika 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.fsgroupsaat Anda menggunakan volume disk, kubelet secara otomatis menjalankan perintahchmoddanchownsetelah volume dipasang, yang dapat memperlambat proses pemasangan volume.CatatanSetelah Anda menambahkan parameter
securityContext.fsgroupke 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 parameterfsGroupChangePolicydalam konfigurasi pod keOnRootMismatch. 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
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.
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: FilesystemTabel berikut menjelaskan parameter.
Parameter
Deskripsi
csi.alibabacloud.com/volume-topologyAnotasi. 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.
claimRefTentukan PVC yang ingin Anda ikat ke PV. Jika Anda ingin PV terikat ke PVC apa pun, hapus parameter ini.
accessModesMode akses PVC. Anda harus memilih
ReadWriteOnce, yang menentukan bahwa volume dipasang ke satu pod dalam mode baca-tulis.persistentVolumeReclaimPolicyKebijakan 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.
driverDalam contoh ini, parameter ini disetel ke
diskplugin.csi.alibabacloud.com. Nilai ini menentukan bahwa plugin CSI Alibaba Cloud digunakan.nodeAffinityKonfigurasi 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.
storageClassNameParameter 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.
Buat PV.
kubectl create -f disk-pv.yamlPeriksa PV.
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 disk <unset> 1m36s
Langkah 2: Buat PVC
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
accessModesMode akses PVC. Anda harus memilih
ReadWriteOnce, yang menentukan bahwa volume dipasang ke satu pod dalam mode baca-tulis.storageKapasitas penyimpanan yang dialokasikan ke pod. Nilainya tidak boleh melebihi kapasitas disk.
storageClassNameParameter 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.
volumeNameTentukan PV yang ingin Anda ikat ke PVC. Jika Anda ingin mengikat PVC ke PV apa pun, hapus parameter ini.
Buat PVC.
kubectl create -f disk-pvc.yamlPeriksa PVC.
kubectl get pvcOutput 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
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/datapod.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-pvcBuat StatefulSet dan pasang disk ke StatefulSet.
kubectl create -f disk-test.yamlPeriksa apakah pod yang disediakan oleh StatefulSet telah diterapkan.
kubectl get pod -l app=nginxOutput berikut menunjukkan bahwa satu pod telah diterapkan untuk StatefulSet.
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 14sLihat file di jalur pemasangan untuk memeriksa apakah 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
Pasang volume disk yang di-provision secara statis di konsol ACK
Langkah 1: Buat PV
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel kiri, pilih .
Di halaman Persistent Volumes, klik Create.
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
Di panel navigasi kiri halaman detail, pilih
Di pojok kanan atas halaman Persistent Volume Claims, klik Create.
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
Di panel navigasi kiri halaman detail, pilih .
Di pojok kanan atas halaman StatefulSets, klik Create from Image.
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
Periksa apakah aplikasi telah diterapkan.
Di halaman StatefulSets, klik nama aplikasi yang Anda buat.
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:
Lihat file di jalur pemasangan untuk memeriksa apakah file di disk dapat dilihat.
kubectl exec disk-test-0 -- ls /dataOutput yang diharapkan:
lost+foundBuat file di disk.
kubectl exec disk-test-0 -- touch /data/testHapus pod.
kubectl delete pod disk-test-0CatatanSetelah Anda menghapus pod, sistem secara otomatis membuat ulang pod.
Periksa pod baru.
kubectl get pod -l app=nginxOutput 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 27sPeriksa apakah disk asli dipasang ke pod dan file tetap ada di disk.
kubectl exec disk-test-0 -- ls /dataOutput berikut menunjukkan bahwa file
testtetap ada di disk.lost+found test
Referensi
Jika terjadi kesalahan saat Anda menggunakan volume disk, lihat FAQ tentang Volume Disk.
Untuk informasi lebih lanjut tentang cara memperluas disk ketika ukuran disk tidak memenuhi kebutuhan bisnis Anda atau disk penuh, lihat Perluas Volume Disk.
Untuk informasi lebih lanjut tentang penggunaan disk secara real-time, lihat Ikhtisar Pemantauan Penyimpanan Kontainer.