浅谈Kubernetes 持久化存储管理
2022-11-29 08:05:48Kubernetes通过PV、PVC、StorageClass、CSI标准构建了一套完善的存储管理机制,G行充分利用Kubernetes资源对象,并针对行内现状,引入多种存储类型和对应的CSI存储插件,实现了多种CSI并行及自动化容器存储管理。
一、引言
Kubernetes从版本1.0以后,引入了两个新的API 资源:PersistentVolume 和 PersistentVolumeClaim 实现了对存储供应的独立管理。持久卷(PersistentVolume,PV)是对存储资源在集群中的抽象;持久卷声明(PersistentVolumeClaim,PVC)则是用户对存储资源的请求。尽管PV和PVC已经实现了对用户存储资源请求的管理,但是管理员仍需手动创建各种类型的PV 实现对用户的存储供应。为了实现存储资源的动态供应,Kubernetes从版本1.4以后就引入了存储类(StorageClass)资源。自1.9版本以后,Kubernetes又引入了容器存储接口(Container Storage Interface CSI),将存储驱动代码从Kubernetes的核心库中剥离了出来,在Kubernetes和外部存储间引入了一套标准的存储管理接口,使得外部存储可以通过实例化该接口动态为容器提供存储资源。本文将从上述资源对象入手,对Kubernetes的存储管理进行简要说明,并简述G行在容器存储管理上的实践。
二、PV和PVC
PV(PersistentVolume) 是集群中存储资源,一般由管理员创建或者由StorageClass自动创建。他们不同于普通的volume,其生命周期独立于Pod存在。PV主要包括了存储能力、访问模式、存储类型、回收策略、后端存储类型等关键信息的描述。下文我们来创建一个PV,YAML如下:
针对这个例子,我们来对PV的关键属性进行简要描述:
PVC 是用户对存储资源的申请,主要包括了存储空间请求、访问模式、选择条件和存储类别等信息的描述。集群根据PVC的描述为其选择匹配的PV进行绑定。下面我们来创建一个PVC,YAML如下:
针对这个例子,我们来对PVC的关键属性进行简要描述:
PVC根据上述属性描述选择与之匹配的PV进行绑定,需要注意的是,PVC只会在相同的Namespace内选择PV,同样的,Pod也只能挂载相同的Namespace的PVC。只有当PVC选择到合适的PV时,才可以被Pod进行正常挂载,示例如下:
3、PV和PVC的生命周期
PV生命周期的各个阶段:
PV和PVC的相互关系如下图1所示的生命周期:
图1
Kubernetes提供了两种存储资源的供应模式:
静态模式:集群管理员必须联系存储管理员手动来创建新的存储卷, 然后在 Kubernetes 集群创建 PersistentVolume 对象来表示这些卷,最后用户创建PVC进行绑定。
动态模式:集群管理员无需手动创建PV卷,通过配置StorageClass来实现对存储类的管理和资源的动态供应。用户申请PVC时,指定StorageClassName,对应的StorageClass将会自动完成对应存储类的存储卷创建以及Kubernetes集群中PV的创建。若StorageClassName声明为””, 则说明该PVC禁止使用动态模式。
三、StorageClass和CSI
1、StorageClass
动态供应模式主要基于StorageClass对象实现,集群管理员可以针对不同的存储类型创建不同的StorageClass,对用户屏蔽了底层存储的细节。基于StorageClass的动态存储供应逐步成为了云平台的标准存储配置模式。StorageClass主要包括了存储提供者以及相关存储参数的配置。StorageClass一旦创建,则不能被修改,只能删除重建。示例如下:
示例声明一个名为standard,由Kubernetes.io/aws-ebs提供的存储类。
StorageClass提供了存储动态供应的功能,但是各种后端存储插件的代码都必须被放入Kubernetes的主干代码中以供调用,这种紧耦合的开发模式,导致了巨大的维护成本和诸多问题。因此Kubernetes基于上述考虑,推出了容器存储接口标准(CSI)。各存储提供方自行维护自己的存储插件代码,只要满足CSI 标准,即可让Kubernetes进行调用,无需再耦合在Kubernetes的主干代码中。CSI 存储插件的标准实现主要包含两种组件:
Controller Plugin:Controller主要实现存储资源和存储类的管理,一般为单实例部署,可以部署在任意节点上。
Node Plugin:主要实现对Node上存储卷的管理和操作,包括卷的挂载、卸载等,一般部署为Daemonset,每个Node上运行一个Pod。
四、G行的容器存储管理实践
1、背景
G行在云平台3.0之前已经引入了集中式NAS存储,在用户需要申请PV卷时,需要先向存储管理员提出申请,然后由存储管理员在存储端按用户需求创建一块存储卷,再由系统管理员在集群中手动创建PV卷完成资源交付,最后用户在系统中创建PVC完成资源申请,流程如下图2所示:
图2
从上述流程描述可以看出,整个过程中需要大量人为介入,缺乏自动化。Kubernetes本身提供了StorageClass 用于支持资源的动态创建,因此G行考虑在现有基础上引入CSI存储插件,实现了自动化存储交付。并在原有的基础上,引入了高性能本地存储和分布式SAN存储,扩充了存储资源类型。
2、CSI的部署与实践
图3
CSI的部署过程如上图3所示,过程相对比较复杂,每次Kubernetes集群创建后,若都需要手动部署CSI插件,无疑会增加系统运维的成本。G行在此基础上引入APP标准化交付框架,将Kubernetes的集群创建操作,以及CSI插件的部署进行了集成,实现了Kubernetes集群的一键化创建,标准化交付。当集群创建完成后,相应的CSI插件及StorageClass就已经自动完成了部署,用户即可直接使用。
集群中已经部署好用户所需的StorageClass,存储资源申请只需直接创建PVC即可,示例如下:
刚创建完的PVC的状态为Pending。

CSI的Controller会Watch kube-apiserver,检测StorageClass的provisioner为自身的PVC的变化,当感知到PVC的创建后,会自动去存储端进行存储卷的创建,存储卷创建完以后,Controller会自动在集群中创建PV。
图4
整个过程结束后,可以在集群中看到PV已经被成功创建,PVC的状态已经变为了Bound。
从图4上述过程可以看出,用户申请存储资源的整个流程中,无需存储管理员和集群管理员手动干预,即可自动存储资源交付。
3、使用CSI支持动态扩容
在云平台3.0中,G行在云平台3.0中的引入了高性能本地存储和分布式SAN存储,这两类存储在存储层基于KVM动态扩容技术可实现对后端存储卷的动态扩容。在容器平台中,G行对相应的CSI Controller进行了升级优化,实现了EXPAND_VOLUME的功能,响应用户的扩容需求。当CSI Controller在Watch到相应的修改后,会调用存储后端接口对相应的存储卷和PV卷进行扩容,并对文件系统根据相应设置进行调整。
首先在存储插件部署时,需要将StorageClass的allowVolumeExpansion字段设置为True,开启动态扩容,StorageClaas配置示例如下:
对于正在运行中的业务,若用户有扩容需求,无需卸载其使用的PV卷,直接修改PVC的requests大小,CSI Controller则立即尝试调用存储后端接口对相应的存储卷和PV卷进行扩容,后端存储在接收到扩容需求后,调用virsh blockresize命令调整存储卷大小,并将处理结果返回给CSI Controller。CSI Controller确认存储卷已经扩容后,找到当前存储卷所挂载的node节点,请求相应的node节点上的CSIDaemonset对扩容卷进行resize,将扩容的容量扩充进文件系统中。至此,用户的动态扩容需求就完成了。整个扩容流程,用户无需暂停业务,业务连续性和稳定性得到了保障。
4、多种CSI并行
G行在云平台3.0中支持了集中式NAS存储、高性能本地存储和分布式SAN存储,并针对这三类存储类进行了性能测试,针对测试结果梳理了相应的用户使用场景,部分测试数据如下(测试数据仅供参考):
集中式NAS存储:作为文件存储,读写性能弱于块存储,原生支持文件系统的多节点读写,适用于有文件共享需求的用户使用。
分布式SAN存储:分布式块存储,读写性能好。在存储模式为Filesystem时不支持多节点读写,适用于对存储性能要求较高,无共享存储需求的用户使用。
高性能本地存储:本地块存储,读写性能好。同样不支持Filesystem存储模式下的多节点读写,适用于单存储卷容量300G以下,无共享存储需求,对存储性能要求高的用户使用。
五、总结
Kubernetes通过PV、PVC、StorageClass、CSI标准构建了一套完善的存储管理机制,G行充分利用Kubernetes资源对象,并针对行内现状,引入多种存储类型和对应的CSI存储插件,实现了多种CSI并行及自动化容器存储管理。存储管理员和系统管理员无需再手动创建存储卷和PV卷,只需在项目创建之初,针对不同的存储类(StorageClass)给项目分配存储配额。用户需要时,可直接创建PVC,CSI 控制器会根据用户的PVC参数,调用存储端接口,自动创建存储卷以及PV卷,实现了用户的即时申请,即时可用,当用户有扩容需求时,现有CSI控制器也可支持PV卷的动态扩容,无需管理员手动调整。相比静态交付管理的模式,集群管理员无需预先配置存储,既降低了人力成本,又提升了交付效率和业务的连续性。同时,多种存储类的引入也满足了不同使用场景下的用户需求。
怎么在kubernetes里面搭建hadoop集群
Kubernetes是一个开源项目,它把谷歌的集群管理工具引入到虚拟机和裸机场景中。 它可以完美运行在现代的操作系统环境(比如CoreOS和Red Hat Atomic),并提供可以被你管控的轻量级的计算节点。 Kubernetes使用Golang开发,具有轻量化、模块化、便携以及可扩展的特点。 我们(Kubernetes开发团队)正在和一些不同的技术公司(包括维护着Mesos项目的MesoSphere)合作来把Kubernetes升级为一种与计算集群交互的标准方式。 Kubernetes重新实现了Google在构建集群应用时积累的经验。 这些概念包括如下内容:Pods:一种将容器组织在一起的方法;Replication Controllers:一种控制容器生命周期的方法(译者注:Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行);Labels:一种可以找到和查询容器的方法;Services:一个用于实现某一特定功能的容器组;因此,只要使用Kubernetes你就能够简单并快速的启动、移植并扩展集群。 在这种情况下,集群就像是类似虚拟机一样灵活的资源,它是一个逻辑运算单元。 打开它,使用它,调整它的大小,然后关闭它,就是这么快,就是这么简单。 Mesos和Kubernetes的愿景差不多,但是它们在不同的生命周期中各有不同的优势。 Mesos是分布式系统内核,它可以将不同的机器整合在一个逻辑计算机上面。 当你拥有很多的物理资源并想构建一个巨大的静态的计算集群的时候,Mesos就派上用场了。 有很多的现代化可扩展性的数据处理应用都可以在Mesos上运行,包括Hadoop、Kafka、Spark等,同时你可以通过容器技术将所有的数据处理应用都运行在一个基础的资源池中。 在某个方面来看,Mesos是一个比Kubernetes更加重量级的项目,但是得益于那些像Mesosphere一样的贡献者,Mesos正在变得更加简
车间5S管理论文
浓硝车间5S管理试运行与持久性思考0 前言2008年新系统大修,股份公司首次推行了5S管理的试点。 浓硝车间按照要求把5S管理的精神贯穿运用到此次检修中,具体落实到每项工作任务上。 通过检修期间的试行证明,无论是5S本身的管理效果,还是通过5S管理为检修工作提供的便捷上,都取得了一定成效。 但也从中显现出存在的问题和急待改进的方面。 1 5S管理试运行工作概况首先,车间制定了5S管理考核办法。 通过全车间范围内5S管理的试行,切实感觉到其实质是对员工日常行为的规范,其精髓是培养员工的修养和素质。 车间在试行初期,就着力加强宣传教育,让每位员工知晓5S管理是什么, 5S管理的意义等。 由于是大修期间,检修项目繁重,人员无法集中,便采取了在检修现场结合具体物件向员工宣传的方式。 比如F扳手应该放哪儿、为什么这样放、有什么好处等。 通过这种因地制宜的教与学方式,形象直观地向员工宣传了5S管理的具体内容。 其次,按5S管理要求设置出各类物品的分类放置点。 如棉纱手套放置点、各类文件检修票证放置点、员工日杂用品放置点等,目的是努力将5S管理具体化。 在具体工作中,不但要求员工严格按照物品放置点放置物品,还要求物件整齐与整洁。 通过这种直观明了的方式,让员工亲身体会5S管理为各项工作开展所带来的便捷,加深员工的认识与理解,让员工适应其管理模式,为下一步深入开展打好基础。 再次,除了要求员工自己按照5S管理规定执行外,还要求检修现场其他施工单位和作业人员严格工作票制度、严格场地清理以及各类物品的规范放置等,以更好地服务检修工作,全面达到安全环保、高质高效的要求。 通过检修期间的试行, 5S管理在浓硝车间取得了初步成效。 2 试运行存在的问题与改进措施通过检修期间的试行,也显现出不少客观存在的问题和亟待改进的地方。 首先是对员工的宣传教育和提高认识上。 仅仅依靠现场对员工的宣传还远远不够,很大一部分员工虽然明白了什么是5S管理,但无法短时期内在思想上理解认可,在行动上自觉遵守,这无疑影响了5S的实施效果和真正意义。 在试行期间,仍有部分员工不按5S管理要求规范放置物品,管理难度较大,效果较差。 并且要提高员工的意识和素养,更不是短时期内能够做到的。 所以浓硝车间在今后5S管理过程中,要长期、系统、有计划、有针对性地开展对员工的宣传教育工作,努力从思想上提高员工的认识和理解。 只有这样才能将5S工作持久开展下去。 其次是物品放置点的合理性上。 车间在试行期间定制出了近10类物品放置点。 应该说这些物品放置点的设定还比较粗略,分类不够具体、规范、适用。 如果放置点不适用不方便的话,是无法让员工将5S管理制度落到实处的,这极大地影响了管理效果。 在试行期间,已经有员工提出了更加合理适用的建议,车间也结合实际情况不断进行了改进。 再有就是车间很多硬件设施无法达到5S物品放置点的要求,不少物品虽设置了放置点,但由于受场地情况和硬件设施的限制,无法真正落实这类物品的规范放置。 再次是检修现场的5S管理方面。 主要表现为检修现场的管理难度大,管理效果差。 其根源还是在于各检修单位的作业人员没有真正去理解5S管理的意义,在思想意识上达不到管理要求,甚至还有某些抵触情绪。 由于检修现场外单位的检修项目多、人员杂、人员素质参差不齐,导致5S管理无法有效开展。 比如个别检修单位在施工过程中不能严格工作票制度,现场脏乱无序,工器具随手乱堆乱放,作业完后场地不清理等。 针对这类违规违章现象,浓硝车间重点对工作票证的签订和现场具体的检修工作进行了检查和整治,但效果始终不理想,这也直接导致了无法行之有效地执行5S管理。 所以要真正做到将5S管理长期有效地开展下去,整体性地提高员工的意识和素养势在必行。 最后,通过5S管理试运行说明,车间须制定出一套行之有效并且具有可操作性的管理规定以及考核奖惩制度,建立和完善如“浓硝车间5S运行管理制度及考核细则”等管理考核记录台帐,全面反映5S管理过程和轨迹,以此将5S管理具体化、规范化。 并不断收集员工建议,根据实际情况来完善和改进,从而达到行之有效执行5S管理要求,更好地服务生产的目的。 但应该明确的是,奖惩制度并不是5S管理的最佳手段和方式,而是期望通过奖与惩,让员工明白对与错,并最终形成员工的自觉行为,从而达到提高素养的目的。 3 5S管理持久性的思考目前公司正大力地全面推行5S现场管理活动。 浓硝车间根据活动要求,结合浓硝工艺生产特点、员工实际情况及前期工作的经验和不足,成立了专项领导小组,明确了各级成员的职责和下阶段的工作重点,制定了可操作性的管理制度、工作计划和考核细则,运用有效的管理督促机制,多管齐下,找出差距,查出问题,重点解决工作中的薄弱环节,力求在工作深度、实施力度、参与广度上拓展。 应该说,对于一个化工企业,实施5S管理本身就具有相当的难度。 要做细做实5S管理工作,还必须在以下4个方面下足工夫:(1)思想意识方面5S管理不是简单的5个单词,不是谈起来重要,做起来次要,忙起来不要的环节,它是生产现场基础管理的基石,是提高员工素养,打造团队精神,改善安全生产环境,确保产品质量,铸造企业形象,提升企业综合竞争实力的行之有效的方法和途径。 因此,我们应该在思想意识上高度认识这个活动的重大意思及所产生的深远影响,彻底摒弃“方便”、“省事”、“差不多”这些根深蒂固的旧思想,认真对待,扎实做好。 (2)行为习惯方面5S活动是一项“知易行难”的工作。 一些看似简单的事情,我们要真正做好却并不容易,做好了要保持更加困难。 因此,在5S活动中,“持之以恒”和“经常”是我们应该高度重视的两个方面。 每一次的整理、整顿、清扫、清洁都不是简单的过程,而是对自己工作的回顾、总结、改进和提高。 通过经常性地整理、整顿、清扫、清洁,使之成为一种工作习惯,进而形成良好的工作作风,再进而提高个人素养,并最终达到5S管理的终极目标。 (3)枝细末节方面在5S管理中,“细节”是该活动核心。 化工企业高温高压、易燃易爆、有毒有害,任何一个细节的忽略都可能是场机毁人亡的安全事故。 因此,我们做的任何工作都不允许有一点差错,任何一道工序都必须高度重视。 正所谓“差之毫厘,失之千里”,只有狠抓细节,才能精保质量;只有精、细、严、实的管理,才能夯实我们企业的根基。 (4)员工素养方面从5S推进图可以看出,整理、整顿、清扫、清洁的对象是场地和物品,而素养的对象则是人。 人是企业兴盛的关键之所在。 整理、整顿、清扫、清洁的目的不仅是将东西摆好、将设备擦干净、将卫生做整洁,也不仅是应付领导检查,而是通过这些细小繁琐的工作,潜移默化地改变员工思想,培养责任心,养成做事一丝不苟、精益求精、尽善尽美的良好习惯,培养员工爱岗敬业的崇高精神,并使之成为员工自觉自愿的行为和准则。 当我们形成共识,从最基本的层面踏实做好5S管理工作,并从中培养广大员工的工作素养,我们就能依靠管理创新,稳步迈上新的台阶,迎来公司蒸蒸日上的明天。
发表评论