在上一篇文章中,我们完成了CubeFS集群的安装。本文将继续深入,介绍如何操作CubeFS集群,并重点讲解如何通过CSI(Container Storage Interface)驱动将CubeFS与Kubernetes集成,实现动态存储卷供给。
1. 客户端部署与配置
首先,需要部署并配置CubeFS命令行客户端,以便管理集群。
下载与您CubeFS集群版本匹配的客户端安装包:
wget https://github.com/cubefs/cubefs/releases/download/v3.5.2/cubefs-3.5.2-linux-amd64.tar.gz
# 解压
tar -xvf cubefs-3.5.2-linux-amd64.tar.gz
# 移动至可执行目录
cp cubefs/build/bin/cfs-cli /usr/local/bin
# 查看版本
cfs-cli --version
配置客户端连接信息。初始状态下,直接查询集群会因域名解析失败而报错:
# 直接查询集群信息会报错
cfs-cli cluster info
# 错误信息:lookup master.cube.io ... no such host
需要先获取master-service的集群IP地址,并更新客户端配置:
# 查找master-service对应的IP
kubectl get svc -n cubefs
# 输出示例:
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
# master-service ClusterIP 10.224.31.26 <none> 17010/TCP
# 编辑客户端连接配置文件
vim ~/.cfs-cli.json
# 将 `masterAddr` 修改为上面获取的IP和端口,例如:
{
"masterAddr": [
"10.224.31.26:17010"
],
"timeout": 60
}
# 再次查看集群信息,此时应成功
cfs-cli cluster info

成功连接后,即可使用cfs-cli进行各类管理操作,主要命令分类如下:
| 命令类别 |
描述 |
cfs-cli cluster |
集群管理 |
cfs-cli metanode/datanode |
元数据/数据节点管理 |
cfs-cli metapartition/datapartition |
元数据/数据分片管理 |
cfs-cli config |
配置管理 |
cfs-cli volume/vol |
卷管理 |
cfs-cli user |
用户管理 |
cfs-cli quota |
目录配额管理 |
具体命令使用方法,请参考CubeFS官方文档。
2. 部署CubeFS CSI驱动
为了让Kubernetes节点能够使用CubeFS存储,首先需要为节点添加标签:
kubectl label node component.cubefs.io/csi=enabled --all
若通过Helm安装CubeFS,则需在values.yaml配置文件中启用CSI组件并配置资源:
# 启用CSI
component:
...
csi: true
# 资源配置
requests:
memory: "512Mi"
cpu: "200m"
limits:
memory: "1024Mi"
cpu: "1000m"
更新Helm Release以应用配置:
cd cubefs-helm/cubefs
helm upgrade cubefs -n cubefs .
部署完成后,验证CSI驱动及存储类:
# 查看StorageClass,将默认创建一个名为cfs-sc的存储类
kubectl get sc
# 输出示例:
# NAME PROVISIONER RECLAIMPOLICY ... AGE
# cfs-sc (default) csi.cubefs.com Delete ... 76s
# 查看CSI相关的Pod,需全部处于Running状态
kubectl get po -n cubefs | grep cfs-csi

3. 使用CubeFS存储类进行动态供给
CSI驱动就绪后,即可使用cfs-sc存储类动态创建存储卷。下面通过一个Nginx示例演示如何使用,这也是在Kubernetes环境中集成云原生/IaaS存储方案的常见实践。
首先,创建一个PersistentVolumeClaim (PVC):
# cubefs-nginx-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cubefs-nginx
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: cfs-sc
volumeMode: Filesystem
应用该PVC:
kubectl apply -f cubefs-nginx-pvc.yaml
查看PVC及其自动创建的PV:
kubectl get pvc
kubectl get pv
接下来,创建一个Nginx Deployment,并将上述PVC挂载到容器中:
# 生成一个基础的Nginx部署模板
kubectl create deploy nginx --image=nginx:1.27 --dry-run=client -oyaml > nginx-cubefs-deploy.yaml
编辑nginx-cubefs-deploy.yaml,在Pod模板中添加volume和volumeMounts配置:
# nginx-cubefs-deploy.yaml (部分内容)
spec:
containers:
- image: nginx:1.27
name: nginx
volumeMounts:
- mountPath: "/usr/local/nginx" # 挂载路径
name: nginx-pvc
volumes:
- name: nginx-pvc
persistentVolumeClaim:
claimName: cubefs-nginx # 使用前面创建的PVC
部署应用并检查状态:
kubectl apply -f nginx-cubefs-deploy.yaml
kubectl get po
kubectl describe po <nginx-pod-name>

从Pod事件描述中可以看到,在启动前已成功将CubeFS提供的PVC挂载到指定路径,这标志着运维/DevOps流程中的动态存储供给功能已正常运作。至此,Kubernetes中的应用即可像使用本地目录一样,使用CubeFS提供的分布式存储空间。