Go bindings for Ceph :octopus: :octopus: :octopus:
| Files | Last commit | Last update |
|---|---|---|
| 4 months ago | ||
| 16 days ago | ||
| 1 month ago | ||
| 2 days ago | ||
| 1 month ago | ||
| 5 days ago | ||
| 22 days ago | ||
| 5 days ago | ||
| 16 days ago | ||
| 1 month ago | ||
| 4 months ago | ||
| 2 years ago | ||
| 4 months ago | ||
| 1 year ago | ||
| 11 years ago | ||
| 1 month ago | ||
| 1 month ago | ||
| 5 years ago | ||
| 8 days ago | ||
| 8 days ago |
go-ceph - Ceph API 的 Go 绑定
简介
go-ceph 项目提供一组 API 绑定,支持在 Go 中调用以 C 语言函数实现的 Ceph 原生 API。这些绑定基于 Go 的 cgo 特性。 构成 go-ceph 的三个主要 Go 子包如下:
- rados - 导出 Ceph 的 librados 功能
- rbd - 导出 Ceph 的 librbd 功能
- cephfs - 导出 Ceph 的 libcephfs 功能
- rgw/admin - 与 radosgw admin ops API 交互
我们致力于持续为 Ceph API 提供全面支持,涵盖 I/O 相关函数和管理函数。如果你的项目使用 Go 编写,并且调用了 Ceph 命令行工具,那么你可能无需再通过 shell 执行 CLI,而直接改用这些原生函数调用。
安装
go-ceph 中的代码仅是一个库模块。通常,会在其他基于 Go 的项目中导入 go-ceph。构建代码时,需要预先安装原生的 RADOS、RBD 与 CephFS 库以及开发头文件。
在基于 Debian 的系统(apt)上,可能为:
libcephfs-dev librbd-dev librados-dev
在基于 RPM 的系统(dnf、yum 等)上,这些可能是:
libcephfs-devel librbd-devel librados-devel
在 MacOS 上,你可以使用 brew 安装相关库:
brew tap mulbc/ceph-client
brew install ceph-client
注意:CentOS 用户可能需要使用
CentOS Storage SIG
软件源,以启用受支持的 ceph 版本的软件包。
示例:dnf -y install centos-release-ceph-tentacle。
(CentOS 7 用户应使用“yum”而不是“dnf”)
要快速测试是否可以在您的系统上使用 go-ceph 构建,请运行:
go get github.com/ceph/go-ceph
编译完成后,使用 go-ceph 的代码将动态链接到 Ceph 库。这些库必须在运行基于 go 的二进制文件的系统上可用。由于使用 cgo 和 ceph 库,无法生成完全静态的二进制文件。
go-ceph 努力支持不同的 Ceph 版本。不过,某些函数可能仅在较新的版本中可用,而其他函数可能已被弃用。为了支持非当前版本的 Ceph,需要向 go 命令传递 build-tags。带有指定 Ceph 发布版本名称的 tag 会启用/禁用 go-ceph 包中的某些功能,并避免出现警告或编译问题。例如,要确保选择与 "tentacle" 发布版本匹配的库功能,请使用:
go build -tags tentacle ....
go test -tags tentacle ....
支持的 Ceph 版本
| go-ceph 版本 | 支持的 Ceph 版本 | 已弃用的 Ceph 版本 |
|---|---|---|
| v0.41.0 | squid, tentacle, umbrella | quincy, reef |
| v0.40.0 | squid, tentacle | pacific, quincy, reef |
| v0.39.0 | squid, tentacle | pacific, quincy, reef |
| v0.38.0 | reef, squid, tentacle | pacific, quincy |
| v0.37.0 | reef, squid, tentacle | pacific, quincy |
| v0.36.0 | reef, squid, tentacle | pacific, quincy |
| v0.35.0 | quincy, reef, squid | octopus, pacific |
| v0.34.0 | pacific, quincy, reef, squid | octopus |
| v0.33.0 | pacific, quincy, reef, squid | octopus |
| v0.32.0 | pacific, quincy, reef, squid | octopus |
| v0.31.0 | pacific, quincy, reef, squid | octopus |
| v0.30.0 | pacific, quincy, reef, squid | octopus |
| v0.29.0 | pacific, quincy, reef | octopus |
| v0.28.0 | pacific, quincy, reef | nautilus, octopus |
| v0.27.0 | pacific, quincy, reef | nautilus, octopus |
| v0.26.0 | pacific, quincy, reef | nautilus, octopus |
| v0.25.0 | pacific, quincy, reef | nautilus, octopus |
| v0.24.0 | pacific, quincy, reef | nautilus, octopus |
| v0.23.0 | pacific, quincy, reef | nautilus, octopus |
| v0.22.0 | pacific, quincy | nautilus, octopus |
| v0.21.0 | pacific, quincy | nautilus, octopus |
| v0.20.0 | pacific, quincy | nautilus, octopus |
| v0.19.0 | pacific, quincy | nautilus, octopus |
构建标签会影响编译时的支持范围。客户端库所支持的 Ceph 集群版本,以及 Ceph 集群所支持的客户端库版本,完全取决于编译 go-ceph 时所使用的 Ceph C 库版本。
如需查看 go-ceph 旧版本的支持情况,请参见文档中的 旧版本发布 文件。
文档
详细 API 文档可参见 https://pkg.go.dev/github.com/ceph/go-ceph。
还可参阅一些 API 使用提示与操作指南,快速了解部分 API 调用如何协同工作。
开发
docker run --rm -it --net=host \
--security-opt apparmor:unconfined \
-v ${PWD}:/go/src/github.com/ceph/go-ceph:z \
-v /home/nwatkins/src/ceph/build:/home/nwatkins/src/ceph/build:z \
-e CEPH_CONF=/home/nwatkins/src/ceph/build/ceph.conf \
ceph-golang
在未安装 Ceph 的情况下,针对 vstart.sh 集群运行:
export CGO_CPPFLAGS="-I/ceph/src/include"
export CGO_LDFLAGS="-L/ceph/build/lib"
go build
贡献
欢迎提交贡献,非常感谢,任何细微的贡献都很有帮助。请通过 GitHub Pull Request 提交代码变更:
- Fork 仓库,并为每个功能/修复创建主题分支。避免 直接在 master 分支上进行修改。
- 所有新增功能都应附带测试。
- 提交变更集前,请确保已运行
go fmt。此外,Makefile 中提供了相应选项, 你也可以运行make fmt。 - 集成测试可以在 docker 容器中运行,请执行:
make test-docker
联系我们
想与 go-ceph 团队取得联系?您可以通过以下几种渠道:
- 如有问题、评论或反馈: 使用讨论区
- 报告问题或提出功能需求: 问题跟踪器
- 我们参与 Ceph 用户邮件列表 和开发者邮件列表, 并会在这些列表上发布版本公告
- 有时您可以通过 #go-ceph Slack 频道 或 #ceph-devel Slack 频道 与我们实时交流