赞
踩
OpenEBS 是 CNCF 项目的一部分,采用 Apache v2 许可证。是 Kubernetes 部署使用最广泛且易用的开源存储解决方案。
目的:
让持久化工作负载的存储和存储服务完全集成到环境中,这样每个团队和工作负载都可以从控制的粒度和 Kubernetes 原生行为中获益。
特点:
应用需求 | 存储类型 | OpenEBS 卷类型 |
---|---|---|
低时延、高可用性、同步复制、快照、克隆、精简配置 | SSD/ 云存储卷 | OpenEBS Mayastor |
高可用性、同步复制、快照、克隆、精简配置 | 机械 /SSD/ 云存储卷 | OpenEBS cStor |
高可用性、同步复制、精简配置 | 主机路径或外部挂载存储 | OpenEBS Jiva |
低时延、本地 PV | 主机路径或外部挂载存储 | Dynamic Local PV - Hostpath, Dynamic Local PV - Rawfile |
低时延、本地 PV | 本地机械 /SSD/ 云存储卷等块设备 | Dynamic Local PV - Device |
低延迟,本地 PV,快照,克隆 | 本地机械 /SSD/ 云存储卷等块设备 | OpenEBS Dynamic Local PV - ZFS , OpenEBS Dynamic Local PV - LVM |
OpenEBS Mayastor
、OpenEBS cStor
OpenEBS Jiva
Dynamic Local PV - Hostpath, Dynamic Local PV - Rawfile
,由于单机多用于测试环境,数据可靠性要求较低。在安装openebs之前先去除污点,然后等安装完成再添加回来污点
- # 去除污点
- kubectl taint nodes k8s-master01 node-role.kubernetes.io/master=:NoSchedule-
- # 添加污点
- kubectl taint nodes k8s-master01 node-role.kubernetes.io/master=:NoSchedule
添加helm repo
- helm repo add openebs https://openebs.github.io/charts
- helm repo update
安装openebs(这里只会安装Jiva和Local组件)
helm install openebs --namespace openebs openebs/openebs --create-namespace --version 3.0.x
添加cstor支持
helm install openebs --namespace openebs openebs/openebs --create-namespace --set cstor.enabled=true --version 3.2.0
查看安装
- # 查看安装pod
- kubectl get pod -n openebs
- # 查看安装blockdevice,这里的blockdevice是磁盘,当添加一块未分配的磁盘,就会有值
- kubectl get bd -n openebs
OpenEBS依赖与iSCSI做存储管理,因此需要先确保您的集群上已有安装openiscsi。 (这里当报错的时候可以安装试试)
- yum -y install iscsi-initiator-utils
- systemctl enable iscsid --now
- systemctl start iscsid
查看安装状况:
- [root@k8s-master01 ~]# kubectl get pod -n openebs
- NAME READY STATUS RESTARTS AGE
- openebs-cstor-admission-server-b74f5487-lkz84 1/1 Running 1 (6m21s ago) 8h
- openebs-cstor-csi-controller-0 6/6 Running 0 4m44s
- openebs-cstor-csi-node-4df4w 2/2 Running 2 (61m ago) 8h
- openebs-cstor-csi-node-x8bmt 2/2 Running 6 (16m ago) 8h
- openebs-cstor-csi-node-zzn4k 2/2 Running 2 (6m21s ago) 8h
- openebs-cstor-cspc-operator-84464fb479-fh949 1/1 Running 3 (16m ago) 8h
- openebs-cstor-cvc-operator-646f6f676b-xhd44 1/1 Running 2 (16m ago) 46m
- openebs-localpv-provisioner-55b65f8b55-zqj29 1/1 Running 13 (6m23s ago) 8h
- openebs-ndm-429hl 1/1 Running 2 (4m28s ago) 8h
- openebs-ndm-9kkzd 1/1 Running 1 (6m21s ago) 8h
- openebs-ndm-operator-6c944d87b6-5ddxz 1/1 Running 2 (16m ago) 46m
- openebs-ndm-sqnwx 1/1 Running 6 (15m ago) 8h
- [root@k8s-master01 ~]# kubectl get bd -n openebs
- NAME NODENAME SIZE CLAIMSTATE STATUS AGE
- blockdevice-57886fae032a3d3638badeb1282dd67e k8s-node02 21473771008 Unclaimed Active 53s
- blockdevice-d923fc382d96ff6eea7d9ab8efb66224 k8s-master01 21473771008 Unclaimed Active 11m
- blockdevice-e5009ce419c80719025c4cc9409253ab k8s-node01 21473771008 Unclaimed Active 33s
cspc.yaml :
- apiVersion: cstor.openebs.io/v1
- kind: CStorPoolCluster
- metadata:
- name: cstor-disk-pool
- namespace: openebs
- spec:
- pools:
- - nodeSelector:
- kubernetes.io/hostname: "k8s-master01"
- dataRaidGroups:
- - blockDevices:
- - blockDeviceName: "blockdevice-d923fc382d96ff6eea7d9ab8efb66224"
- poolConfig:
- dataRaidGroupType: "stripe"
-
- - nodeSelector:
- kubernetes.io/hostname: "k8s-node01"
- dataRaidGroups:
- - blockDevices:
- - blockDeviceName: "blockdevice-e5009ce419c80719025c4cc9409253ab"
- poolConfig:
- dataRaidGroupType: "stripe"
-
- - nodeSelector:
- kubernetes.io/hostname: "k8s-node02"
- dataRaidGroups:
- - blockDevices:
- - blockDeviceName: "blockdevice-57886fae032a3d3638badeb1282dd67e"
- poolConfig:
- dataRaidGroupType: "stripe"
dataRaidGroupType:可以根据您的需要设置为 stripe
or mirror
。下面以配置为stripe为例。
- [root@k8s-master01 openebs]# kubectl get CStorPoolCluster -n openebs
- NAME HEALTHYINSTANCES PROVISIONEDINSTANCES DESIREDINSTANCES AGE
- cstor-disk-pool 3 3 42s
- kind: StorageClass
- apiVersion: storage.k8s.io/v1
- metadata:
- name: cstor-csi-disk
- provisioner: cstor.csi.openebs.io
- allowVolumeExpansion: true
- parameters:
- cas-type: cstor
- # cstorPoolCluster should have the name of the CSPC
- cstorPoolCluster: cstor-disk-pool
- # replicaCount should be <= no. of CSPI created in the selected CSPC
- replicaCount: "3"
添加硬盘后查看磁盘情况
- 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
- Units = 扇区 of 1 * 512 = 512 bytes
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
- 磁盘标签类型:gpt
- Disk identifier: ADA9C10B-8C31-4EE2-A29B-F2701E9554DC
-
-
- # Start End Size Type Name
- 1 2048 41943006 20G Linux filesyste OpenEBS_NDM
- apiVersion: storage.k8s.io/v1
- kind: StorageClass
- metadata:
- name: jiva-storageclass
- annotations:
- openebs.io/cas-type: jiva
- cas.openebs.io/config: |
- - name: StoragePool
- value: default
- provisioner: openebs.io/provisioner-iscsi
- apiVersion: storage.k8s.io/v1
- kind: StorageClass
- metadata:
- name: localpv-hostpath-sc
- annotations:
- openebs.io/cas-type: local
- cas.openebs.io/config: |
- - name: BasePath
- value: "/var/openebs/local"
- - name: StorageType
- value: "hostpath"
- provisioner: openebs.io/local
下面的类型需要添加硬盘
- 磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
- Units = 扇区 of 1 * 512 = 512 bytes
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
- 磁盘标签类型:gpt
- Disk identifier: BAD0A706-0A9D-478A-85C6-319224EC5D1F
-
-
- # Start End Size Type Name
- 1 2048 41943006 20G Linux filesyste OpenEBS_NDM
- apiVersion: storage.k8s.io/v1
- kind: StorageClass
- metadata:
- name: localpv-device-sc
- annotations:
- openebs.io/cas-type: local
- cas.openebs.io/config: |
- - name: StorageType
- value: "device"
- - name: FSType
- value: ext4
- provisioner: openebs.io/local
查看:
- [root@k8s-master01 openebs]# kubectl get sc -n openebs
- NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
- cstor-csi-disk cstor.csi.openebs.io Delete Immediate true 43s
- openebs-device openebs.io/local Delete WaitForFirstConsumer false 9h
- openebs-hostpath openebs.io/local Delete WaitForFirstConsumer false 9h
特性 | Jiva | cStor | Local PV |
---|---|---|---|
轻量级运行于用户空间 | Yes | Yes | Yes |
同步复制 | Yes | Yes | No |
适合低容量工作负载 | Yes | Yes | Yes |
支持快照,克隆 | Basic | Advanced | No |
数据一致性 | Yes | Yes | NA |
使用 Velero 恢复备份 | Yes | Yes | Yes |
适合高容量工作负载 | No | Yes | Yes |
自动精简配置 | Yes | No | |
磁盘池或聚合支持 | Yes | No | |
动态扩容 | Yes | Yes | |
数据弹性 (RAID 支持) | Yes | No | |
接近原生磁盘性能 | No | No | Yes |
大多数场景推荐 cStor
,因其提供了强大的功能,包括快照 / 克隆、存储池功能(如精简资源调配、按需扩容等)。
Jiva
适用于低容量需求的工作负载场景,例如 5
到 50G
。尽管使用 Jiva
没有空间限制,但建议将其用于低容量工作负载。Jiva
非常易于使用,并提供企业级容器本地存储,而不需要专用硬盘。有快照和克隆功能的需求的场景,优先考虑使用 cStor
而不是 Jiva
。
kubectl patch storageclass cstor-csi-disk -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。