Volume memori non-volatile (NVM) dapat diprovision berdasarkan produk memori persisten (PMEM) yang disediakan oleh Intel. Anda dapat menggunakan NVM untuk memperluas kapasitas memori dengan biaya lebih rendah dan mengakses data persisten dengan latensi lebih rendah. NVM memberikan manfaat dari produk memori dan penyimpanan. Topik ini menjelaskan cara menggunakan volume NVM dalam klaster Container Service for Kubernetes (ACK) serta menyediakan contoh-contohnya.
Informasi latar belakang
PMEM menyediakan memori berperforma tinggi yang mendukung persistensi data. PMEM berada pada bus memori dan memungkinkan Anda mengakses data dengan cara yang sama seperti saat menggunakan dynamic random access memory (DRAM). PMEM menawarkan kecepatan dan latensi hampir sama dengan DRAM serta non-volatilitas NAND flash. Berikut adalah manfaat PMEM:
Latensi lebih rendah dibandingkan SSD flash saat mengakses data.
Throughput lebih tinggi dibandingkan penyimpanan flash.
Biaya lebih rendah dibandingkan DRAM.
Peng-caching data. Ini menyelesaikan masalah bahwa data yang ditransmisikan melalui Peripheral Component Interconnect Express (PCIe) tidak dapat di-cache di CPU.
Akses real-time ke data dan akses ultra-cepat ke dataset besar.
Data tetap tersimpan di memori setelah mesin dimatikan, memberikan manfaat yang sama seperti memori flash.
Cara menggunakan volume NVM
Anda dapat menggunakan driver Container Storage Interface (CSI) yang disediakan oleh Alibaba Cloud untuk mengelola siklus hidup perangkat NVM dalam klaster ACK. Ini memungkinkan Anda mengalokasikan, memasang, dan menggunakan sumber daya NVM dengan menggunakan klaim deklaratif.
Berikut adalah metode yang dapat digunakan untuk menggunakan volume NVM dalam klaster ACK:
PMEP-LVM (use NVM as non-intrusive block storage)
Sumber daya NVM dapat digunakan sebagai penyimpanan blok atau sistem file. Anda dapat langsung mengklaim sumber daya NVM tanpa perlu memodifikasi aplikasi Anda. Anda dapat menggunakan Logical Volume Manager (LVM) untuk memvirtualisasi sumber daya PMEM pada node menjadi grup volume (VG). Kemudian, Anda dapat membuat persistent volume claim (PVC) dengan tipe dan kapasitas yang diperlukan.
Metode ini cocok untuk aplikasi serverless, aplikasi komputasi data berlatensi rendah dan throughput tinggi, serta aplikasi periode CI/CD pendek yang memerlukan penyimpanan sementara berkecepatan tinggi. Ini memungkinkan peningkatan throughput I/O sebesar 2 hingga 10 kali. Untuk lebih banyak contoh, lihat Gunakan memori non-volatile AEP untuk meningkatkan performa baca/tulis.
PMEM-direct memory
Sumber daya NVM dapat digunakan sebagai memori langsung. Anda dapat menggunakan PMEM sebagai memori langsung dengan melakukan modifikasi tertentu pada fungsi alokasi memori berdasarkan PMEM SDK. Ini memungkinkan Anda memprovision sumber daya NVM sebagai memori langsung yang memberikan throughput dan latensi seperti memori.
Metode ini cocok untuk database in-memory seperti Redis dan SAP HANA dalam hal memori besar dan efisiensi biaya. Metode ini mengurangi biaya memori sebesar 30% hingga 50%. Untuk lebih banyak contoh, lihat Deploy instance Redis dengan volume NVM yang dipasang sebagai memori langsung.
Tabel berikut menjelaskan detail perbandingan antara metode berbeda dalam menggunakan volume NVM.
Metode | Dukungan untuk penyimpanan terfragmentasi | Dukungan untuk ekspansi online | Dukungan untuk persistensi memori | Dukungan untuk modifikasi aplikasi | Latensi (4K/RW) | Throughput (4K/RW) | Kapasitas maksimum per instance ECS tunggal (ecs.ebmre6p.26xlarge) |
PMEM-LVM | Tidak | Ya | Ya | Tidak | 10 us | 10W | 1.536 GB |
PMEM-Direct | Ya | Tidak | Tidak | Ya | 1,2 us | 56W | 768 GB |
SSD | Tidak | Ya | Ya | Tidak | 100 us | 1W | 32 TB |
Deploy komponen CSI
Pengenalan komponen CSI
Untuk menggunakan NVM dalam klaster ACK, Anda harus menerapkan komponen-komponen berikut:
CSI-Plugin: menginisialisasi perangkat PMEM dan membuat, menghapus, memasang, serta melepas volume.
CSI-Provisioner: mendeteksi dan memulai permintaan pembuatan serta penghapusan volume.
CSI-Scheduler: menjadwalkan penyimpanan (Scheduler ACK adalah komponen yang sudah diinstal sebelumnya).
Deploy komponen CSI
Tambahkan instance Elastic Compute Service (ECS) yang dilengkapi dengan sumber daya PMEM ke klaster ACK Anda. Sebagai contoh, Anda dapat menambahkan instance ECS tipe ecs.ebmre6p.26xlarge. Keluarga instans re6p yang dioptimalkan untuk memori persisten dan keluarga instans ECS Bare Metal ebmre6p yang dioptimalkan untuk memori persisten mendukung generasi pertama PMEM.
Untuk memastikan plugin CSI dapat digunakan untuk memasang sumber daya PMEM, tambahkan label berikut ke instance ECS yang dilengkapi dengan sumber daya PMEM:
pmem.csi.alibabacloud.com: mengaktifkan O&M otomatis untuk perangkat NVM.pmem.csi.alibabacloud.com/type: lvm: mengaktifkan dukungan untuk metode PMEM-LVM.pmem.csi.alibabacloud.com/type: direct: mengaktifkan dukungan untuk metode memori langsung PMEM.
Deploy plugin CSI untuk PMEM.
Deploy CSI-Plugin.
Deploy CSI-Provisioner.
Buat StorageClasses.
Contoh
Use AEP as block storage volumes
Buat PVC dengan template YAML berikut.
Untuk menjadwalkan PVC ke node NVM tertentu, tambahkan anotasi
annotations: volume.kubernetes.io/selected-node.apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.XX.XX name: pmem-lvm spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: pmem-lvmDeploy beban kerja dengan template YAML berikut:
apiVersion: apps/v1 kind: StatefulSet metadata: name: sts-lvm labels: app: busybox-lvm spec: selector: matchLabels: app: busybox-lvm serviceName: "busybox" template: metadata: labels: app: busybox-lvm spec: containers: - name: busybox image: busybox command: ["sh", "-c"] args: ["sleep 10000"] volumeMounts: - name: pmem-pvc mountPath: "/data" volumes: - name: pmem-pvc persistentVolumeClaim: claimName: pmem-lvmLihat hasilnya.
Jalankan perintah berikut untuk menanyakan PVC yang telah dibuat:
kubectl get pvcOutput yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pmem-lvm Bound disk-**** 10Gi RWO pmem-lvm 10mJalankan perintah berikut untuk menanyakan pod yang telah dibuat:
kubectl get podOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE sts-lvm-0 1/1 Running 0 10m
Jalankan perintah berikut untuk masuk ke aplikasi dan memeriksa jalur pemasangan volume:
kubectl exec -ti sts-lvm-0 -- df /dataOutput berikut menunjukkan bahwa volume penyimpanan blok telah dibuat dan dipasang ke pod aplikasi:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/pmemvgregion0-disk--**** 10255636 36888 10202364 1% /data
Use NVM as direct memory volumes
Buat PVC dengan template YAML berikut.
Untuk menjadwalkan PVC ke node NVM tertentu, tambahkan anotasi
annotations: volume.kubernetes.io/selected-node.apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: volume.kubernetes.io/selected-node: cn-zhangjiakou.192.168.XX.XX name: pmem-direct spec: accessModes: - ReadWriteOnce resources: requests: storage: 9Gi storageClassName: pmem-directDeploy beban kerja dengan template berikut:
apiVersion: apps/v1 kind: StatefulSet metadata: name: sts-direct labels: app: busybox-direct spec: selector: matchLabels: app: busybox-direct serviceName: "busybox" template: metadata: labels: app: busybox-direct spec: containers: - name: busybox image: busybox command: ["sh", "-c"] args: ["sleep 1000"] volumeMounts: - name: pmem-pvc mountPath: "/data" volumes: - name: pmem-pvc persistentVolumeClaim: claimName: pmem-directLihat hasilnya.
Jalankan perintah berikut untuk menanyakan PVC yang telah dibuat:
kubectl get pvc pmem-directOutput yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pmem-direct Bound disk-**** 9Gi RWO pmem-direct 17mJalankan perintah berikut untuk menanyakan pod yang telah dibuat:
kubectl get podOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE sts-direct-0 1/1 Running 0 17m
Jalankan perintah berikut untuk masuk ke aplikasi dan memeriksa jalur pemasangan volume:
kubectl exec -ti sts-direct-0 -- df /dataOutput berikut menunjukkan bahwa volume penyimpanan blok telah dibuat dan dipasang ke pod aplikasi:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/pmem0 9076344 36888 9023072 1% /data