原文地址:https://toutiao.io/posts/nmflsd/preview
大多數(shù)開發(fā)人員都認(rèn)為在部署集群時(shí)選擇合適的存儲技術(shù)極為重要岳锁。但是,在 Kubernetes 這片市場上咳燕,人們對于存儲技術(shù)的選擇并沒有一個標(biāo)準(zhǔn)的答案乒躺。本文將介紹 Kubernetes 中常用的 6 種存儲,分析它們的使用場景和優(yōu)缺點(diǎn)宪肖,并對它們進(jìn)行性能測試,找出哪種存儲解決方案才是最理想的選擇么介。
存儲技術(shù)的選擇在很大程度上取決于工程師們要運(yùn)行的工作負(fù)載類型蜕衡。如果你正在使用 Kubernetes慨仿,你可能偏向于通過動態(tài)配置使用 volume 來進(jìn)行塊存儲。對于裸機(jī)集群镰吆,你就需要為你的用例選擇最為合適的技術(shù),并將其集成到你的硬件上万皿。
此外,例如 AKS蹬耘、EKS 和 GKE 等公有云可以開箱即用并帶有塊存儲汽摹,但這并不意味著它們是最好的選擇刻诊。在許多情況下,默認(rèn)公有云存儲類的故障轉(zhuǎn)移時(shí)間較長赃承。例如瞧剖,在 AWS EBS 中存在一個故障的 VM可免,附在此 VM Pod 上的 volume 需要 5 分鐘以上的時(shí)間才能在另一個節(jié)點(diǎn)上重新聯(lián)機(jī)。但是捉撮,像 Portworx 和 OpenEBS 此類云原生存儲就可以很快解決這種問題妇垢。
本文的目的就是尋找在 Kubernetes 中最常用的存儲解決方案,并進(jìn)行基本性能比較灼舍。本次測試使用以下存儲后端對 Azure AKS 執(zhí)行所有測試:
- Azure 原生 StorageClass:Azure 高級版骑素;
- 將 AWS cloud volume 映射到實(shí)例中:Azure hostPath,附帶 Azure 托管磁盤末捣;
- 由 Rook 管理的 Ceph;
- 由 Heketi 管理的 Gluster箩做;
- 帶有 cStor 后端的 OpenEBS;
- Portworx筐摘。
測試結(jié)果
*注:請將結(jié)果作為存儲選擇期間的標(biāo)準(zhǔn)之一,但不要僅根據(jù)本文的數(shù)據(jù)做出最終判斷咖熟。
在描述過程之前圃酵,我們先總結(jié)一下最終結(jié)論馍管。如果我們忽略本地 Azure pvc 或 hostPath郭赐,測試結(jié)果是:
- Portworx 是 AKS 最快的容器存儲;
- Ceph 是 HW 集群的最佳開源后端存儲捌锭,但對于公有云观谦,它的操作復(fù)雜性較高桨菜;
- OpenEBS 是一個很棒的概念倒得,但需要更多的后端優(yōu)化(這個項(xiàng)目正在優(yōu)化中)霞掺。
那么這究竟是為什么呢?讓我們從每個后端存儲介紹安裝說明開始缠劝,詳述 AKS 測試的具體過程酷麦!
各存儲解決方案的安裝及優(yōu)缺點(diǎn)
*注:本節(jié)不含 Azure hostpath 的安裝介紹沃饶。
Azure 原生 Storage Class
本文將把 Azure 原生 Storage Class 作為所有測試的基線轻黑。Azure 會動態(tài)創(chuàng)建托管磁盤并將其映射到 VM 中氓鄙,其中 Kubernetes 為 Pod 的 volume抖拦。
如果只是為了使用它态罪,你沒有必要再做其他事情复颈。當(dāng)你配置新的 AKS 集群時(shí)耗啦,它會自動預(yù)定義為“default”和“managed-premium”兩種存儲類帜讲。Premium 類將使用基于 SSD 的高性能和低延遲磁盤似将。
$ kubectl get storageclasses
NAME PROVISIONER AGE
default (default) kubernetes.io/azure-disk 8m
managed-premium kubernetes.io/azure-disk 8m
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
dbench-pv-claim Bound pvc-e7bd34a4-1dbd-11e9-8726-ae508476e8ad 1000Gi RWO managed-premium 10s
$ kubectl get po
NAME READY STATUS RESTARTS AGE
dbench-w7nqf 0/1 ContainerCreating 0 29s
優(yōu)點(diǎn):
- AKS 上的默認(rèn)值無需執(zhí)行任何操作玩郊。
弊端:
- 故障轉(zhuǎn)移方案非常慢:有時(shí)需要將近 10 分鐘的時(shí)間才能將 volume 重新連接到不同節(jié)點(diǎn)上的 Pod。
2.Ceph Rook
Ceph Rook 需要設(shè)計(jì)特定的硬件配置兴溜,根據(jù)數(shù)據(jù)類型生成 pg 組,配置日志 SSD 分區(qū)(在 bluestore 之前)并定義 crush 映射诗宣。它是一種處理整個存儲集群安裝的簡潔方法。
在 AKS 上安裝 Ceph Rook :
使用 Ceph Rook 快速入門指南[1]篮灼;
配置特定于 AKS 的 FLEXVOLUME_DIR_PATH诅诱,因?yàn)樗鼈兪褂?/etc/kubernetes/volumeplugins/ 而不是默認(rèn)的 Ubuntu /usr/libexec娘荡。沒有這個改變炮沐,pvc 將無法通過 kubelet 安裝央拖。
diff --git a/cluster/examples/kubernetes/ceph/operator.yaml b/cluster/examples/kubernetes/ceph/operator.yaml
index 73cde2e..33f45c8 100755--- a/cluster/examples/kubernetes/ceph/operator.yaml
+++ b/cluster/examples/kubernetes/ceph/operator.yaml
@@ -431,8 +431,8 @@ spec:
# - name: AGENT_MOUNT_SECURITY_MODE
# value: "Any"
# Set the path where the Rook agent can find the flex volumes
- # - name: FLEXVOLUME_DIR_PATH
- # value: "<PathToFlexVolumes>"+ - name: FLEXVOLUME_DIR_PATH
+ value: "/etc/kubernetes/volumeplugins"
# Set the path where kernel modules can be found
# - name: LIB_MODULES_DIR_PATH
# value: "<PathToLibModules>"
- 指定想在 deviceFilter 中使用的設(shè)備(附加磁盤始終在 /dev/sdc 上);
diff --git a/cluster/examples/kubernetes/ceph/cluster.yaml b/cluster/examples/kubernetes/ceph/cluster.yaml
index 48cfeeb..0c91c48 100755--- a/cluster/examples/kubernetes/ceph/cluster.yaml
+++ b/cluster/examples/kubernetes/ceph/cluster.yaml
@@ -227,7 +227,7 @@ spec:
storage: # cluster level storage configuration and selection
useAllNodes: trueuseAllDevices: false- deviceFilter:
+ deviceFilter: "^sdc"location:
Config:
- 安裝完成后遏餐,使用以下配置創(chuàng)建 Ceph 塊池和存儲類:
apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:
name: replicapool
namespace: rook-ceph
spec:
failureDomain: host
replicated:
size: 3
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: ceph.rook.io/block
parameters:
blockPool: replicapool
clusterNamespace: rook-ceph
fstype: xfs
reclaimPolicy: Retain
- 通過以下部署工具箱檢查狀態(tài):
ceph status
cluster:
id: bee70a10-dce1-4725-9285-b9ec5d0c3a5e
health: HEALTH_OK
services:
mon: 3 daemons, quorum c,b,a
mgr: a(active)
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 3.0 TiB / 3.0 TiB avail
pgs:
[root@aks-agentpool-27654233-0 /]#
[root@aks-agentpool-27654233-0 /]#
[root@aks-agentpool-27654233-0 /]# ceph osd status
+----+--------------------------+-------+-------+--------+---------+--------+---------+-----------+
| id | host | used | avail | wr ops | wr data | rd ops | rd data | state |
+----+--------------------------+-------+-------+--------+---------+--------+---------+-----------+
| 0 | aks-agentpool-27654233-0 | 1025M | 1021G | 0 | 0 | 0 | 0 | exists,up |
| 1 | aks-agentpool-27654233-1 | 1025M | 1021G | 0 | 0 | 0 | 0 | exists,up |
| 2 | aks-agentpool-27654233-2 | 1025M | 1021G | 0 | 0 | 0 | 0 | exists,up |
+----+--------------------------+-------+-------+--------+---------+--------+---------+-----------+
優(yōu)點(diǎn):
- 它是一個可以在大型生產(chǎn)環(huán)境中運(yùn)行的 Robust 存儲;
- Rook 使生命周期管理變得更加簡單粹庞。
弊端:
- 復(fù)雜庞溜;它不太適合在公有云中運(yùn)行又官,建議只在具有正確配置的 HW 集群上運(yùn)行六敬。
3.GlusterFS Heketi
GlusterFS 是一個的開源存儲解決方案外构。Heketi 是 GlusterFS RESTful volume 的管理界面典勇。它提供了一種便捷的方式讓 GlusterFS 具有動態(tài)配置的能力割笙。如果沒有這種訪問權(quán)限伤溉,用戶就必須手動創(chuàng)建 GlusterFS volume 并將其映射到 Kubernetes pv 上。
*注:關(guān)于 GlusterFS 的更多信息走净,見:https://docs.gluster.org/en/latest/Install-Guide/Overview/
這里使用了 Heketi 快速入門指南[2]進(jìn)行安裝:
根據(jù)樣本 1 創(chuàng)建了一個包含磁盤和主機(jī)名的拓?fù)湮募?/p>
Heketi 主要是在基于 RHEL 的操作系統(tǒng)上開發(fā)和測試的伏伯。在 AKS 上測試時(shí),測試人員曾遇到了 Ubuntu 主機(jī)內(nèi)核模塊路徑不正確的問題弄唧;
以下是修復(fù)該問題的 PR:
+++ b/deploy/kube-templates/glusterfs-daemonset.yaml
@@ -67,7 +67,7 @@ spec:
mountPath: "/etc/ssl"readOnly: true- name: kernel-modules
- mountPath: "/usr/lib/modules"+ mountPath: "/lib/modules"readOnly: truesecurityContext:
capabilities: {}
@@ -131,4 +131,4 @@ spec:
path: "/etc/ssl"- name: kernel-modules
hostPath:
- path: "/usr/lib/modules"+ path: "/lib/modules"
- 測試人員在 AKS 上遇到的另一個問題是沒有空磁盤,于是他們使用 wipefs 清理 glusterfs 的磁盤(這個磁盤以前沒有用于其他用途)澄干;
wipefs -a /dev/sdc
/dev/sdc: 8 bytes were erased at offset 0x00000218 (LVM2_member): 4c 56 4d 32 20 30 30 31
- 運(yùn)行 gk-deploy -g -t topology.json 命令,它在由 Heketi 控制器控制的每個節(jié)點(diǎn)上部署了 glusterfs pod疾掰。
root@aks-agentpool-20273348-0:~# kubectl get po -o wide
NAME READY STATUS RESTARTS IP NODE NOMINATED NODE
glusterfs-fgc8f 1/1 Running 0 10.0.1.35 aks-agentpool-20273348-1glusterfs-g8ht6 1/1 Running 0 10.0.1.4 aks-agentpool-20273348-0glusterfs-wpzzp 1/1 Running 0 10.0.1.66 aks-agentpool-20273348-2heketi-86f98754c-n8qfb 1/1 Running 0 10.0.1.69 aks-agentpool-20273348-2
同時(shí),動態(tài)配置問題也會對測試造成一定影響拂檩。對于 Kubernetes 控制平面,Heketi restURL 是不可用的望抽。測試人員嘗試?yán)?kube dns record煤篙、Pod IP 和 svc IP 來解決這個問題,但是都沒有奏效鸠窗。為此,他們最后選擇通過 Heketi CLI 手動創(chuàng)建 volume丙猬。
root@aks-agentpool-20273348-0:~# export HEKETI_CLI_SERVER=http://10.0.1.69:8080root@aks-agentpool-20273348-0:~# heketi-cli volume create --size=10 --persistent-volume --persistent-volume-endpoint=heketi-storage-endpoints | kubectl create -f -
persistentvolume/glusterfs-efb3b155 created
root@aks-agentpool-20273348-0:~# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
glusterfs-efb3b155 10Gi RWX Retain Available 19s
- 將現(xiàn)有的 PV 映射到 dbench 工具的 PVC 上。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: glusterfs-efb3b155
spec:
accessModes:
- ReadWriteMany
storageClassName: ""resources:
requests:
storage: 10Gi
volumeName: glusterfs-efb3b155
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
glusterfs-efb3b155 Bound glusterfs-efb3b155 10Gi RWX 36m
以下是在 Kubernetes 上安裝 Heketi Gluster 的更多內(nèi)容:
gluster volume info vol_efb3b15529aa9aba889d7900f0ce9849
Volume Name: vol_efb3b15529aa9aba889d7900f0ce9849
Type: Replicate
Volume ID: 96fde36b-e389-4dbe-887b-baae32789436
Status: Started
Snapshot Count: 0Number of Bricks: 1 x 3 = 3Transport-type: tcp
Bricks:
Brick1: 10.0.1.66:/var/lib/heketi/mounts/vg_5413895eade683e1ca035760c1e0ffd0/brick_cd7c419bc4f4ff38bbc100c6d7b93605/brick
Brick2: 10.0.1.35:/var/lib/heketi/mounts/vg_3277c6764dbce56b5a01426088901f6d/brick_6cbd74e9bed4758110c67cfe4d4edb53/brick
Brick3: 10.0.1.4:/var/lib/heketi/mounts/vg_29d6152eeafc57a707bef56f091afe44/brick_4856d63b721d794e7a4cbb4a6f048d96/brick
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
heketi ClusterIP 192.168.101.75 <none> 8080/TCP 5h
heketi-storage-endpoints ClusterIP 192.168.103.66 <none> 1/TCP 5h
root@aks-agentpool-20273348-0:~# kubectl get endpoints
NAME ENDPOINTS AGE
heketi 10.0.1.69:8080 5h
heketi-storage-endpoints 10.0.1.35:1,10.0.1.4:1,10.0.1.66:1 5h
kubernetes 172.31.22.152:443 1d
root@aks-agentpool-20273348-0:~# kubectl get endpoints heketi-storage-endpoints -o yaml
apiVersion: v1
kind: Endpoints
metadata:
creationTimestamp: 2019-01-29T15:14:28Z
name: heketi-storage-endpoints
namespace: defaultresourceVersion: "142212"
selfLink: /api/v1/namespaces/default/endpoints/heketi-storage-endpoints
uid: 91f802eb-23d8-11e9-bfcb-a23b1ec87092
subsets:
- addresses:
- ip: 10.0.1.35
- ip: 10.0.1.4
- ip: 10.0.1.66
ports:
- port: 1
protocol: TCP
優(yōu)點(diǎn):
- 有實(shí)踐經(jīng)驗(yàn)的存儲解決方案揪垄;
- 比 Ceph 輕量饥努。
弊端:
- Heketi 不是為 Kubernetes 專屬設(shè)計(jì)的驾诈,它更適用于硬件集群;
- 它不是為“結(jié)構(gòu)化數(shù)據(jù)”專屬設(shè)計(jì)的(如 SQL 數(shù)據(jù)庫)闯两。但是,用戶可以使用 Gluster 的備份和還原數(shù)據(jù)庫邦投。
4.OpenEBS
OpenEBS 代表了一種新的 CAS(Container Attached Storage)概念,屬于云原生存儲類別。它是基于單個微服務(wù)的存儲控制器和基于多個微服務(wù)的存儲復(fù)制品绿店。
作為開源項(xiàng)目,目前它提供 2 個后端:Jiva 和 cStor转培。cStor 作為控制器惨寿,它的副本部署在一個 namespace(安裝 openebs 的 namespace)中,也可以說它采用的是原始磁盤而不是格式化分區(qū)蕉拢。每個 Kubernetes volume 都有自己的存儲控制器测萎,它可以在節(jié)點(diǎn)可用存儲容量范圍內(nèi)進(jìn)行擴(kuò)展份乒。
在 AKS 上安裝它非常簡單:
- 必須連接所有 Kubernetes 節(jié)點(diǎn)的控制臺并安裝 iSCSI,因?yàn)樗褂?iSCSI 協(xié)議連接帶 pod 的 Kubernetes 節(jié)點(diǎn)和存儲控制器;
apt-get update
apt install -y open-iscsi
- 將單個 YAML 定義應(yīng)用于 Kubernetes 集群;
kubectl apply -f https://openebs.github.io/charts/openebs-operator-0.8.0.yaml
- 下一步县爬,OpenEBS 控制器會在底層節(jié)點(diǎn)上發(fā)現(xiàn)用戶的所有磁盤斩狱。但你必須手動識別并將它附加到 AWS 托管磁盤上所踊;
kubectl get disk
NAME AGE
disk-184d99015253054c48c4aa3f17d137b1 5m
disk-2f6bced7ba9b2be230ca5138fd0b07f1 5m
disk-806d3e77dd2e38f188fdaf9c46020bdc 5m
- 將這些磁盤添加到自定義 Kubernetes 資源 StoragePoolClaim 中乍赫,該資源將被標(biāo)準(zhǔn) StorageClass 引用。
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: openebs-custom
annotations:
openebs.io/cas-type: cstor
cas.openebs.io/config: |
- name: StoragePoolClaim
value: "cstor-disk"provisioner: openebs.io/provisioner-iscsi
---
apiVersion: openebs.io/v1alpha1
kind: StoragePoolClaim
metadata:
name: cstor-disk
spec:
name: cstor-disk
type: disk
maxPools: 3poolSpec:
poolType: striped
disks:
diskList:
- disk-2f6bced7ba9b2be230ca5138fd0b07f1
- disk-806d3e77dd2e38f188fdaf9c46020bdc
- disk-184d99015253054c48c4aa3f17d137b1
優(yōu)點(diǎn):
- 開源叠殷;
- Maya 在資源使用可視化方面做得很好改鲫。用戶可以在 Kubernetes 集群中輕松部署多個服務(wù),并輕松設(shè)置監(jiān)視和日志記錄林束,以收集集群中所有重要信息像棘;
- OpenEBS 背后的社區(qū):Slack 團(tuán)隊(duì)非常樂于助人,如果你主動詢問壶冒,他們可能會幫你解決很多問題缕题。
弊端:
- 不成熟:OpenEBS 是一個相當(dāng)新的項(xiàng)目,尚未達(dá)到穩(wěn)定版本胖腾。核心團(tuán)隊(duì)仍在進(jìn)行后端優(yōu)化烟零;
- Kubelet 和存儲控制器之間的 iSCSI 連接由 Kubernetes 服務(wù)實(shí)現(xiàn),這種連接方式在 CNI 插件中可能會出現(xiàn)一些問題(如 Tungsten Fabric)咸作;
- 需要在 Kubernetes 節(jié)點(diǎn)上安裝其他軟件(iSCSI)锨阿,這使得它在托管 Kubernetes 集群的情況下變得不切實(shí)際。
*注:OpenEBS 團(tuán)隊(duì)幫忙修改的測試用例場景记罚,見:https://github.com/kmova/openebs/tree/fio-perf-tests/k8s/demo/dbench
5.Portworx
最后為大家介紹一種比較新穎的解決方案墅诡。
Portworx 是另一個專為 Kubernetes 設(shè)計(jì)的云原生存儲,專注于高度分散的環(huán)境桐智。它是一個主機(jī)可尋址存儲书斜,每個 volume 都直接映射到它所連接的主機(jī)上。它根據(jù)應(yīng)用程序 I/O 的類型提供自動調(diào)整酵使。不幸的是荐吉,它不是開源的存儲方案。然而口渔,它免費(fèi)提供了 3 個節(jié)點(diǎn)可進(jìn)行試用样屠。
*注:關(guān)于 Portworx 更多信息,見:https://portworx.com/makes-portworx-unique/
在 AKS 上安裝 Portworx 很容易缺脉,可以使用 Kubernetes 規(guī)格生成器:
- Kubernetes v1.11.4 中的 etcd 選擇了 Portworx 托管的方式來簡化安裝痪欲;
- 如果你使用的是 Azure CNI,你就必須將數(shù)據(jù)網(wǎng)絡(luò)接口修改為 azure0攻礼。否則 Portworx 將使用 docker bridge 而不是 VM 接口的 IP 地址业踢;
- 網(wǎng)站生成器為集群提供了渲染的 Kubernetes YAML 清單;
- 在 bootstrap 之后礁扮,按照 Kubernetes 節(jié)點(diǎn)運(yùn)行 Portworx pod;
root@aks-agentpool-20273348-0:~# kubectl get pods -o wide -n kube-system -l name=portworx
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
portworx-g9csq 1/1 Running 0 14m 10.0.1.66 aks-agentpool-20273348-2 <none>
portworx-nt2lq 1/1 Running 0 14m 10.0.1.4 aks-agentpool-20273348-0 <none>
portworx-wcjnx 1/1 Running 0 14m 10.0.1.35 aks-agentpool-20273348-1 <none>
- 創(chuàng)建具有高優(yōu)先級和 3 個副本的存儲類知举,而后準(zhǔn)備 Kubernetes pvc 瞬沦。
root@aks-agentpool-20273348-0:~# kubectl get storageclass -o yaml portworx-sc
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
creationTimestamp: 2019-01-28T21:10:28Z
name: portworx-sc
resourceVersion: "55332"selfLink: /apis/storage.k8s.io/v1/storageclasses/portworx-sc
uid: 23455e40-2341-11e9-bfcb-a23b1ec87092
parameters:
priority_io: high
repl: "3"provisioner: kubernetes.io/portworx-volume
reclaimPolicy: Delete
volumeBindingMode: Immediate
優(yōu)點(diǎn):
- 易于部署:具有詳細(xì)配置的 ebsite 配置器;
- AKS 集群的配置程序雇锡,無需任何額外步驟來充當(dāng) Ceph 或 GlusterFS逛钻;
- 云原生存儲:它可以在 HW 集群和公有云上運(yùn)行;
- 存儲感知服務(wù)類(COS)和應(yīng)用程序感知 I/O 調(diào)優(yōu)锰提。
弊端:
- 封閉源:專有供應(yīng)商解決方案曙痘。
AKS 測試環(huán)境
在本次測試中,測試人員配置了具有 3 個 VM 的基本 Azure AKS 集群立肘。為了能夠連接托管的 Premium SSD边坤,測試人員必須使用 E 類型大小的 VM。因此他們選擇了 Standard_E2s_v3谅年,只有 2 個 vCPU 和 16GB RAM茧痒。
每個 AKS 集群都會自動配置第二個資源組(RG)MC_ <name>,你可以在其中找到所有 VM踢故、NIC 文黎。在 RG 內(nèi)部惹苗,測試人員創(chuàng)建了 3 個 1TB 高級 SSD 托管磁盤并手動將它們連接到每個 VM 中殿较。
它允許我在每個專用于測試的實(shí)例中獲得 1TB 的空磁盤。據(jù) Azure 稱桩蓉,它的性能可以在 5000 IOPS 和 200 MB/s 吞吐量之間淋纲,具體取決于 VM 和磁盤大小。
性能結(jié)果
重要說明:單個存儲性能測試的結(jié)果是無法單獨(dú)評估的院究,它們必須相互比較才能顯示出差距洽瞬。測試的方法有很多種,下面是其中較為簡單的一種方法业汰。
為了進(jìn)行測試伙窃,測試人員決定使用名為 Dbench 的負(fù)載測試器。它是 Pod 的 Kubernetes 部署清單 , 同時(shí)它也是運(yùn)行 FIO 的地方样漆,并且?guī)в?Flexible IO Tester 等 8 個測試用例为障。
測試在 Docker 鏡像的入口點(diǎn)指定:
- 隨機(jī)讀/寫帶寬;
- 隨機(jī)讀/寫 IOPS放祟;
- 讀/寫延遲鳍怨;
- 順序讀/寫;
- 混合讀/寫 IOPS跪妥。
注:所有測試的完整測試輸出鞋喇,見:
https://gist.github.com/pupapaik/76c5b7f124dbb69080840f01bf71f924
隨機(jī)讀/寫帶寬
隨機(jī)讀取測試表明,GlusterFS眉撵、Ceph 和 Portworx 在讀取時(shí)的性能比 AWS 本地磁盤上的主機(jī)路徑快好幾倍侦香,因?yàn)樗鼈冏x取的是緩存落塑。GlusterFS 寫入速度最快,它與本地磁盤幾乎達(dá)到了相同的值鄙皇。
隨機(jī)讀/寫 IOPS
隨機(jī) IOPS 顯示 Portworx 和 Ceph 效果最佳芜赌。Portworx 在寫入時(shí)的 IOPS 與本機(jī) Azure pvc 幾乎相同,這非常好伴逸。
讀/寫延遲
延遲測試返回了有趣的結(jié)果缠沈,因?yàn)楸緳C(jī) Azure pvc 比大多數(shù)其他測試存儲都慢。Portworx 和 Ceph 實(shí)現(xiàn)了最佳讀取速度错蝴。但是對于寫入洲愤,GlusterFS 比 Ceph 更好。與其他存儲相比顷锰,OpenEBS 延遲非常高柬赐。
順序讀/寫
順序讀/寫測試顯示與隨機(jī)測試類似的結(jié)果,但 Ceph 的讀取是 GlusterFS 的 2 倍多官紫。除了表現(xiàn)非常差的 OpenEBS 之外肛宋,寫入結(jié)果幾乎都在同一級別上。
混合讀/寫 IOPS
最后一個測試用例驗(yàn)證了混合讀/寫 IOPS束世,即使在 mixed write 上酝陈,Portworx 和 Ceph 也提供了比原生 Azure pvc 更好的 IOPS。
以上就是所有測試結(jié)果毁涉,希望這篇文章對你有所幫助沉帮。
--
參考文獻(xiàn):
[1]https://github.com/rook/rook/blob/master/Documentation/ceph-quickstart.md#ceph-storage-quickstart
[2]https://github.com/gluster/gluster-kubernetes/blob/master/docs/setup-guide.md#deployment