项目来源于阿里云Kubernetes CSI插件,原插件功能强大, 支持将云盘、NAS、CPFS、OSS、LVM作为集群PV。 但是,如果用的是自建集群,且不使用自建集群的方式接入阿里云,我们无法使用该工具(需要内网)。
2023.3月,alibaba-cloud-csi-driver 发布了全新版本,更新了部署yaml,但是文档没有跟上,所以很坑
本仓库针对个人需求对源代码进行了删改,完美解决了个人需求:
- 只需要支持 amd64 处理机
- 只需要支持 oss 作为存储卷
- 集群结点不算多
如果你的需求和我一样,那么可以参考本项目,或者跟着本教程直接使用
“ossfs 能让您在 Linux 系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享。”
在原仓库中,宿主机中的 ossfs 由容器中 nsenter 管理安装和更新。但是版本非常混乱,因此综合考虑,自己手动为 ossfs 安装比较方便。
必须为每一台 node 安装,因此假如结点很多,这个方法对你来说不合适(原脚本中会判断宿主机中的OS类型完成安装,但是我还是把这些逻辑删了,因为总会出现离奇 bug)。
安装过程参考ossfs 快速安装,安装包给的不多,个人推荐源码安装,因为真的比直接下载二进制包方便(仅对于 ossfs,官方安装包有点旧)。 源码安装过程直接看ossfs Github,以Ubuntu为例,步骤示例如下:
apt-get install automake autotools-dev g++ git libcurl4-gnutls-dev \
libfuse-dev libssl-dev libxml2-dev make pkg-config
git clone https://github.com/aliyun/ossfs.git
cd ossfs
./autogen.sh
./configure
make
sudo make install
在集群中部署01-rbac.yaml和02-csi-driver.yaml,分别用于声明权限和定义插件执行 Node Attach 的方式。文件均来自原仓库同路径文件,直接 apply 即可:
kubectl apply -f ./deploy/01-rbac.yaml
kubectl apply -f ./deploy/02-csi-driver.yaml
去docker仓库中找到最新版本的镜像,替换03-csi-plugin.yaml中容器csi-plugin的image(前提是你也是amd64,仓库中只提供了amd64版本)。
然后直接部署即可:
kubectl apply -f ./deploy/03-csi-plugin
稍等片刻,容器启动成功,你的集群每个结点都会运行 csi-plugin 的 pod
当然,你也可以自己构建镜像(本仓库只支持 amd),步骤如下: 0. 安装 Golang 1.18 以上版本
- 修改build-amd64-image.sh中的仓库地址等信息
cd build && sh build-amd64-image.sh
- 稍等片刻,镜像就会推送到自己的仓库
- 修改03-csi-plugin.yaml中的镜像为自己的镜像,然后
kubectl apply -f ./deploy/03-csi-plugin
完成安装
oss的csi插件已经部署完成,我们接下来创建pv,pvc和一个nginx来做测试。测试yaml同样来自于原仓库
这里就不细说了,去阿里云 oss 开一个 bucket,然后申请一对 AccessID 和 AccessKey,填写在01-pv.yaml中,其中url
为 oss 外网 Endpoint,可在访问域名和数据中心
查看
kubectl apply -f ./examples/01-pv.yaml
kubectl apply -f ./examples/02-pvc.yaml
kubectl apply -f ./examples/03-deploy.yaml
进去 nginx 的 pod shell,往 /data
底下写个文件,再去 oss 里看看有没有出现
# in pod shell
cd /data
echo hello > 1.txt
- 原仓库还有个
csi-provisioner.yaml
,里面有一些 StorageClass 方法,直接跑也是跑不起来的,有空可以support以下 - 支持以下异构集群