注意

本文档适用于 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和CephClusterCR使用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地址::启动minikubeminikube start --driver=docker --insecure-registry='192.168.122.1:5000'

如果你在别处托管

如果你没有任何服务器可用,可以尝试使用纯容器提供程序,例如Google Compute Engine。当涉及到哪些存储设备对你的kubernetes集群可见时,你的体验可能会有所不同。

在启动大型集群之前,请确保检查它为你带来的成本!

2. 运行一个docker registry

在可以从你的工作站和你的kubernetes集群访问的地方运行此命令(即docker push/pull在任何地方都能正常工作)。

  1. 安装docker-distribution软件包的一部分提供。

  2. 如果你想配置端口,请编辑/etc/docker-distribution/registry/config.yml

  3. 启用注册表服务:

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. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.