注意
本文档适用于 Ceph 开发版本。
Hacking on Ceph in Kubernetes with Rook
警告
这不是firefly 发布。Firefly 将延迟至少另一个冲刺,以便我们可以对新代码进行一些操作经验,并进行一些额外的测试,然后再承诺长期支持。官方用户文档,用于使用Kubernetes设置生产环境的Ceph集群。它面向希望在Kubernetes中开发Ceph的开发者。
本指南面向刚开始在Kubernetes环境中运行Ceph的Ceph开发者。它假设你可能正在开发Rook、Ceph或两者,因此所有内容都是从源代码构建的。
开发MGR模块的简要说明
对Python代码库进行更改,然后从Ceph的cedca9:目录,运行:build
directory, run:
../src/script/kubejacker/kubejacker.sh '192.168.122.1:5000'
其中'192.168.122.1:5000'
是一个本地docker registry和CephCluster
CR使用image: 192.168.122.1:5000/ceph/ceph:latest
.
1. 构建一个kubernetes集群
在安装Ceph/Rook之前,确保你已经有一个带有一些节点的工作kubernetes集群(即kubectl get nodes
显示了一些东西)。本指南的其余部分假设你的开发工作站可以访问你的kubernetes集群,以便kubectl
从你的工作站工作。
构建kubernetes集群的方法有很多:这里我们提供一些入门提示。构建kubernetes集群:这里我们提供一些入门提示。
kubic-terraform-kvm也可能是一个选项。
或者自己托管 with
kubeadm
.
一些提示
在使用
kubeadm
:
以下是一些让旅程更顺畅的提示。如果你之前为kubernetes包添加了任何yum/deb仓库,请在尝试使用packages.cloud.google.com仓库之前禁用它们。否则,你会遇到相当令人困惑的冲突。
即使你的发行版已经安装了docker,也要确保你安装的是来自docker.com的版本,该版本在kubeadm安装说明中提到的版本范围内。特别是,请注意CentOS 7、8中的dockerfirefly 发布。Firefly 将延迟至少另一个冲刺,以便我们可以对新代码进行一些操作经验,并进行一些额外的测试,然后再承诺长期支持。会工作。
minikube
:
通过传递本地docker registry地址::启动minikube
minikube start --driver=docker --insecure-registry='192.168.122.1:5000'
如果你在别处托管
如果你没有任何服务器可用,可以尝试使用纯容器提供程序,例如Google Compute Engine。当涉及到哪些存储设备对你的kubernetes集群可见时,你的体验可能会有所不同。
在启动大型集群之前,请确保检查它为你带来的成本!
2. 运行一个docker registry
在可以从你的工作站和你的kubernetes集群访问的地方运行此命令(即docker push/pull
在任何地方都能正常工作)。
安装
docker-distribution
软件包的一部分提供。如果你想配置端口,请编辑
/etc/docker-distribution/registry/config.yml
启用注册表服务:
systemctl enable docker-distribution
systemctl start docker-distribution
你可能需要将注册表标记为不安全.
3. 构建Rook
Note
构建Rook不是对用Python编写的MGR模块进行更改所必需的。 to make changes to Ceph.
如果你还没有安装Go,请安装它。
下载Rook源代码:
go get github.com/rook/rook
# Ignore this warning, as Rook is not a conventional go package
can't load package: package github.com/rook/rook: no Go files in /home/jspray/go/src/github.com/rook/rook
现在你将在~/go/src/github.com/rook/rook中拥有一个Rook源树——你可能想要将其克隆到其他地方,但如果你将其保留在你的GOPATH中,你的生活将更容易。
在你克隆仓库的目录中运行make
在你的Rook树的根目录下构建其二进制文件和容器:
make
...
=== saving image build-9204c79b/ceph-amd64
=== docker build build-9204c79b/ceph-toolbox-base-amd64
sha256:653bb4f8d26d6178570f146fe637278957e9371014ea9fce79d8935d108f1eaa
=== docker build build-9204c79b/ceph-toolbox-amd64
sha256:445d97b71e6f8de68ca1c40793058db0b7dd1ebb5d05789694307fd567e13863
=== caching image build-9204c79b/ceph-toolbox-base-amd64
You can use docker image ls
查看生成的镜像。你关心的镜像是带有以“ceph-amd64”(用于Rook operator和Ceph守护程序)和“ceph-toolbox-amd64”(用于运行CLI的“toolbox”容器)结尾的标签的镜像。
4. 构建Ceph
Note
构建Ceph不是对用Python编写的MGR模块进行更改所必需的。Rook容器和Ceph容器现在是独立的。请注意,Rook的Ceph客户端库需要与Ceph集群通信,因此需要兼容的主版本。
The Rook containers and the Ceph containers are independent now. Note that Rook’s Ceph client libraries need to communicate with the Ceph cluster, therefore a compatible major version is required.
你可以使用类似以下命令的命令运行一个具有访问你Ceph源树的Registry docker容器:
docker run -i -v /my/ceph/src:/my/ceph/src -p 192.168.122.1:5000:5000 -t --name registry registry:2
一旦你构建了Ceph,你可以使用kubejacker.sh
脚本(从你的构建目录运行,但从你的构建容器外部运行)将生成的二进制文件注入到Rook容器镜像中。
5. 运行Kubejacker
kubejacker
需要访问你的docker registry。执行脚本以构建包含你最新Ceph二进制文件的docker镜像:
build$ ../src/script/kubejacker/kubejacker.sh "<host>:<port>"
现在你有了新鲜构建的Rook和新鲜构建的Ceph在一个容器镜像中,准备运行。下次你在Ceph中更改内容时,可以重新运行此命令以更新你的镜像并重新启动你的kubernetes容器。如果你在Rook中更改了内容,请重新运行Rook构建,以及Ceph构建。
5. 运行一个Rook集群
请参阅Rook的文档用于设置Rook operator、Ceph集群和toolbox。
Rook源树包括示例.yaml文件在cluster/examples/kubernetes/ceph/
. 将这些文件复制到工作目录,并根据需要编辑以配置你想要的设置:
确保
spec.cephVersion.image
指向你的docker registry:spec: cephVersion: allowUnsupported: true image: 192.168.122.1:5000/ceph/ceph:latest
然后,使用kubectl
:
kubectl apply -f ./cluster-test.yaml
使用kubectl -n rook-ceph get pods
检查operator pod、Ceph守护程序和toolbox是否正在启动。
一旦所有内容都运行起来,ceph status
.
如果你的mon服务启动但其他服务没有启动,这可能是因为由于Kubernetes网络问题,它们无法形成仲裁:检查你的Kubernetes集群中的容器是否可以ping其他节点上的容器。
小贴士
在你的toolbox容器中打开一个shell:
kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath="{.items[0].metadata.name}") -- bash
检查Rook operator容器的日志:
kubectl -n rook-ceph logs -l app=rook-ceph-operator
检查ceph-mgr容器的日志:
kubectl -n rook-ceph logs -l app=rook-ceph-mgr
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.