官網地址
參考地址: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/
基礎知識參考:
- 如何讓Docker鏡像飛起來 https://www.cnblogs.com/codelove/p/12603218.html
- 需要fq,介紹Kubernet的經典博客:https://jimmysong.io/kubernetes-handbook/cloud-native/from-kubernetes-to-cloud-native.html
- 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 + 序號
-
yaml文件中各種字段的解析:
https://www.cnblogs.com/FRESHMANS/p/8444214.html -
configMAP的介紹:
https://www.cnblogs.com/Andya/p/12490000.html
https://www.jianshu.com/p/b1d516f02ecd
遇到的問題及及解決方法
- 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占用的磁盤,重啟,重新安裝。
-
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 -
如何刪除一個pod?
kubectl delete pod rook-ceph-osd-0-5b46b67549-87h6v --force --grace-period=0 -n rook-ceph
- 為什么刪除之后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
- 把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
- 使用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命令測試,也確實驗證出,超出配額不能讀寫。
- 如何判斷一個連接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 ”
- 如何設置配額?
參考:http://docs.ceph.org.cn/cephfs/quota/
setfattr getfattr 命令找不到?
yum -y install attr
- 安裝不下去了,想放棄怎么辦?
別放棄,你離成功始終只差一步,現在不知道的只是成功在你的左手邊還是右手邊而已。