一、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
[