Kubernetes使用Ceph静态卷部署应用

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

Kubernetes使用Ceph静态卷部署应用

1. kubernetes 中的存储方案

对于有状态服务,存储是一个至关重要的问题。k8s提供了非常丰富的组件来支持存储,这里大致列一下:

  • volume: 就是直接挂载在pod上的组件,k8s中所有的其他存储组件都是通过volume来跟pod直接联系的。volume有个type属性,type决定了挂载的存储是什么,常见的比如:emptyDir,hostPath,nfs,rbd,以及下文要说的persistentVolumeClaim等。跟docker里面的volume概念不同的是,docker里的volume的生命周期是跟docker紧紧绑在一起的。这里根据type的不同,生命周期也不同,比如emptyDir类型的就是跟docker一样,pod挂掉,对应的volume也就消失了,而其他类型的都是永久存储。详细介绍可以参考Volumes
  • Persistent Volumes:顾名思义,这个组件就是用来支持永久存储的,Persistent Volumes组件会抽象后端存储的提供者(也就是上文中volume中的type)和消费者(即具体哪个pod使用)。该组件提供了PersistentVolume和PersistentVolumeClaim两个概念来抽象上述两者。一个PersistentVolume(简称PV)就是后端存储提供的一块存储空间,具体到ceph rbd中就是一个image,一个PersistentVolumeClaim(简称PVC)可以看做是用户对PV的请求,PVC会跟某个PV绑定,然后某个具体pod会在volume 中挂载PVC,就挂载了对应的PV。关于更多详细信息比如PV,PVC的生命周期,dockerfile 格式等信息参考Persistent Volumes
  • Dynamic Volume Provisioning: 动态volume发现,比如上面的Persistent Volumes,我们必须先要创建一个存储块,比如一个ceph中的image,然后将该image绑定PV,才能使用。这种静态的绑定模式太僵硬,每次申请存储都要向存储提供者索要一份存储快。Dynamic Volume Provisioning就是解决这个问题的。它引入了StorageClass这个概念,StorageClass抽象了存储提供者,只需在PVC中指定StorageClass,然后说明要多大的存储就可以了,存储提供者会根据需求动态创建所需存储快。甚至于,我们可以指定一个默认StorageClass,这样,只需创建PVC就可以了。

2. 环境准备

可用的kubernetes
可用的Ceph集群
Ceph monitor节点:lab1、lab2、lab3

在每个k8s node中安装yum install -y ceph-common

3. CephFS方式部署容器

3.1 创建Ceph admin secret

3.2 创建pv

vim cephfs-pv.yaml

3.3 创建pvc

vim cephfs-pvc.yaml

3.4 部署验证

vim cephfs-nginx.yaml

验证结果:

4. RBD方式部署容器

4.1 创建Ceph admin secret

4.2 创建Ceph pool 和Image

4.3 创建pv

vim rbd-pv.yaml

4.4 创建pvc

vim rbd-pvc.yaml

4.5 部署验证

vim rbd-nginx.yaml

验证结果:

进入容器使用dd测试,发现容器容易挂。而且经过验证,容器挂载的目录大小取决于rbd image的大小
dd if=/dev/zero of=/usr/share/nginx/html/test.data bs=1G count=8 &

参考资料:
[1] https://kubernetes.io/docs/concepts/storage/volumes/
[2] https://kubernetes.io/docs/concepts/storage/persistent-volumes/
[3] https://zhangchenchen.github.io/2017/11/17/kubernetes-integrate-with-ceph/

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

发表评论

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