在ACK環境下,聲明非易失性儲存作為Block Storage或檔案系統方式訪問,無任何應用侵入和修改,降低非易失性儲存卷的使用複雜度,讀寫效能相比SSD提升2~10倍。本文主要介紹ACK中非易失性儲存卷在低延遲高速臨時讀寫及資料密集型業務情境下的使用。
應用情境一:低延遲高速臨時讀寫
低延遲高速臨時讀寫包含以下情境:
CI/CD持續整合臨時儲存。
小檔案遍曆搜尋。
高吞吐寫日誌。
無伺服器化臨時檔案讀寫。
FIO讀寫效能測試
本文分別使用PMEM-LVM類型和SSD類型卷建立應用,然後對比測試。
部署YAML檔案聲明PMEM-LVM類型和SSD類型PVC。
PMEM-LVM類型PVC的YAML檔案
allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-pmem-lvm mountOptions: - dax parameters: lvmType: striping nodeAffinity: "true" volumeType: PMEM provisioner: localplugin.csi.alibabacloud.com reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pmem-lvm-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi storageClassName: csi-pmem-lvmSSD類型PVC的YAML檔案
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: ssd-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi storageClassName: alicloud-disk-topology部署YAML檔案掛載儲存卷和運行
fio測試。掛載PMEM-LVM儲存卷和運行FIO測試
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-pmem-lvm labels: app: pmem-lvm spec: selector: matchLabels: app: pmem-lvm template: metadata: labels: app: pmem-lvm spec: containers: - name: fio-test image: registry.cn-hangzhou.aliyuncs.com/eric-dev/sysbench:fio command: ["sh", "-c"] args: ["sleep 10000"] volumeMounts: - name: pmem mountPath: "/data" volumes: - name: pmem persistentVolumeClaim: claimName: pmem-lvm-pvc掛載SSD-PVC儲存卷和運行FIO測試
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-ssd labels: app: ssd spec: selector: matchLabels: app: ssd template: metadata: labels: app: ssd spec: containers: - name: fio-test image: registry.cn-hangzhou.aliyuncs.com/eric-dev/sysbench:fio command: ["sh", "-c"] args: ["sleep 10000"] volumeMounts: - name: ssd mountPath: "/data" volumes: - name: ssd persistentVolumeClaim: claimName: ssd-pvc通過
kubectl exec進入測試容器內部,運行fio測試PMEM-LVM卷的寫效能。mount | grep csi cd /data fio -filename=./testfile -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k預期輸出:
write: IOPS=92.0k, BW=363MiB/s (381MB/s)(8812MiB/24262msec) lat (nsec): min=2054, max=95278, avg=10544.00, stdev=1697.17通過
kubectl exec進入測試容器內部,運行fio測試SSD卷的寫效能。cd /data fio -filename=./testfile -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=10G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k預期輸出:
lat (usec): min=20, max=7168, avg=24.76, stdev=13.97 write: IOPS=37.3k, BW=146MiB/s (153MB/s)(8744MiB/60001msec)
結果分析
卷類型
IOPS
Throughput
PMEM-LVM
92000
381 MB/s
SSD
37000
153 MB/s
可見非易失性存放裝置的PMEM-LVM效能是SSD本地碟裝置的2~3倍。
應用情境二:資料密集型業務
本文通過使用雲端硬碟SSD及非易失性儲存卷方式部署MySQL資料庫檢測寫效能。
使用雲端硬碟SSD部署MySQL資料庫
建立雲端硬碟SSD資料卷。
執行以下命令,使用阿里雲CSI建立雲端硬碟SSD資料卷。
kubectl apply -f disk-mysql.yamldisk-mysql.yaml模板樣本如下所示:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-mysql spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi storageClassName: alicloud-disk-topology執行以下命令查看建立的SSD儲存卷。
kubectl get pvc disk-mysql預期輸出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE disk-mysql Bound d-*** 100Gi RWO alicloud-disk-topology 10h
使用SSD儲存卷建立MySQL資料庫執行個體。
執行以下命令建立MySQL資料庫執行個體。
kubectl apply -f mysql-normal-ssd.yamlmysql-normal-ssd.yaml模板樣本如下所示:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: mysql-normal labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: mysql strategy: type: Recreate template: metadata: labels: app: wordpress tier: mysql spec: hostNetwork: true containers: - image: mysql:5.6 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql mountPath: /var/lib/mysql volumes: - name: mysql persistentVolumeClaim: claimName: disk-mysql --- apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: username: YWRt**** password: YWRt****執行以下命令查看建立的MySQL資料庫執行個體。
kubectl get pod | grep mysql-normal預期輸出:
NAME READY STATUS RESTARTS AGE mysql-normal-**** 1/1 Running 0 10h
使用非易失性儲存卷建立MySQL資料庫
建立PMEM-LVM儲存卷。
執行以下命令使用阿里雲CSI建立PMEM-LVM儲存卷。
kubectl apply -f csi-pmem-lvm.yamlcsi-pmem-lvm.yaml模板樣本如下所示:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pmem-mysql spec: accessModes: - ReadWriteOnce resources: requests: storage: 100Gi storageClassName: csi-pmem-lvm執行以下命令查看建立的PMEM-LVM儲存卷。
kubectl get pvc pmem-mysql預期輸出:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pmem-mysql Bound d-**** 100Gi RWO csi-pmem-lvm 10h
在掛載的PMEM儲存卷建立MySQL資料庫。
執行以下命令在掛載的PMEM儲存卷建立MySQL資料庫。
kubectl apply -f mysql-normal-pmem.yamlmysql-normal-pmem.yaml模板樣本如下所示:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: mysql-normal labels: app: wordpress spec: selector: matchLabels: app: wordpress tier: mysql strategy: type: Recreate template: metadata: labels: app: wordpress tier: mysql spec: hostNetwork: true nodeName: <NODE name of worker node> containers: - image: mysql:5.6 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql mountPath: /var/lib/mysql volumes: - name: mysql persistentVolumeClaim: claimName: pmem-mysql --- apiVersion: v1 kind: Secret metadata: name: mysql-pass type: Opaque data: username: YWRt**** password: YWRt****執行以下命令查看建立的MySQL資料庫執行個體。
kubectl get pod | grep mysql-normal預期輸出:
NAME READY STATUS RESTARTS AGE mysql-normal-**** 1/1 Running 0 10h
資料庫寫效能測試
在Pod中執行以下命令進行資料庫效能壓測。
sysbench /root/sysbench/point_select.lua run --db-driver=mysql --report-interval=1
--mysql-table-engine=innodb --oltp-table-size=10000 --oltp-tables-count=32 --oltp-test-mode=complex
--time=100 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=admin
--mysql-db=sbtest --oltp-read-only=on --oltp-simple-ranges=0 --oltp-sum-ranges=0
--oltp-order-ranges=0 --oltp-distinct-ranges=0 --oltp-dist-type=uniform --warmup-time=300
--max-time=30 --max-requests=0 --percentile=99 --num-threads=150測試結果
卷類型 | Insert輸送量(次/秒) |
SSD | 49812 |
PMEM-LVM | 122156 |
可見相比於SSD,使用非易失性儲存的資料庫寫入效能約為其2.5倍。