Kasten k10 实战系列 04 - 利用 Kubestr 进行云原生存储能力评测
1. 前言
随着 Kubernetes 在企业 IT 基础架构体系中的采用日渐增多,可供用户使用的持久化存储产品也越来越多。CSI(容器存储接口)的引入使存储提供商能够轻松开发驱动程序。事实上今天有大约 100 种不同的 CSI 驱动程序可用,与现有的 In-Tree 存储提供程序一起,这使得存储的选型变得越发困难。如何为基础架构选择理想的存储提供商,已经成为了运维主管们的一个新型挑战。而传统的存储选型方法对于云原生架构又不一定合适,这时 Kubestr 就应运而生了。
文章目录
Kasten k10 实战系列 04 - 利用 Kubestr 进行云原生存储能力评测
- 前言
- Kubestr 是什么?
- Kubestr 能做什么? -
- 如何使用 Kubestr?
- 4.1 Kubestr 的安装
- 4.2 获取当前存储配置
- 4.3 验证存储快照功能
- 4.3 进行存储性能测试
- 总结
- 后记:拥抱开源,使自己成长
Kasten 实战系列导航
- Kasten K10 实战系列 01 - 在腾讯云上部署 K10 概览
- Kasten K10 实战系列 02 - Kasten K10 搭建云镜像库
- Kasten k10 实战系列 03 - Kasten K10 存储集成
- Kasten k10 实战系列 04 - 利用 Kubestr 进行云原生存储能力评测
- Kasten k10 实战系列 05 - Kasten K10 安装及最佳实践
- Kasten k10 实战系列 06 - Kasten K10 备份与恢复
- Kasten k10 实战系列 07 - Kasten K10 Kanister 应用感知框架的使用
- Kasten k10 实战系列 08 - Kasten K10 应用容灾与迁移
- Kasten k10 实战系列 09 - Kasten K10 整体环境灾备
- Kasten k10 实战系列 10 - Kasten K10 日常运维总结
2. Kubestr 是什么?
Kubestr 是一组用于发现、验证和评估 kubernetes 存储选项的工具。简单来讲,用户可以利用 Kubestr 来给自己正在使用的云原生存储跑分,以评估其是否达到了所需要的标准。Kubestr 是继备份解决方案 Kopia 和 Kubernetes 有状态数据管理框架 Kanister 之后,Kasten 发布的第三个主要开源项目,用于支持在 Kubernetes 环境中运行的有状态应用程序的存储选型、功能验证和存储性能评估。
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
用 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 免费试用,亲身动手试一试。
6. 参考文献
Kubestr 介绍
https://kubestr.io/
Kubestr Github
https://github.com/kastenhq/kubestr/releases/tag/v0.4.17
minikube 参考
https://minikube.sigs.k8s.io/docs/tutorials/volume_snapshots_and_csi/
腾讯 cbs-csi 参考
https://github.com/TencentCloud/kubernetes-csi-tencentcloud