Kubernetes使用Ceph动态卷部署应用

作者: ygqygq2 分类: 云计算/虚拟化,系统/运维 发布时间: 2018-08-24 08:39

Kubernetes使用Ceph动态卷部署应用

1. 环境准备

可用的kubernetes,版本1.11.1
可用的Ceph集群,版本luminous
Ceph monitor节点:lab1、lab2、lab3

GO语言环境和kubernetes-incubator/external-storage源码

私有docker仓库Harbor帐户生成secret添加至k8s

2. CephFS方式创建pvc

2.1 编译并上传docker image

准备docker image的yum源文件:

vim epel-7.repo

vim ceph.repo

修改Makefile中的docker仓库地址

vim Makefile修改内容:

vim Dockerfile修改内容:

编译并上传image至docker仓库

2.2 创建Ceph admin secret

2.2 启动CephFS provisioner

修改image地址:

部署启动

2.3 创建动态卷和应用

修改Ceph集群的monitor节点的IP,我的环境修改如下:

vim cephfs-class.yaml

vim cephfs-claim.yaml

vim cephfs-nginx-dy.yaml

验证结果:

3. RBD方式创建pvc

3.1 编译并上传docker image

同上文,略

3.2 创建Ceph admin secret

3.3 创建Ceph pool 和user secret

2.2 启动Ceph rbd provisioner

修改image地址:

部署启动

3.4 创建动态卷和应用

vim rbd-class.yaml

vim rbd-claim.yaml

vim rbd-nginx-dy.yaml

结果验证:

4. 踩坑解决

上文是官方文档操作的正常步骤和结果。但是过程中,踩了几个坑,花了我不少时间。

4.1 cannot get secrets in the namespace “kube-system”

secret和provisioner不在同一个namespace中的话,获取secret权限不够。

问题记录:
https://github.com/kubernetes-incubator/external-storage/issues/942

使用cephfs和RBD的rbac都报了这个错。

解决之道:

以下文件添加secrets的权限:

external-storage/ceph/cephfs/deploy/rbac/clusterrole.yaml
external-storage/ceph/rbd/deploy/rbac/clusterrole.yaml

4.2 rbd-provisioner: missing Ceph monitors

问题记录:
https://github.com/kubernetes-incubator/external-storage/issues/778

源码中,monitors需要k8s dns解析,我这里使用外部ceph,肯定没有相关解析。所以手动添加解析。而且storageclass配置默认不支持直接修改(只能删除再添加),维护解析比维护storageclass配置要好些。

vim rbd-monitor-dns.yaml

kubectl create -f rbd-monitor-dns.yaml

5. 小结

CephFS支持ReadWriteOnce、ReadOnlyMany和ReadWriteMany,可以允许多POD同时读写,适用于数据共享场景;Ceph RBD 只支持ReadWriteOnce和ReadOnlyMany,允许多POD同时读,适用于状态应用资源隔离场景。

参考资料:
[1] https://github.com/kubernetes-incubator/external-storage/tree/master/ceph
[2] https://kubernetes.io/docs/concepts/storage/storage-classes/
[3] https://kubernetes.io/docs/concepts/storage/persistent-volumes/

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.