Kubernetes使用Rook部署Ceph存储集群

官网地址

参考地址:https://rook.io/docs/rook/v1.3/ceph-quickstart.html
其实就简单的几步:

git clone --single-branch --branch release-1.3 https://github.com/rook/rook.git
cd rook/cluster/examples/kubernetes/ceph
kubectl create -f common.yaml
kubectl create -f operator.yaml
kubectl create -f cluster.yaml

但经过尝试,外国人的方法根本不符合国情,不建议大家直接使用官网的步骤。

安装nautilus14.2.9

按此人的方法安装,基本没遇见什么问题,而且作者的方法很符合国情,所以具体过程就不写了:
https://blog.csdn.net/zwjzqqb/article/details/104988391
安装完成之后,发现自己的ceph版本是nautilus14.2.9

调试cephfs时参考的博客:
http://www.yangguanjun.com/2018/12/22/rook-ceph-practice-part1/

其他比较推荐的博客:
https://blog.csdn.net/networken/article/details/85772418
https://blog.fleeto.us/post/the-ultimate-rook-and-ceph-survival-guide/

基础知识参考:

  1. 如何让Docker镜像飞起来 https://www.cnblogs.com/codelove/p/12603218.html
  2. 需要fq,介绍Kubernet的经典博客:https://jimmysong.io/kubernetes-handbook/cloud-native/from-kubernetes-to-cloud-native.html
  3. kubernetes学习之service、deployment、pod的关系?(https://www.cnblogs.com/chadiandianwenrou/p/11933914.html)

deployment根据Pod的标签关联到Pod,是为了管理pod的生命周期
service根据Pod的标签关联到pod,是为了让外部访问到pod,给pod做负载均衡
需要注意:
deployment控制器关联的Pod,Pod的name和Hostname(如果不手动指定)就是deployment控制器的Name
StatefulSet控制器关联的Pod,Pod的Name和Hostname(如果不手动指定)就是StatefulSet控制器的Name + 序号

  1. yaml文件中各种字段的解析:
    https://www.cnblogs.com/FRESHMANS/p/8444214.html

  2. configMAP的介绍:
    https://www.cnblogs.com/Andya/p/12490000.html
    https://www.jianshu.com/p/b1d516f02ecd

遇到的问题及及解决方法

  1. error: unable to recognize "cluster-test.yaml": no matches for kind "CephCluster" in version "ceph.rook.io/v1"
    参考:https://time.geekbang.org/column/article/39724,也就是说,没有首先安装common.yaml造成的。
    当时,我找了半天,也不知道问题出在哪里,二话不说,直接重装。
kubectl delete -f common.yaml
kubectl delete -f operator.yaml
kubectl delete -f cluster.yaml

安装的步骤和之前一样,如果已经有在运行的osd pod之类的,删掉哪些pod然后格式化osd占用的磁盘,重启,重新安装。

  1. Why can't find osd pod:
    https://stackoverflow.com/questions/62045052/why-cant-find-osd-pod-in-kubernetes-after-deploying-rook-ceph
    结论:To solve it you can:
    add one more worker node(我是最终通过这个问题解决的,而且自己编辑了cluster.yaml文件)
    remove NoSchedule taint with kubectl taint nodes kube1 key:NoSchedule-
    change mon count to lower value

  2. 如何删除一个pod?

kubectl delete pod rook-ceph-osd-0-5b46b67549-87h6v --force --grace-period=0 -n rook-ceph
  1. 为什么删除之后pod总是自动重启?
    先delete deployment,然后再delete pod
kubectl delete deployment rook-ceph-osd-0-5b46b67549-87h6v -n rook-ceph

怎么查询deployment?有delete的地方就有get换个关键词就行了。

kubectl get deployment -n rook-ceph
  1. 把kubernet的节点玩挂了,怎么装回之前的版本?
    yum指定版本,其他的与原来一样
yum install -y --setopt=obsoletes=0   kubeadm-1.15.2-0.x86_64
yum install -y --setopt=obsoletes=0   kubelet-1.15.2-0.x86_64
yum install -y --setopt=obsoletes=0   kubectl-1.15.2-0.x86_64
  1. 使用rook-ceph如何手动mount到cephfs?
    http://www.yangguanjun.com/2018/12/22/rook-ceph-practice-part1/
    但是他只介绍了ceph-fuse的mount,那么直接使用系统自带的mount命令应该怎么写呢?
mount -t ceph 10.97.21.100:6789,10.99.247.149:6789,10.103.70.105:6789:/ /mnt/ceph2/ -o name=admin,secret=AQDRHN5efslPHRAA89eGIq4/OIvyApvaQhkJwQ==,mds_namespace=myfs

值得注意的是,我们使用的是ceph.client.admin.keyring 里的KEY,但是传name的时候写admin,另外要加上mds_namespace=myfs这个参数才行。myfs是你自己定义的cephfs名称。
我使用mount命令是为了测试配额的,事实证明在ceph nautilus14.2.9这个版本里,在系统是“5.7.0-1.el7.elrepo.x86_64”的情况下,mount.ceph直接挂载,可以取到配额,并且配额是生效的,而且是实时生效的,从另一客户端挂载设置配额,挂载目的目录载df查看时,确实可以看到新设置的配额。用dd命令测试,也确实验证出,超出配额不能读写。

  1. 如何判断一个连接pvc的pod是使用的系统mount挂载到rook-ceph的?
$ mount
10.97.21.100:6789,10.99.247.149:6789,10.103.70.105:6789:/volumes/csi/csi-vol-1d7d27de-a985-11ea-ac06-2e02dc2407eb/ec780367-a02e-4911-aaeb-b6563d866e23 on /var/lib/kubelet/pods/f4f8dae0-3a21-4e3d-9ea6-f198e69725ab/volumes/kubernetes.io~csi/pvc-607ce68b-c0e1-4080-99e3-e4f3be74bc4e/mount type ceph (rw,relatime,name=csi-cephfs-node,secret=<hidden>,acl,mds_namespace=myfs,_netdev)
可以看见打印中写的就是“mount type ceph ”
  1. 如何设置配额?
    参考:http://docs.ceph.org.cn/cephfs/quota/
    setfattr getfattr 命令找不到?
yum -y install attr
  1. 安装不下去了,想放弃怎么办?
    别放弃,你离成功始终只差一步,现在不知道的只是成功在你的左手边还是右手边而已。
原文地址:https://www.cnblogs.com/bugutian/p/13092189.html