b96499eb3e5e3b7cd5a9790c904c6054.png

背景

在前两篇文章中我们用rke部署了K8S集群,并用helm安装了rancher对集群进行管理,本文来构建集群的存储系统

K8S的POD的生命周期可能很短,会被频繁地销毁和创建,但是对于很多应用(如:Mongodb、jupyter hub、git-lab)等都需要存储当时的数据,或者切确的说数据是其遗产(价值体现);为了存储数据K8S中引入了Volume,K8S的Volume跟docker的Volume类似,但是更广泛功能也更强大(其中PV&PVC也是使用尤其广泛)

K8S的Volume

Volume的主要功能是为了持久化容器的数据,Volume 的生命周期独立于容器,Pod 中的容器可能被销毁和重建,但 Volume 会被保留。本质上,Kubernetes Volume 是一个目录,这一点与 Docker Volume 类似。当 Volume 被 mount 到 Pod,Pod 中的所有容器都可以访问这个 Volume。Kubernetes Volume

目前(2020-09),Kubernetes支持以下Volume 类型:

399d2f0768c7d3b24313ca59c142c98d.png

本文重点介绍persistentVolumeClaim,并在此基础上用rook-ceph进行volume资源的管理,其它的volume类型的话可以参考上面给出的官方文档(这里有中文版)或下面这篇文章

https://cloud.tencent.com/developer/article/1501395​cloud.tencent.com

关于存储(持久化)

关于存储从(存储介质)底层硬盘到顶层应用有诸多概念,想要一一弄清楚的话需要下一些功夫,下面推荐一篇讲的不错的文章

k8s持久化存储方案​www.jianshu.com
2e8606c30de94262f9a924dd6f3d8508.png

在进入下面章节前,这里还想论述一下rook-ceph的必要性

  • 为啥不直接用HDFS:在弄清楚存储的基础概念之后我们就知道其实它两根本不在一个层面(ceph是产品层面,HDFS则是应用层面),一个好的存储产品可以减少应用的维护成本,例如:ceph本身就有副本机制的话,其实HDFS的副本数设置为1(无需副本),MongoDB也是类似的(MongoDB也在应用层)
  • 具体要用哪个:参考这里给出的对比(如下表格中绿色表示性能表现最好,红色表示性能最差:),本文将选择Rancher Longhorn,原因如下
    • 相关可选候选(红色表示性能最好,绿色表示性能最差)

73aeb35e2a8576765019cc9e93e4401a.png
    • 以上可选中,OpenEBS、Rook和Rancher Longhorn是开源的,其它都是需要付费的(Portworx有免费版本,但是部分功能受限)
      • 关于rook-ceph的部署可以看这里,这本是我原本的部署,不过在了解了longhorn之后决定使用longhorn
    • Longhorn经过近今年的发展目前已经相对成熟,在其features描述中,其为企业级应用

011edc64dac97ab7224552b21435b7f2.png

持久化存储:Volume、PV、PVC、StorageClass

  • Volume:在解释PV相关概念之前需要先解释一下Volume,Volume是最早提出的存储卷,主要解决容器和数据存储的依赖关系,抽象底层驱动以支持不同的存储类型;但是使用Volume需要了解底层存储细节,因此提出了PV相关的概念(Volume 存储卷,独立于容器,后端和不同的存储驱动对接)
  • PV(Persistent Volume):持久化存储卷,和node类似,是一种集群资源,由管理员定义,对接不同的存储
  • PVC(Persistent Volume Claims): 持久化存储声明,和pod类似,作为PV的使用者
  • StorageClass: 动态存储类型,分为静态和动态两种类型,通过在PVC中定义存储类型,自动创建所需PV

Longhorn

本节记录集群上部署Longhorn的整个过程,这里选择了最轻松的方式:用rancher安装Longhorn,关于rancher的安装可以参看前面的文章

CZMan95:【环境搭建】Kubernetes最佳拍档:Helm&Rancher​zhuanlan.zhihu.com
3dcea00ae84b8e2972a13894067619cc.png
  • 第一步(安装环境):安装open-iscsi(这个是基础设施,不管以何种方式安装都需要),此外还要Enable MountPropagation和其它的必要软件(curl,findmnt,grep,awk,blkid,lsblk);不过实际操作过程中Ubunt 20.04已经都有这些环境了
    • 关于安装环境可以先运行官方这个脚本进行check

5e940dc55bf3f4c4003a728b43770b8c.png
  • 第二步:后续步骤基本都是在rancher上界面操作,就不赘述了
    • 小坑:在Rancher的APP页面直接搜索的话搜索不到,要点击一下右上角的launch

6bb25ec5157806904fb67736d01205b9.png
  • 最后安装完的结果如下

d7eb96774027a888f930e15842ae50a1.png

在这个页面的最后点击launch就跑起来了

19adf5e90bcd3dbe87ab1afd83b3250c.png

点击/index.html进入UI

f28bec76c832784bf57cac570e5b2a07.png
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐