基于Kubernetes的动态存储类管理方法及装置
技术领域
本发明涉及kubernetes集群技术领域,具体地说是基于Kubernetes的动态存储类管理方法及装置。
背景技术
Kubernetes用于管理云平台中多个主机上的容器化的应用,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。Kubernetes具有快速部署应用、快速扩展应用、无缝对接新的应用功能、节省资源、优化硬件资源的使用等优点。
kubernetes功能包括多个pod协同工作、存储系统挂载、应用健康检测、应用实例的复制、Pod自动伸缩/扩展、注册与发现、负载均衡、滚动更新、资源监控、日志访问、调试应用程序以及提供认证和授权等。
在Kubernetes中,存储是非常重要的一个领域。Kubernetes支持的存储一般分为临时存储和持久化存储。临时存储包括empty-dir,host-path,configmap,secret等。持久化存储包括rbd,cinder,nfs等。存储又分为静态存储和动态存储。静态存储手动创建pv,pvc,pod创建时挂载volume选择pvc。而动态存储就是通过存储类实现的。存储类关联存储卷供应,在创建pod时指定存储类动态创建pvc,关联后端存储来实现持久化。Kubernetes集群管理员通过提供不同的存储类,可以满足用户不同的服务质量级别、备份策略和任意策略要求的存储需求。动态存储卷制备器使用StorageClass进行实现,其允许存储卷按需被创建。如果没有动态存储制备器,Kubernetes集群的管理员将不得不通过手工的方式类创建新的存储卷。通过动态存储卷,Kubernetes将能够按照用户的需要,自动创建其需要的存储。每一个存储类都包含provisioner、parameters和reclaimPolicy这三个参数域,这些字段会在StorageClass需要动态分配PersistentVolume时会使用到。当一个属于某个类的PersistentVolume需要被动态提供时,将会使用上述的参数域。存储类对象的名称非常重要,用户通过名称类请求特定的存储类。管理员创建存储类对象时,会设置类的名称和其它的参数,存储类的对象一旦被创建,将不能被更新。每个StorageClass都有一个制备器(Provisioner),用来决定使用哪个卷插件制备pv,该字段必须指定。当StorageClass的allowVolumeExpansion字段设置为true时,以下类型的卷支持卷扩展,比如rbd,cinder,glusterfs等。管理员能够为pvc指定一个默认的存储类。在一般kubernetes集群中会默认创建一种存储类作为默认存储类,存在如下问题:
(1)当存储类关联后端存储不可用时,那么pod将会创建不起来;
(2)如果创建两个存储类作为主备的话,也无法实现动态切换默认存储类;
(3)如果默认存储类后端存储出现问题,用户不可知;
(4)如何做到用户对存储类不感知,不影响业务的部署。
基于上述分析,如何在默认存储卷有问题时,能做到自动切换备用存储类,如何实现存储类高可用,且用户不感知默认存储类的切换,对pod的创建无影响,是需要解决的技术问题。
发明内容
本发明的技术任务是针对以上不足,提供基于Kubernetes的动态存储类管理方法及装置,来解决如何在默认存储卷有问题时,能做到自动切换备用存储类,如何实现存储类高可用,且用户不感知默认存储类的切换,对pod的创建无影响的技术问题。
第一方面,本发明提供基于Kubernetes的动态存储类管理方法,包括如下步骤:
创建并配置Kubernetes集群,所述Kubernetes集群包括控制节点和计算节点,Kubernetes集群内部署有ceph集群;
创建并配置rbd存储类,作为默认存储类;
创建并配置local-path存储类,作为本地备份存储类;
创建存储类监控应用,所述存储类监控应用部署于Kubernetes集群内部;
通过存储类监控应用周期性监控rbd存储类和local-path存储类的健康状态;
如果rbd存储类和local-path存储类均正常,通过rbd存储类创建pod挂载pvc;
如果ceph集群异常、local-path存储类正常,存储类监控应用动态切换默认存储类为local-path存储类,通过local-path存储类创建pod挂载volunms,Kubernetes集群上报存储类切换event,并上报ceph异常告警;
如果ceph集群以及local-path存储类均异常,Kubernetes集群上报ceph告警并上报local-path告警。
作为优选,创建并配置Kubernetes集群,包括如下步骤:
创建Kubernetes集群,所述Kubernetes集群包括至少一个控制节点和至少一个计算节点;
在Kubernetes集群内部署ceph集群;
在Kubernetes集群节点上加载rbd模块modprobe rbd;
测试Kubernetes集群健康状态,判断Kubernetes集群是否可用,各个osd节点是否正常;
在Kubernetes集群内安装rbd-provisioner,为rbd-provisioner配置cephmonitor的IP地址,获取ceph集群的key,base64编码后创建相关的secret,配置adminsecret,配置镜像格式并配置镜像特征。
作为优选,通过rook方式部署ceph集群。
作为优选,通过helm方式安装安装rbd-provisioner。
作为优选,创建并配置rbd存储类,包括如下步骤:
创建rbd存储类,配置配置provisioner参数为ceph.com/rbd;
reclaimPolicy配置为保留,allowVolumeExpansion配置为允许自动扩展,volumeBindingMode绑定模式配置为立即绑定;
注解里storageclass.kubernetes.io/is-default-class设置为true,指定rbd作为默认存储类;
通过默认存储类创建pvc,创建pod模板,配置volumeMounts和volumes,挂载上述创建的pvc,测试pod能否挂载成功以及能否正常运行。
作为优选,创建并配置local-path存储类,包括如下步骤:
创建Local Path Provisioner,作为一种local pv,Local Path Provisioner部署形态为damonset,部署在每个工作节点上,在部署脚本中指定节点的存储路径;
配置Local PathProvisioner节点存储路径以及权限;
创建Local Path存储类,配置存储类provisioner参数为rancher.io/local-path,配置volumeBindingMode绑定模式为WaitForFirstConsumer;
创建local-path pvc绑定local-path存储类,创建测试pod挂载local-path pvc,观察挂载是否成功以及pod是否正常运行。
第二方面,本发明提供装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行第一方面任一所述的方法。
第三方面,本发明提供计算机可读介质,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行第一方面任一所述的方法。
本发明的基于Kubernetes的动态存储类管理方法及装置具有以下优点:
1、实现kubernetes的存储类高可用,当默认存储类不可用的时候,可以自动切换备用存储类为默认存储类,使得在业务部署时候可以不需要关注存储类,对业务无感知;
2、对于异常,Kuebernetes集群及时上报,便于后续纠察。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
下面结合附图对本发明进一步说明。
图1为实施例1基于Kubernetes的动态存储类管理方法的流程框图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
本发明实施例提供基于Kubernetes的动态存储类管理方法及装置,用于解决如何在默认存储卷有问题时,能做到自动切换备用存储类,如何实现存储类高可用,且用户不感知默认存储类的切换,对pod的创建无影响的技术问题。
实施例1:
本发明基于Kubernetes的动态存储类管理方法,包括如下步骤:
S100、创建并配置Kubernetes集群,所述Kubernetes集群包括控制节点和计算节点,Kubernetes集群内部署有ceph集群;
S200、创建并配置rbd存储类,作为默认存储类;
S300、创建并配置local-path存储类,作为本地备份存储类;
S400、创建存储类监控应用,所述存储类监控应用部署于Kubernetes集群内部;
S500、通过存储类监控应用周期性监控rbd存储类和local-path存储类的健康状态;
S600、如果rbd存储类和local-path存储类均正常,通过rbd存储类创建pod挂载pvc;
如果ceph集群异常、local-path存储类正常,存储类监控应用动态切换默认存储类为local-path存储类,通过local-path存储类创建pod挂载volunms,Kubernetes集群上报存储类切换event,并上报ceph异常告警;
如果ceph集群以及local-path存储类均异常,Kubernetes集群上报ceph告警并上报local-path告警。
本实施例中步骤S100中,创建并配置Kubernetes集群,该Kubernetes集群中包括一个控制节点三个工作节点。在Kubernetes集群中使用rook方式部署ceph集群;在kubernetes集群节点上需要加载rbd模块modprobe rbd;安装rbd-provisioner,为rbd-provisioner配置ceph monitor的IP地址,获取ceph集群的key,base64编码后创建相关的secret,配置admin secret,配置镜像格式,配置镜像特征等。
步骤S200中,创建rbd存储类,配置provisioner参数为ceph.com/rbd。reclaimPolicy配置为保留,allowVolumeExpansion,配置为允许自动扩展。volumeBindingMode绑定模式配置为立即绑定。注解里storageclass.kubernetes.io/is-default-class需要设置为true,需要指定rbd作为默认存储类。使用默认存储类创建pvc,创建pod模板,配置volumeMounts和volumes,挂载刚才创建的pvc,测试pod能否挂载成功,能否正常运行。
步骤S300具体包括如下步骤:
(1)创建Local Path Provisioner,作为一种local pv,kubernetes可以使用本地磁盘作为持久化存储。同时创建存储和节点绑定,建立粘滞关系,pod删除后再次调度,依然会调度到第一次选择调度的节点上。Local Path Provisioner部署形态为damonset,部署在每个工作节点上,在部署脚本中指定节点的存储路径;
(2)配置Local PathProvisioner节点存储路径,权限等,配置local-path存储类绑定模式数据卷保存策略;
(3)创建Local Path存储类,配置存储类provisioner参数为rancher.io/local-path,配置volumeBindingMode绑定模式为WaitForFirstConsume-r;
(4)创建local-path pvc绑定local-path存储类,创建测试pod挂载local-pathpvc,观察挂载成功,pod是否正常运行,此时kubernetes集群中运行2个存储类,rbd为默认存储类,local-path为备用存储类。
步骤S400至步骤S600检测rbd存储类以及local-path存储类并进行切换,具体步骤为:
(1)创建一个存储类监控应用,部署在kubernetes集群内部;
(2)以deployment方式部署应用,部署形态为多副本机制;
(3)该监控应用周期性监控rbd存储类和local-path存储类的健康状态,通过http方式或者tcp socket方式查看响应值,评估这两个存储类的健康状态;
(4)如果rbd存储类和ceph集群状态正常;
(5)默认用rbd存储类去创建pod挂载pvc;
(6)如果ceph集群异常,那么rbd存储类则不可用,那么就无法用默认存储类创建pod;
(7)存储类监控,负责修改默认存储类标识,自动修改存储类环境;
(8)默认存储类从rbd存储类切换为local-path存储类。
(9)创建pod模板,部署到kubernetes集群,观察pod的运行状态。查看后端local-path存储是否可用;
(10)存储类监控器上报kubernetes event到etcd,上报默认存储类切换事件,同时上报告警到监控平台;
(11)存储类监控如果检测到ceph异常,local-path异常;
(12)存储类监控负责上报ceph和local-path异常告警。
实施例2:
本发明的装置,包括:至少一个存储器和至少一个处理器;
所述至少一个存储器,用于存储机器可读程序;
所述至少一个处理器,用于调用所述机器可读程序,执行本发明实施例1公开的方法。
实施例3:
本发明的一种计算机可读介质,上述计算机可读介质上存储有计算机指令,上述计算机指令在被处理器执行时,使所述处理器执行实施例1公开的方法。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或CPU或MPU)读出并执行存储在存储介质中的程序代码。
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上下载程序代码。
此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的CPU等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。