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

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 免费试用,亲身动手试一试。

20210628171302

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注