这里使用的rook项目在k8s中部署ceph
https://github.com/rook/rook
1. k8s中部署ceph
1.1 创建operator
1 | [admin@haifly-bj-dev-k8s-master1 ~]$ git clone https://github.com/rook/rook |
1.2 创建cluster
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ kubectl create -f cluster.yaml |
1.3 创建dashboard
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ kubectl create -f dashboard-external-http |
1.4 创建mon-service
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ cat mon-service.yaml |
1.5 ceph监控
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ kubectl create -f monitoring/ |
1.6 ceph tool工具
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ kubectl create -f toolbox.yaml |
2.使用ceph rdb
在测试中发现rdb模式下一个pv下只能创建一次pvc,如果把该pv下的pvc删除再次创建,该pv会一直处于Released状态pvc处理Pending状态无法完成绑定。
2.1 静态pvc
2.2.1 创建pool
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ kubectl create -f pool.yaml |
2.2.2 创建Secret
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ cat ceph-secret.yaml |
2.2.3 创建pv
1 | cat << EOF >> test.pv.yml |
2.2.4 创建pvc
1 | cat << EOF >> test.pvc.yml |
2.2.5 创建deployment
1 | cat << EOF >> test.deploy.yml |
2.2 动态pvc(StoragaClass 方式)
2.2.1 创建pool 已有请忽略
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ kubectl create -f pool.yaml |
2.2.2 创建StorageClass
1 | cat << EOF >> test.storageclass.yml |
2.2.3 创建pvc
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ cat grafana-pvc.yaml |
2.2.4 创建 Deployment
1 | apiVersion: apps/v1beta1 |
3.使用ceph fs
Kubernetes跨节点挂载CephFS
注意:所有k8s节点上必须具备2个硬性条件(1.本地存在/etc/ceph/admin.secret文件,文件内容为上文提到的key值,并且如果使用secret形式挂载时,需要将其改为base64格式;2.每个k8s node上必须安装ceph-common cli tools用于调用;)
同时挂载形式也有两种,一种是通过读文件密码信息,一种是通过secret.yaml获取
在K8s中,至少可以通过两种方式挂载CephFS,一种是通过Pod直接挂载;另外一种则是通过pv和pvc挂载。我们分别来看。
3.1 创建ceph fs(pool)
ceph当前正式版功能中仅支持一个fs,对多个fs的支持仅存在于实验feature中
1 | [admin@haifly-bj-dev-k8s-master1 ceph]$ kubectl create filesystem.yaml |
3.2 Pod直接挂载CephFS
1 | cat ceph-pod2-with-secret.yaml |
3.3 通过PV和PVC挂载CephFS
3.3.1 创建secret
1 | cat ceph-secret.yaml |
3.3.2 创建pv,pvc
1 | cat ceph-pv.yaml |
3.3.3 创建pod
1 | cat ceph-pod2.yaml |
3.4 现在使用的ceph fs挂载方式:
3.4.1pv,pvc
1 | apiVersion: v1 |
注意:pv和pvc设置的容量大小并不能限制cephfs某一个目录的大小,也就是说容器可以向cephfs目录写入超出1G的文件。
此外:这里的/grafana目录是提前挂载了/目录后在其它容器中创建的/grafana目录前chmod 777权限,grafana是使用非root运行,不然对目录读写会受限制。
3.4.2 pod
1 | apiVersion: apps/v1 |