首页 > 服务配置 > linux工匠之kubernetes使用ceph块存储
2018
02-27

linux工匠之kubernetes使用ceph块存储

说明

接上篇文章linux工匠之ceph存储集群实验,ceph官方文档中介绍Ceph FS 还不像 Ceph 块设备和 Ceph 对象存储那么稳定,所以我们用ceph块存储作为kubernetes的存储

kubernetes node节点主机操作:
kubernetes node节点需要安装ceph,

ceph-deploy主机操作:
ceph块存储主机名为ceph-client,在ceph-deploy节点部署配置,并把ceph.client.admin.keyring推送到kubernetes node节点主机

查看admin.keyring的base64格式,因为ceph-secret.yaml配置文件需要

新建块设备

ceph块存储主机操作:
创建一个2G大小的块设备

kubernetes主节点操作:

创建ceph配置

验证块设备挂载

kubernetes node节点查看挂载情况

上面即ceph块设备作为kubernetes的存储,不过有个问题是当这个节点被删除后,挂载的内容也将丢失。为了容器重建后仍然可以使用之前的数据,kubernetes从v1.0版本引入PersistentVolumePersistentVolumeClaim两个资源对象来实现对存储的管理。
PV是存储资源,包括存储能力(比如空间大小、IOPS)、访问模式(读写权限)、存储类型(StorageClass)、回收策略(保存、删除、回收空间)、后端存储类型等信息的设置。kubernetes支持PV类型有AWSElasticBlobStore、NFS、RBD(ceph块存储)、GlusterFS等
PVC是用户对存储资源的申请,即包括存储空间大小和访问模式(读写权限)、PV选择条件(通过Label Selector设置对PV筛选,根据标签选合适的PV与PVC进行绑定)、存储类型(StorageClass)
StorageClass是对存储资源的抽象定义,作用是屏蔽设置PVC等后端存储细节,由系统自动完成PV的创建和绑定,实现动态的资源供应,减少我们的工作。StorageClass包括名称、后端存储提供者、后端存储参数。一旦被创建出来将无法修改,只能删除。

PV和PVC模式存储

ceph-secret还是用上面那个ceph-secret.yaml,删除rbd.yaml

ceph-client块存储主机操作:

kubernetes node节点查看挂载情况

kubernetes master节点删除ceph-pod,再创建,查看里面的文件是否丢失

kubernetes node节点验证存储数据是否存在,下面证明存储的数据已经保留

上面虽然设置的存储是1g,不过我测试写入文件可以超过1g

如果存储资源使用的是动态模式,即没有预先定义PV,仅通过StorageClass交给系统自动完成PV的动态创建,那么PVC再设定Selector时,系统无法分配存储资源。如需保留PV(用户数据),则在动态绑定后,需要将PV的回收策略从Delete改为Retain

StorageClass模式存储

使用StorageClass模式不用预先创建固定大小的PV,直接配置PVC即可
先删除上面创建的PV、PVC、pod、ceph-secret

创建独立的rbd存储

StorageClass配置

下面是pv、pvc、pod配置文件

配置文件如上

创建PVC

遇到错误:failed to create rbd image: executable file not found in $PATH,安装ceph-common也不行,因为kube-controller-manager使用容器方式运行,容器里面找不到rbd命令,也有把kube-controller-manager变为主机服务方式运行成功的,即:

3个方法:
1,用封装好的rbd运行在kubernetes节点上面,即第三方rbd-provisioner
2,kube-controller-manager由docker运行变为主机服务方式在master节点运行

3,更换kube-controller-manager镜像为quay.io/coreos/hyperkube

如果是kubernetes集群是主机安装模式(kubernetes不是docker运行)就不会有这个问题。另一个解决方法是用封装好的rbd运行在kubernetes节点上面,详见:

RBD Volume Provisioner for Kubernetes

rbd-provisioner服务是需要运行在kubernetes master节点(node节点运行会失败),master节点需要允许建立节点

参考链接:

ceph troublesshoot

Error creating rbd image: executable file not found in $PATH 

在Kubernetes中使用Sateful Set部署Redis

Kubernetes Storage Class

最后编辑:
作者:bbotte

留下一个回复

你的email不会被公开。