K8S,k3s 分布式存储:rook-ceph or Longhorn

K8S的Volume

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

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

K8S,k3s 分布式存储:rook-ceph or Longhorn_第1张图片

本文重点介绍persistentVolumeClaim,并在此基础上用rook-ceph进行volume资源的管理,其它的volume类型的话可以参考上面给出的官方文档(这里有中文版)或下面这篇文章k8s实践(七):存储卷和数据持久化(Volumes and Persistent Storage) - 云+社区 - 腾讯云

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

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

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

持久化存储: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

https://longhorn.io/docs/1.2.3/deploy/install/#installation-requirements

GitHub - longhorn/longhorn: Cloud-Native distributed storage built on and for Kubernetes

本节记录集群上部署Longhorn的整个过程,这里选择了最轻松的方式:用rancher安装Longhorn,关于rancher的安装可以参看前面的文章【环境搭建】Kubernetes最佳拍档:Helm&Rancher - 知乎

  • 第一步(安装环境):安装open-iscsi(这个是基础设施,不管以何种方式安装都需要),此外还要Enable MountPropagation和其它的必要软件(curl,findmnt,grep,awk,blkid,lsblk);不过实际操作过程中Ubunt 20.04已经都有这些环境了
    • 关于安装环境可以先运行官方这个脚本进行check
  • 第二步:后续步骤基本都是在rancher上界面操作,就不赘述了
    • 小坑:在Rancher的APP页面直接搜索的话搜索不到,要点击一下右上角的launch
    • 最后安装完的结果如下

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

点击/index.html进入UI

你可能感兴趣的:(分布式,kubernetes,容器)