Kubernetes CSI存储-CAS、OpenEBS

一、CSI存储

1、CAS (ContainerAttached Storage) 简介

#CAS (ContainerAttached Storage) 简介
容器附加存储 (Container Attached Storage)
    Kubernetes的卷通常是基于外部文件系统或块存储实现,这种存储方案称为共享存储 (Shared Storage)
    CAS则是将存储系统自身部署为Kubernetes集群上的一种较新的存储解决方案
        存储系统自身 (包括存储控制器) 在Kubernetes上以容器化微服务的方式运行
        使得工作负载更易于移植,且更容易根据应用程序的需求改动使用的存储
        通常基于工作负载或者按集群部署,因此消除了共享存储的跨工作负载甚至是跨集群的爆炸半径
    存储在 CAS 中的数据可以直接从集群内的容器访问,从而能显着减少读/写时间
    OpenEBS是CAS存储机制的著名实现之一,由CNCF孵化
基于CAS的存储解决方案,通常包含两类组件
    控制平面
        负责配置卷以及其他同存储相关任务
        由存储控制器、存储策略以及如何配置数据平面的指今组成
    数据平面
        接收并执行来自控制平面的有关如何保存和访问容器信息的指今
        主要组件是实现池化存储的存储引擎,这类引警本质上负责输入/输出卷路径
        OpenEBS支持存储引擎包括Mavastor、cStor、Jiva和OpenEBS LocalPV等

2、OpenEBS简介

#OpenEBS简介
#https://openebs.io/docs/user-guides/installation
OpenEBS能够将Kuberretes工作节点上可用的任何存储转换为本地卷或分布式复制卷
最初由MavaData构建,后指赠给了CNCF,目前是CNCF的沙箱级项目

#1
本地卷,即节点级卷,仅支持在卷所在的节点本地访问因此,Pod也必须调度至卷所在的节点才能使用本地卷
#2
OpenEBS可基于本地块设备或分区、子目录或者LVM、ZFS、甚至是由文件模拟的设备来创建PV,这些可统称为本地卷
#3
复制卷,是支持是将数据同步复制到多个节点的卷,因而能实现节点容错以及跨可用区进行数据复制
#4
OpenEBS可基于Mayastor、cStor 或Jiva三种引擎之一,为每个分布式复制卷创建一个微服务Pod通过iSCSI (cStor和Jiva) 或NVMeoF连接至(Mayastor)卷上

3、OpenEBS数据引擎

数据引擎的功能
    数据引擎类似于存储控制器,也可将其比作是一种SDS的实现
    OpenEBS提供了一系列的数据引擎,所有引擎都支持PV的动态置备和数据的强一致性
数据引擎的分类
    本地引擎
        本地引擎可以从本地磁盘设备(依赖于NDM) 或主机路径创建PV,也可基于集群节点上的LVM或ZFS创建PV
        适合内置可用性和可扩展性功能的应用程序,或者作业类的有状态工作负载
        基于节点上支持的存储机制,可选的动态LocalPV包括 local PV hostpath、Local PV device、ZFS Local PV、LVMLocalPV和 Rawfile Local PV 这五钟
    复制引擎
        复制卷,顾名思义,就是那些可以将数据同步复制到多个节点的卷
        复制引警允许从复制节点范围内的任一节点上进行数据访问,并支持跨可用区进行复制
        复制卷通常还支持快照、克隆、扩展等功能
        基于节点上支持的存储机制,可选的复制引警包括Mayastor,cStor和Jiva

二、部署OpenEBS

1、Prerequisites

#服务端安装targetcli targetd

#每个节点node Install iSCSI tools
yum install iscsi-initiator-utils -y

cat /etc/iscsi/initiatorname.iscsi
sudo systemctl enable --now iscsid
systemctl status iscsid

2、Installation through kubectl

1、apply openebs-operator

#1、默认安装local PV
kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml

2、Verifying OpenEBS installation

#2、检查各Pod是否正常运行
#ndm、ndm-node-exporter等组件
[root@k8s-master01 local-pv]# kubectl get pods -n openebs
NAME                                            READY   STATUS              RESTARTS   AGE
openebs-localpv-provisioner-778bfd64f4-wwggl    1/1     Running             0          8m
openebs-ndm-cluster-exporter-64d8f6c995-n7qkf   1/1     Running             0          8m
openebs-ndm-f96td                               1/1     Running             0          8m
openebs-ndm-hn76x                               1/1     Running             0          8m
openebs-ndm-kmtns                               1/1     Running             0          8m
openebs-ndm-node-exporter-5bg2r                 1/1     Running             0          8m
openebs-ndm-node-exporter-968r8                 1/1     Running             0          8m
openebs-ndm-node-exporter-mqdd5                 1/1     Running             0          8m
openebs-ndm-node-exporter-qg5w7                 1/1     Running             0          8m
openebs-ndm-operator-6cbcb44847-6tj8p           1/1     Running             0          8m
openebs-ndm-qjngw                               1/1     Running             0          8m
#
OpenEBS的基础部署会创建两个StorageClass
    openebs-hostpath:基于hostpath动态制备local PV
    openebs-device: 基于NDM管理的device动态置备 local PV

若要支持Jiva、cStor、Local PV ZFS和Local PV LVM等数据引擎,还需要额外部署相关组件
#cStor:       kubectl apply -f https://openebs.github.io/charts/cstor-operator.yaml
#Local PV ZFS:kubectl apply -f https://openebs.github.io/charts/zfs-operator.yaml
#Local PV LVM:kubectl apply -f https://openebs.github.io/charts/lvm-operator.yaml

3、Verify StorageClasses

#3、检查storageclass
[root@k8s-master01 local-pv]# kubectl get storageclass
NAME               PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local              kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  17h
openebs-device     openebs.io/local               Delete          WaitForFirstConsumer   false                  10m
openebs-hostpath   openebs.io/local               Delete          WaitForFirstConsumer   false                  10m
[
posted @ 2024-01-03 17:19  しみずよしだ  阅读(102)  评论(0)    收藏  举报