go-ceph:基于 Ceph 生态的 Go 语言 API 绑定项目

Go bindings for Ceph :octopus: :octopus: :octopus:

Branch1Tags40
FilesLast commitLast 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 绑定

Godoc 许可证 构建状态 Go Report Card

简介

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 团队取得联系?您可以通过以下几种渠道:

Introduction

Go bindings for Ceph :octopus: :octopus: :octopus:

Customize your domain
41691296Visit GitHub