像Kubernetes 这样的容器编排工具正在彻底改变应用程序的开发和部署方式。随着微服务架构的兴起,以及基础架构与应用程序逻辑从开发人员的角度解耦,开发人员越来越关注构建软件和交付价值。

Kubernetes 对管理的物理机器进行抽象。使用Kubernetes,你可以通过描述获取所需的内存总量和计算能力,而无需担心底层基础架构。

在管理Docker 镜像时,Kubernetes 还让应用程序变得可移植。一旦使用Kubernetes 开发容器化架构,它们就可以部署在任何地方 - 公有云、混合云、本地 - 无需对底层代码进行任何更改。

虽然Kubernetes 在许多方面非常有用,例如可伸缩性、可移植性和管理能力,但它不支持存储状态。几乎所有的生产应用程序都是有状态的,即需要某种外部存储。

Kubernetes 的架构是不断变化的。容器的创建和销毁,取决于负载和开发人员的规范。容器组和容器可以自我修复和复制。从本质上讲,它们的生命周期是短暂的。

但是,持久化存储解决方案无法承受这种动态行为。持久化存储不能绑定到动态创建和销毁的规则上。

当有状态应用需要部署在另一个基础架构,可能是另一个云提供商、本地或混合模型上时,它们在可移植性方面面临挑战。持久化存储解决方案会绑定到特定的云提供商。

此外,云原生应用程序的存储版图不容易理解。Kubernetes 存储术语可能会造成混淆,因为许多术语都有复杂的含义和微妙的变化。此外,在做出决策之前,开发人员必须考虑许多选项,包括原生Kubernetes、开源框架、托管或付费服务。

在下面的CNCF 版图中可以看到列出的云原生存储解决方案:

首先想到的可能就是在Kubernetes 中部署数据库:选择适合你需求的数据库解决方案,将其容器化并在本地磁盘上运行,然后将其作为另一个工作负载部署在集群中。但是,由于数据库的固有属性,这种方法不是特别好。

容器是基于无状态原则构建的。这使得容器很容易进行伸缩。由于不需要保存和迁移数据,通常来说,集群不需要处理很密集的磁盘读写操作。

使用数据库,需要保存状态。如果数据库以容器方式部署在集群上,不进行迁移或者频繁伸缩,那么实际的数据存储将起作用。理想情况下,将使用数据的容器与数据库位于同一个容器中。

这并不是说在容器中部署数据库是一个坏主意 - 在某些用例中,这种方法可能就足够了。在测试环境中,或者对于不需要生产级数据量的任务,由于所保存的数据规模较小,因此集群中的数据库可能是有意义的。

在生产中,开发人员通常依赖外部存储。

Kubernetes 如何与存储通信?它使用控制平面接口。这些接口将Kubernetes 与外部存储相关联。这些与Kubernetes 连接的外部存储解决方案称为卷插件。卷插件可以抽象存储并赋予存储可移植性。

以前,卷插件使用Kubernetes 核心代码库构建、链接、编译和发布。这极大地限制了开发人员的灵活性,并带来了额外的维护成本。添加新的存储选项需要更改Kubernetes 代码库。

通过引入CSI 和Flexvolume,可以在集群上部署卷插件,而无需更改代码库。

Kubernetes 原生和存储

Kubernetes 原生如何处理存储?Kubernetes 自身提供了一些管理存储的解决方案:临时选项、持久化存储卷、持久化存储卷声明、存储类和有状态副本集。这可能很混乱。

持久化存储卷(PV)是由管理员配置的存储单元。它们独立于任何一个容器组,使它们摆脱容器组的短暂生命周期。

另一方面,持久化存储卷声明(PVC)是对存储的请求,即PVs。使用PVC,可以将存储绑定到特定节点,使其可供该节点使用。

有两种处理存储的方法:静态和动态。

采用静态配置,管理员在实际请求之前,为他们认为可能需要的容器组提供PVs,并且通过明确指定的PVCs,将这些PV 手动绑定到指定的容器组。

实际上,静态定义的PV 与Kubernetes 的可移植结构不兼容,因为正在使用的存储可能依赖于环境,例如AWS EBS 或GCE Persistent Disk。手动绑定需要更改YAML 文件以指向特定供应商的存储解决方案。

在开发人员如何考虑资源方面,静态配置也违背了Kubernetes 的思维方式:CPU 和内存未事先分配并绑定到容器组或容器。它们是动态授予的。

动态配置使用存储类完成。集群管理员无需事先手动创建PV。他们改为创建多个存储配置文件,就像模板一样。当开发人员创建PVC 时,根据请求的要求,在请求时创建其中一个模板,并将其附加到容器组。

这是对外部存储通常如何使用原生Kubernetes 进行处理的一个宽泛的概述。但是,还有许多其他选择需要考虑。

CSI - 容器存储接口

在继续之前,我想介绍容器存储接口(CSI)。CSI 是由CNCF 存储工作组创建的统一工作,旨在定义标准容器存储接口,使存储驱动程序能够在任何容器编排器上工作。

CSI 规范已经适用于Kubernetes,并且在Kubernetes 集群上有大量驱动程序插件可供部署。开发人员可以Kubernetes 上使用CSI 卷类型访问CSI 兼容卷驱动程序公开的存储。

随着CSI 的引入,存储可以被视为另一个工作负载容器化,并在Kubernetes 集群上部署。

开源项目

围绕云原生技术的工具和项目大幅增加。作为生产环境中最突出的问题之一,有相当多的开源项目致力于解决云原生架构上的存储问题。

关于存储的最受欢迎的项目是Ceph 和Rook。

Ceph是一个动态管理,可水平扩展的分布式存储集群。Ceph 提供了对存储资源的逻辑抽象。它被设计为没有单点故障,可自我管理并基于软件。Ceph 为同一存储集群同时提供块、对象和文件系统接口。

Ceph 的架构很复杂,有许多底层技术,如RADOS、librados、RADOSGW、RDB、CRUSH 算法,以及监视器、OSD和MDS等组件。Ceph 是一个分布式存储集群,不需要深入研究其体架构,关键在于,它是一个分布式存储集群,可以更轻松地实现可扩展性,在不牺牲性能的情况下消除单点故障,并提供了对对象、块和文件的访问的统一存储。

当然,Ceph 已经适应了云原生环境。可以通过多种方式部署Ceph 集群,例如使用Ansible。可以从Kubernetes 集群中使用CSI 和PVC 接口访问部署的Ceph 集群。

另一个有趣且颇受欢迎的项目是Rook,一个旨在融合Kubernetes 和Ceph 的工具 - 将计算和存储集中在一个集群中。

Rook是一个云原生存储编排器。它扩展了Kubernetes。Rook 本质上允许将Ceph 放入容器中,并提供集群管理逻辑,以便在Kubernetes 上可靠地运行Ceph。Rook 自动化部署、引导、配置、扩展、负载均衡,即集群管理员需要做的工作。

Rook 允许通过yaml 文件部署Ceph 集群,就像Kubernetes 一样。此文件用作集群管理员在集群中所需内容的高级声明。Rook 整合集群,并开始积极监控。Rook 充当运维人员或控制器,确保yaml 文件中声明的期望状态得到保证。Rook 在一个协调循环中运行,观察状态并根据检测到的差异采取行动。

Rook 没有自己的持久化状态,也不需要管理。它的确是根据Kubernetes 的原则构建的。

Rook 将Ceph 和Kubernetes 结合在一起,是最受欢迎的云原生存储解决方案之一,在Github 上拥有近4000 颗星,1630万 下载量和100多名贡献者。

作为被CNCF 接受的首个存储项目,Rook 近期已进入孵化阶段。

对于应用程序中的任何问题,确定需求,设计系统和选择相应工具非常重要。云原生环境中的存储也不例外。虽然问题非常复杂,但仍有许多工具和方法。随着云原生世界的发展,无疑也会出现新的解决方案。

查看英文原文:https://softwareengineeringdaily.com/2019/01/11/why-is-storage-on-kubernetes-is-so-hard/

https://softwareengineeringdaily.com/2019/01/07/stateful-kubernetes-with-saad-ali/

https://i2.wp.com/softwareengineeringdaily.com/wp-content/uploads/2018/05/logo.png

Kubernetes 持久化存储是个难题,解决方案有哪些?\n相关推荐

  1. Kubernetes持久化存储Cephfs

    女主宣言 上一篇 kubernetes持久化存储Ceph RBD 介绍了Ceph RBD在kubernetes中的使用,本篇将会介绍Cephfs在kubernetes中的使用.本文最先发布于 opsd ...

  2. 干货 | 如何评估Kubernetes持久化存储方案

    在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...

  3. 如何评估Kubernetes持久化存储方案

    在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...

  4. 14、Kubernetes持久化存储

    文章目录 前言 步骤 持久化服务器上操作 设置挂载路径 Node节点上操作 PV和PVC 实现流程 举例 前言 之前我们有提到数据卷:emptydir ,是本地存储,pod重启,数据就不存在了,需要对 ...

  5. Kubernetes持久化存储PV、PVC和StorageClass介绍

    PV和PVC Kubernetes Volume提供了非常好的数据持久化方案,不过对于大型Kubernetes集群来说管理上还有不方便之处.Volume方案需要创建Pod或者Deployment的管理 ...

  6. Kubernetes 持久化存储 Cephfs

    熟悉kubernetes volume的同学应该了解,kubernetes 对volume的提供支持"静态PV"和"动态PV"两种方式. 静态PV:集群管理员创 ...

  7. K8s 或 K3s 集群中持久化存储方案选型

    存储架构 1 三个概念: pv , pvc ,storageclass pv - 持久化卷, 支持本地存储和网络存储, 例如hostpath,ceph rbd, nfs等,只支持两个属性, capac ...

  8. 四大开源分布式存储_Kubernetes持久化存储方案测试

    在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...

  9. 深入浅出聊聊Kubernetes存储(二):搞定持久化存储

    回 顾 在本系列文章的上一篇中,我们讲到了PV,PVC,Storage Class以及Provisioner 简单回顾一下: PV在最一开始是设计成了一个需要管理员预先分配的存储块.引入Storage ...

  10. 使用Ceph集群作为Kubernetes的动态分配持久化存储

    2019独角兽企业重金招聘Python工程师标准>>> 使用Docker快速部署Ceph集群 , 然后使用这个Ceph集群作为Kubernetes的动态分配持久化存储. Kubern ...

最新文章

  1. linux下常用关机命令
  2. WP评论系统更换小结(转)
  3. Qt程序打包发布方法(使用官方提供的windeployqt工具)
  4. 做个中国清官网,有人感兴趣吗
  5. Dubbo(五)之动态配置中心
  6. 源码安装nginx以及平滑升级
  7. httpd Server not started: (13)Permission denied: make_sock: could not bind to address [::]:88
  8. mysql查看表结构命令
  9. 文学系列:《叶之震颤》读书笔记
  10. java设置手指点击_java设置鼠标在jpanel时变为手指形状
  11. mysql sha1prng_为啥POST过来的
  12. 详解十三款运维监控工具
  13. 科技企业的幕后推手,人工智能究竟有何魔力
  14. c语言 万年历 蔡勒公式,C++实现简易万年历
  15. 真Unity3d_profiler调试
  16. 惊呆了!北大博士当了城管
  17. matebook13写JAVA_大上黑白电子墨水屏显示器Paperlike HD-FT使用体验
  18. python:脑残服务员和脑残和顾客上线了
  19. 你真的了解Redis单线程为什么如此之快吗?
  20. 【学习笔记】softmax回归与mnist编程

热门文章

  1. Atitit oracle新特性5 6 7 8 9 10 11 12 18 19 20 attilax总结 目录 1.1. :ora 20c 1 1.2. Oracle Database 19c 的
  2. Atitit sql注入的防范 目录 1.1. 检查数据类型 1 2. 有限操作DML 1 2.1. 限制执行函数黑名单机制 2 2.2. 限制执行系统sp 2 2.3. 限制数据查询语句类型,只能
  3. Atitit 跨语言跨平台ui界面 与界面分类 目录 1. 按照业务分类 1 1.1. 媒体类新闻类展示界面 1 1.2. 表单提交类 2 1.3. 查询类列表类(纯文列表,图文列表等 2 1.4.
  4. Atitit 命令行执行sql 跨语言 目录 1.1. 无需输入密码,那就不要-p参数即可 1 1.2. 4.使用mysql命令执行 1 1.3. 5.mysql命令执行sql,并将查询结果保存到
  5. Atitit etl之道 attilax著 1. ETL 1 1.1. (数据仓库技术) 2 1.2. ETL的质量问题具体表现为正确性、完整性、一致性、完备性、有效性、时效性和可获取性等几个特性
  6. Atitit 查询优化器的流程attilax总结
  7. Atitit.atiagent  agent分销系统 代理系统 设计文档
  8. Atitit.获取某个服务 网络邻居列表 解决方案
  9. Atitit.attilax的 case list 项目经验 案例列表
  10. atitit.判断时间重叠方法总结 java c++ c#.net js php