[轉(zhuǎn)]K8S 六種存儲解決方案的性能比較測試

原文地址: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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贫堰,隨后出現(xiàn)的幾起案子穆壕,更是在濱河造成了極大的恐慌,老刑警劉巖其屏,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喇勋,死亡現(xiàn)場離奇詭異,居然都是意外死亡偎行,警方通過查閱死者的電腦和手機(jī)川背,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睦优,“玉大人渗常,你說我怎么就攤上這事『古蹋” “怎么了皱碘?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隐孽。 經(jīng)常有香客問我癌椿,道長健蕊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任踢俄,我火速辦了婚禮缩功,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘都办。我一直安慰自己嫡锌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布琳钉。 她就那樣靜靜地躺著势木,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歌懒。 梳的紋絲不亂的頭發(fā)上啦桌,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機(jī)與錄音及皂,去河邊找鬼甫男。 笑死,一個胖子當(dāng)著我的面吹牛验烧,可吹牛的內(nèi)容都是我干的板驳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼噪窘,長吁一口氣:“原來是場噩夢啊……” “哼笋庄!你這毒婦竟也來了效扫?” 一聲冷哼從身側(cè)響起倔监,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菌仁,沒想到半個月后浩习,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡济丘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年谱秽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摹迷。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡疟赊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出峡碉,到底是詐尸還是另有隱情近哟,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布鲫寄,位于F島的核電站吉执,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏戳玫。R本人自食惡果不足惜熙掺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咕宿。 院中可真熱鬧币绩,春花似錦、人聲如沸府阀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肌似。三九已至费就,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間川队,已是汗流浹背力细。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留固额,地道東北人眠蚂。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像斗躏,于是被迫代替她去往敵國和親逝慧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354