Skip to main content

Kasten k10 实战系列 04 - 利用 Kubestr 进行云原生存储能力评

  • August 6, 2021
  • 0 comments
  • 147 views

mars.zhang
Forum|alt.badge.img

Kasten k10 实战系列 04 - 利用 Kubestr 进行云原生存储能力评测

1. 前言

随着 Kubernetes 在企业 IT 基础架构体系中的采用日渐增多,可供用户使用的持久化存储产品也越来越多。CSI(容器存储接口)的引入使存储提供商能够轻松开发驱动程序。事实上今天有大约 100 种不同的 CSI 驱动程序可用,与现有的 In-Tree 存储提供程序一起,这使得存储的选型变得越发困难。如何为基础架构选择理想的存储提供商,已经成为了运维主管们的一个新型挑战。而传统的存储选型方法对于云原生架构又不一定合适,这时 Kubestr 就应运而生了。

文章目录

Kasten k10 实战系列 04 - 利用 Kubestr 进行云原生存储能力评测

  1. 前言
  2. Kubestr 是什么?
  3. Kubestr 能做什么? -
  4. 如何使用 Kubestr?

    • 4.1 Kubestr 的安装
    • 4.2 获取当前存储配置
    • 4.3 验证存储快照功能
    • 4.3 进行存储性能测试
  5. 总结
  6. 后记:拥抱开源,使自己成长

Kasten 实战系列导航

2. Kubestr 是什么?

Kubestr 是一组用于发现、验证和评估 kubernetes 存储选项的工具。简单来讲,用户可以利用 Kubestr 来给自己正在使用的云原生存储跑分,以评估其是否达到了所需要的标准。Kubestr 是继备份解决方案 Kopia 和 Kubernetes 有状态数据管理框架 Kanister 之后,Kasten 发布的第三个主要开源项目,用于支持在 Kubernetes 环境中运行的有状态应用程序的存储选型、功能验证和存储性能评估。

Kubestr 介绍
https://kubestr.io/

3. Kubestr 能做什么?

Kubestr 专注于生产存储的验证和评估,使企业快速找到与适配企业工作负载需要的存储解决方案。对于有状态的应用,这一点尤为重要。利用 Kubestr, K8S 操作员可以轻松的完成以下工作:

  • 明确配置 明确 K8S 集群中存在的各种存储类及其选项。
  • 验证功能 验证 K8S 存储选项,尤其是快照功能是否配置正确。
  • 评估性能 使用存储基准测试工具(如:FIO)对存储进行评估。

4. 如何使用 Kubestr?

4.1 Kubestr 的安装

下载 Kubestr, 从如下链接可以直接下载您所需要的 Kubestr 版本

https://github.com/kastenhq/kubestr/releases/tag/v0.4.17

20210628183141

用 wget 可以直接获取 Kubestr 软件包, 并解包

# wget https://github.com/kastenhq/kubestr/releases/download/v0.4.17/kubestr-v0.4.17-linux-amd64.tar.gz

# tar -zxvf kubestr-v0.4.17-linux-amd64.tar.gz
LICENSE
README.md
kubestr

4.2 获取当前存储配置

目前在我们的环境中,有CBS 和 CBS CSI 与 kubectl 命令一致, 同时可以看到 CBS 存储类还是 in-tree 模式的。

# kubectl get sc   
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
cbs cloud.tencent.com/qcloud-cbs Delete Immediate false 3d15h
cbs-csi (default) com.tencent.cloud.csi.cbs Delete WaitForFirstConsumer true 3d15h

执行 ./kubestr 应用程序,您将得到如下信息,可以看到 kubestr 已经将所有的存储类型列表,并将配置进行了罗列。

# ./kubestr 

**************************************
_ ___ _ ___ ___ ___ _____ ___
| |/ / | | | _ ) __/ __|_ _| _ \
| ' <| |_| | _ \ _|\__ \ | | | /
|_|\_\\___/|___/___|___/ |_| |_|_\

Explore your Kubernetes storage options
**************************************
Kubernetes Version Check:
Valid kubernetes version (v1.18.4-tke.11) - OK

RBAC Check:
Kubernetes RBAC is enabled - OK

Aggregated Layer Check:
The Kubernetes Aggregated Layer is enabled - OK

Available Storage Provisioners:

cloud.tencent.com/qcloud-cbs:
Unknown driver type.

Storage Classes:
* cbs

To perform a FIO test, run-
./kubestr fio -s <storage class>

com.tencent.cloud.csi.cbs:
Missing CSIDriver Object. Required by some provisioners.
This is a CSI driver!
(The following info may not be up to date. Please check with the provider for more information.)
Provider: Tencent Cloud Block Storage
Website: https://github.com/TencentCloud/kubernetes-csi-tencentcloud
Description: A Container Storage Interface (CSI) Driver for Tencent Cloud Block Storage
Additional Features: Snapshot

Storage Classes:
* cbs-csi
Volume Snapshot Classes:
* cbs-snapclass
* k10-clone-cbs-snapclass

To perform a FIO test, run-
./kubestr fio -s <storage class>

To test CSI snapshot/restore functionality, run-
./kubestr csicheck -s <storage class> -v <volume snapshot class>

4.3 验证快照功能

由于 Kubestr 会在验证 Snapshot 的过程中创建存储组件,比如:1 GB 的 PVC,但由于上文提到的原因,即 腾讯云 TKE 并不允许客户创建低于 10 GB 的 PVC ,为了给大家进行完整的介绍。我们将这部分测试挪到任何一个可用的环境都可以,比如: Mars 笔记本中的 minikube.

请确保以下 Addon 已经 启用

$ minikube addons list 

csi-hostpath-driver enabled
volumesnapshots enabled

如果没有启动,可以用以下的命令,启用 volumesnapshots 与 csi-hostpath-driver

$ minikube addons enable volumesnapshots  
▪ Using image k8s.gcr.io/sig-storage/snapshot-controller:v4.0.0
The 'volumesnapshots' addon is enabled
$ minikube addons enable csi-host path-driver
▪ Using image k8s.gcr.io/sig-storage/csi-attacher:v3.1.0
▪ Using image k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.0.1
▪ Using image k8s.gcr.io/sig-storage/csi-snapshotter:v4.0.0
▪ Using image k8s.gcr.io/sig-storage/csi-external-health-monitor-controller:v0.2.0
▪ Using image k8s.gcr.io/sig-storage/livenessprobe:v2.2.0
▪ Using image k8s.gcr.io/sig-storage/csi-resizer:v1.1.0
▪ Using image k8s.gcr.io/sig-storage/csi-provisioner:v2.1.0
▪ Using image k8s.gcr.io/sig-storage/csi-external-health-monitor-agent:v0.2.0
▪ Using image k8s.gcr.io/sig-storage/hostpathplugin:v1.6.0
Verifying csi-hostpath-driver addon...
The 'csi-hostpath-driver' addon is enabled

接下来,我们用 Kubestr 验证快照功能是否已经生效

# 首先让我们检查存储类 和 快照类
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
csi-hostpath-sc hostpath.csi.k8s.io Delete Immediate false 15m
standard (default) k8s.io/minikube-hostpath Delete Immediate false 16m
# 查看 volumesnapshotclasses
$ kubectl get volumesnapshotclasses
NAME DRIVER DELETIONPOLICY AGE
csi-hostpath-snapclass hostpath.csi.k8s.io Delete 3m43s
# 用以下命令进行验证
$ ./kubestr csicheck -s csi-hostpath-sc -v csi-hostpath-snapclass
Creating application
-> Created pod (kubestr-csi-original-podrnhs4) and pvc (kubestr-csi-original-pvc4stv4)
Taking a snapshot
-> Created snapshot (kubestr-snapshot-20210711163527)
Restoring application
-> Restored pod (kubestr-csi-cloned-podzcmg4) and pvc (kubestr-csi-cloned-pvcn4zcw)
Cleaning up resources
CSI checker test:
CSI application successfully snapshotted and restored. - OK

4.3 存储性能测试

性能测试的默认用例将涉及如下场景,同时默认的存储性能测试会创建一个100G的卷, 如果您希望调整测试场景与卷大小,可使用 -f 来写配置文件, -z 选项来指定卷的大小。详细情况见如下的帮助提示。

  • blocksize=4K filesize=2G iodepth=64 rw=randread
  • blocksize=4K filesize=2G iodepth=64 rw=randwrite
  • blocksize=128K filesize=2G iodepth=64 rw=randread
  • blocksize=128k filesize=2G iodepth=64 rw=randwrite

$ ./kubestr fio --help
Run an fio test

Usage:
kubestr fio [flags]

Flags:
-f, --fiofile string The path to a an fio config file.
-h, --help help for fio
-i, --image string The container image used to create a pod.
-n, --namespace string The namespace used to run FIO. (default "default")
-z, --size string The size of the volume used to run FIO. (default "100Gi")
-s, --storageclass string The name of a Storageclass. (Required)
-t, --testname string The Name of a predefined kubestr fio test. Options(default-fio)

测试的过程如下

$./kubestr fio -s cbs-csi     
PVC created kubestr-fio-pvc-z2wdr
Pod created kubestr-fio-pod-4lczx
Running FIO test (default-fio) on StorageClass (cbs-csi) with a PVC of Size (100Gi)
Elapsed time- 53.485027531s
FIO test results:

FIO version - fio-3.20
Global options - ioengine=libaio verify=0 direct=1 gtod_reduce=1

JobName: read_iops
blocksize=4K filesize=2G iodepth=64 rw=randread
read:
IOPS=868.849182 BW(KiB/s)=3492
iops: min=760 max=962 avg=870.599976
bw(KiB/s): min=3040 max=3848 avg=3482.466553

JobName: write_iops
blocksize=4K filesize=2G iodepth=64 rw=randwrite
write:
IOPS=453.163391 BW(KiB/s)=1829
iops: min=304 max=580 avg=451.500000
bw(KiB/s): min=1216 max=2320 avg=1806.033325

JobName: read_bw
blocksize=128K filesize=2G iodepth=64 rw=randread
read:
IOPS=888.234924 BW(KiB/s)=114227
iops: min=884 max=902 avg=893.666687
bw(KiB/s): min=113152 max=115456 avg=114391.164062

JobName: write_bw
blocksize=128k filesize=2G iodepth=64 rw=randwrite
write:
IOPS=530.908386 BW(KiB/s)=68490
iops: min=404 max=690 avg=532.799988
bw(KiB/s): min=51712 max=88320 avg=68202.101562

Disk stats (read/write):
vdh: ios=31545/17967 merge=240/403 ticks=2140610/2168191 in_queue=2191134, util=99.639580%
- OK

5. 总结

Kubestr 是一个简单的轻量级工具,用于评估集群中的存储选项。它可以帮助您 发现、验证和评估 您的 kubernetes 云原生存储,以明确当前配置的状态与存储能力是否满足应用的要求。当比较跨多个集群、云平台与存储选项的性能时,还可以通过切换 Kubeconfig 使其跨多个集群运行。 这就是我们带来的开源工具 Kubestr 的介绍,欢迎大家下载和使用。并将意见直接提交到 github 或 反馈给我们,谢谢! 欢迎大家扫描下方二维码申请 K10 免费试用,亲身动手试一试。