Volume disk cocok untuk aplikasi yang memiliki persyaratan I/O tinggi dan latensi rendah tetapi tidak memerlukan berbagi data. Anda dapat memasang disk yang sudah ada ke pod sebagai volume yang disediakan secara statis untuk penyimpanan persisten. Topik ini menjelaskan cara menggunakan volume disk yang disediakan secara statis dan memverifikasi bahwa penyimpanannya bersifat 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 persisten yang tidak bergantung pada siklus hidup pod.
Jika Anda memiliki disk yang sudah ada, Anda dapat memasangnya ke pod sebagai volume yang disediakan secara statis. Metode ini mengharuskan Anda membuat volume persisten (PV) dan klaim volume persisten (PVC) secara manual. Hal ini memastikan bahwa PV siap sebelum kontainer dimulai. Untuk informasi selengkapnya, lihat Volume penyimpanan blok.
Prasyarat
Plugin Container Storage Interface (CSI) telah diinstal di kluster.
CatatanDi panel navigasi sebelah kiri halaman manajemen kluster, pilih . Di tab Storage, periksa status instalasi komponen csi-plugin dan csi-provisioner. Untuk meningkatkan plugin CSI agar dapat menggunakan fitur tertentu, lihat Upgrade the CSI plugin.
Jika kluster Anda menggunakan komponen FlexVolume, Anda harus bermigrasi ke plugin CSI karena FlexVolume sudah tidak digunakan lagi. Untuk informasi selengkapnya, lihat Migrate from FlexVolume to CSI.
Disk yang ingin Anda pasang memenuhi persyaratan berikut:
Metode penagihan disk adalah bayar sesuai penggunaan dan disk berada dalam status Available.
Disk berada di zona yang sama dengan node ECS, dan tipe disk kompatibel dengan tipe instans ECS.
PentingDisk tidak dapat dipasang lintas zona. Beberapa tipe disk tidak dapat disambungkan ke tipe instans ECS tertentu. Pastikan zona dan tipe instans dari node ECS tempat pod dijadwalkan kompatibel dengan disk yang sudah ada. Jika tidak, pemasangan disk akan gagal. Untuk informasi selengkapnya tentang kompatibilitas antara tipe disk dan tipe instans ECS, lihat Instance families.
Catatan Penggunaan
Disk merupakan penyimpanan non-bersama. Jika multi-attach tidak diaktifkan untuk suatu disk, disk tersebut hanya dapat dipasang ke satu pod dalam satu waktu. Untuk informasi selengkapnya tentang multi-attach, lihat Use the multi-attach and reservation features of NVMe disks.
Anda hanya dapat memasang disk ke pod yang berada di zona yang sama dengan disk tersebut. Pemasangan lintas zona tidak didukung.
Ketika pod dibuat ulang, disk asli akan dipasang kembali. Jika pod tidak dapat dijadwalkan ke zona asal karena kendala lain, pod akan tetap berada dalam status Pending karena disk tidak dapat dipasang.
Kami menyarankan Anda memasang disk ke StatefulSet atau pod individual, bukan ke deployment.
CatatanJika multi-attach dinonaktifkan, disk hanya dapat dipasang ke satu pod. Jika Anda memasang disk ke deployment, Anda harus mengatur jumlah replika menjadi 1. Anda tidak dapat mengonfigurasi volume terpisah untuk setiap pod atau menjamin prioritas pemasangan dan pelepasan. Selain itu, karena kebijakan peningkatan deployment, pod baru mungkin gagal memasang disk saat direstart. Oleh karena itu, kami tidak merekomendasikan memasang disk ke deployment.
Saat menggunakan volume disk, jika Anda mengonfigurasi
securityContext.fsgroupdalam file YAML aplikasi, kubelet akan menjalankan perintahchmoddanchownsetelah pemasangan selesai. Hal ini meningkatkan waktu pemasangan.CatatanSetelah Anda mengonfigurasi
securityContext.fsgroup, pemilik file dalam volume akan berubah secara otomatis saat disk dipasang. Hal ini dapat meningkatkan waktu persiapan, tergantung pada jumlah file. Untuk kluster Kubernetes versi 1.20 atau lebih baru, Anda dapat mengaturfsGroupChangePolicymenjadiOnRootMismatch. Hal ini memastikan bahwa pemilik file hanya diubah saat kontainer pertama kali dimulai. Untuk peningkatan atau pembuatan ulang pod berikutnya, waktu pemasangan tidak terpengaruh. Jika hal ini tidak memenuhi kebutuhan Anda, kami menyarankan Anda menggunakan initContainer untuk menyesuaikan izin.
Pasang volume disk yang disediakan secara statis menggunakan kubectl
Langkah 1: Buat PV
Sambungkan ke kluster. Untuk informasi selengkapnya, lihat Connect to a cluster using kubectl atau Use kubectl in CloudShell or Workbench to connect to a cluster.
Buat file bernama disk-pv.yaml berdasarkan templat berikut.
Ganti placeholder berikut dalam file YAML:
<YOUR-DISK-ID>: ID disk yang sudah ada. Misalnya,d-uf628m33r5rsbi******.<YOUR-DISK-SIZE>: Ukuran disk yang sudah ada. Misalnya,20Gi.<YOUR-DISK-ZONE-ID>: Zona tempat disk yang sudah ada berada. Misalnya,cn-shanghai-f.<YOUR-DISK-CATEGORY>: Tipe disk yang sudah ada. Misalnya,cloud_essd.Daftar berikut menjelaskan nilai untuk berbagai tipe disk.
ESSD Entry disk:
cloud_essd_entryESSD AutoPL disk:
cloud_autoESSD:
cloud_essdStandard SSD:
cloud_ssdUltra disk:
cloud_efficiencyZone-redundant disk:
cloud_regional_disk_auto(Anda juga harus menyesuaikan konfigurasi. Untuk informasi selengkapnya, lihat deskripsi parameter nodeAffinity.)
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 tersebut.
Parameter
Deskripsi
csi.alibabacloud.com/volume-topologyAnotasi. Digunakan untuk mengonfigurasi batasan node tambahan yang diperlukan agar disk berhasil dipasang. Kami menyarankan Anda menentukan tipe disk untuk memastikan pod dijadwalkan ke node ECS yang mendukung tipe disk tersebut.
claimRefMenentukan PVC yang dapat diikat ke PV. Untuk memungkinkan PV diikat ke PVC apa pun, hapus konfigurasi ini.
accessModesMode akses. Hanya
ReadWriteOnceyang didukung. Artinya, volume dapat dipasang sebagai baca-tulis oleh satu pod saja.persistentVolumeReclaimPolicyKebijakan reklamasi PV.
Delete: Saat PVC dihapus, PV dan disk juga dihapus.Retain: Saat PVC dihapus, PV dan disk tidak dihapus. Anda harus menghapusnya secara manual.
driverNilainya adalah
diskplugin.csi.alibabacloud.com, yang menunjukkan bahwa plugin CSI disk Alibaba Cloud digunakan.nodeAffinityKonfigurasi afinitas node. Disk tidak dapat dipasang lintas zona. Konfigurasi ini memastikan bahwa pod dijadwalkan ke node ECS di zona yang sama dengan disk.
Untuk disk zone-redundant, ubah menjadi konten berikut untuk memungkinkan disk dipasang ke zona mana pun di wilayah tersebut.
Dalam kode,
<YOUR-DISK-REGION-ID>adalah wilayah tempat disk berada, misalnya,cn-shanghai.nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/region operator: In values: - "<YOUR-DISK-REGION-ID>"storageClassNameKonfigurasi ini tidak berarti untuk volume yang disediakan secara statis. Anda tidak perlu membuat StorageClass yang sesuai terlebih dahulu. Namun, Anda harus memastikan bahwa nilai item konfigurasi ini sama di PV dan PVC.
Buat PV.
kubectl create -f disk-pv.yamlVerifikasi bahwa PV telah dibuat.
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 berdasarkan templat berikut.
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 tersebut.
Parameter
Deskripsi
accessModesMode akses. Hanya
ReadWriteOnceyang didukung. Artinya, volume dapat dipasang sebagai baca-tulis oleh satu pod saja.storageKapasitas penyimpanan yang dialokasikan ke pod. Nilainya tidak boleh melebihi kapasitas disk.
storageClassNameKonfigurasi ini tidak berarti untuk volume yang disediakan secara statis. Anda tidak perlu membuat StorageClass yang sesuai terlebih dahulu. Namun, Anda harus memastikan bahwa nilai item konfigurasi ini sama di PV dan PVC.
volumeNameMenentukan PV yang dapat diikat ke PVC. Untuk memungkinkan PVC diikat ke PV apa pun, hapus parameter ini.
Buat PVC.
kubectl create -f disk-pvc.yamlVerifikasi bahwa PVC telah dibuat.
kubectl get pvcOutput yang diharapkan menunjukkan bahwa PVC terikat dengan PV.
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
Buat file bernama disk-test.yaml berdasarkan templat berikut.
Contoh YAML berikut membuat StatefulSet dengan satu pod. Pod tersebut meminta sumber daya penyimpanan menggunakan 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-pvcBuat StatefulSet dan pasang disk.
kubectl create -f disk-test.yamlPeriksa status pod di StatefulSet.
kubectl get pod -l app=nginxOutput yang diharapkan menunjukkan bahwa satu pod dibuat karena jumlah replika StatefulSet adalah 1.
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 14sVerifikasi bahwa disk telah dipasang dengan memeriksa path pemasangan.
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 disediakan secara statis di konsol
Langkah 1: Buat volume persisten (PV)
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan lalu klik namanya. Di panel navigasi sebelah kiri, pilih .
Di halaman Persistent Volumes, klik Create.
Di kotak dialog yang muncul, atur parameter dan klik Create.
Parameter
Deskripsi
Contoh
PV Type
Pilih Disk.
Disk
Access Mode
Hanya ReadWriteOnce yang didukung.
ReadWriteOnce
Disk ID
Klik Select Disk dan pilih disk yang akan dipasang. Disk harus berada di wilayah dan zona yang sama dengan node.
d-uf628m33r5rsbi******
File System Type
Pilih tipe sistem file yang akan digunakan untuk menyimpan data di disk. Tipe yang didukung meliputi ext4, ext3, xfs, dan vfat. Nilai default-nya adalah ext4.
ext4
Setelah PV dibuat, Anda dapat melihatnya di halaman Persistent Volumes.
Langkah 2: Buat klaim volume persisten (PVC)
Di panel navigasi sebelah kiri halaman detail, pilih .
Di halaman Persistent Volume Claims, klik Create.
Di kotak dialog yang muncul, atur parameter dan klik Create.
Parameter
Deskripsi
Contoh
Storage Claim Type
Pilih Disk.
Disk
Name
Masukkan nama kustom untuk PVC. Untuk persyaratan format, lihat prompt di antarmuka.
diks-pvc
Allocation Mode
Pilih Existing Volume.
Existing Volume
Existing Volume
Pilih PV yang Anda buat di Langkah 1.
d-uf690053kttkprgx****, 20Gi
Total Capacity
Kapasitas penyimpanan yang dialokasikan ke pod. Nilainya tidak boleh melebihi kapasitas disk.
20Gi
Setelah PVC dibuat, Anda dapat melihatnya di halaman Persistent Volume Claims. PVC tersebut terikat ke PV (volume disk).
Langkah 3: Buat aplikasi dan pasang disk
Di panel navigasi sebelah kiri halaman detail, pilih .
Di pojok kanan atas halaman StatefulSets, klik Create from Image.
Atur parameter untuk StatefulSet dan klik Create.
Tabel berikut menjelaskan parameter utama. Atur parameter lain sesuai kebutuhan. Untuk informasi selengkapnya, lihat Create a StatefulSet.
Halaman Konfigurasi
Parameter
Deskripsi
Contoh
Basic Information
Application Name
Masukkan nama kustom untuk StatefulSet. Untuk persyaratan format, lihat prompt di antarmuka.
disk-test
Number Of Replicas
Atur jumlah replika untuk StatefulSet.
1
Container Configuration
Image Name
Masukkan alamat citra yang digunakan untuk menerapkan aplikasi.
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
Required Resources
Atur sumber daya vCPU, memori, dan penyimpanan sementara yang diperlukan.
CPU: 0.25 Core
Memory: 512 MiB
Ephemeral-Storage: Jangan diatur
Volume
Klik Add Existing Claim. Lalu, atur parameter.
Mount Source: Pilih PVC yang Anda buat di Langkah 2.
Container Path: Masukkan path kontainer tempat Anda ingin memasang disk.
Mount Source: disk-pvc
Container Path: /data
Periksa status aplikasi.
Di halaman StatefulSets, klik nama aplikasi.
Di tab Pods, pastikan pod berada dalam status Running.
Verifikasi persistensi data di disk menggunakan kubectl
StatefulSet yang dibuat pada contoh sebelumnya berisi satu pod dengan disk yang dipasang. Ketika pod ini dihapus, pod baru akan dibuat secara otomatis dan disk asli akan dipasang kembali ke pod baru tersebut. Data di disk tetap dipertahankan. Anda dapat memverifikasi persistensi data disk sebagai berikut:
Periksa data di path pemasangan disk.
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 di StatefulSet, sistem akan secara otomatis membuat pod baru.
Periksa status pod baru.
kubectl get pod -l app=nginxOutput yang diharapkan menunjukkan bahwa pod baru memiliki nama yang sama dengan pod yang dihapus. Ini adalah fitur StatefulSet.
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 27sVerifikasi bahwa pod baru telah memasang kembali disk dan data tetap utuh.
kubectl exec disk-test-0 -- ls /dataOutput yang diharapkan menunjukkan bahwa file
testtetap berada di disk.lost+found test
Referensi
Jika Anda mengalami masalah saat menggunakan volume disk, lihat FAQ about disk volumes untuk informasi pemecahan masalah.
Jika ukuran disk tidak lagi memenuhi kebutuhan Anda atau disk penuh, lihat Expand disk persistent volumes.
Untuk memantau penggunaan disk secara real-time, lihat Overview of container storage monitoring.