kubernetes里面那些事——————OpenEBS

news2024/11/15 13:46:12

OpenEBS存储

          • 一,OpenEBS简介
          • 二,卷类型
          • 三,本地卷存储引擎类型
          • 四,复制卷存储引擎类型(副本卷)
            • 4.1 复制卷实现原理
            • 4.2 复制卷的优势
          • 五,openebs存储引擎技术选型
          • 六,k8s中部署openebs服务
            • 6.1 下载yaml创建资源
            • 6.2 检查资源创建状态
          • 七,Local PV hostpath动态供给
            • 7.1 创建hostpath测试pod
            • 7.2 查看pod,pv,pvc状态
          • 八,Local PV device动态供给
            • 8.1 k8s配置device存储类
            • 8.2 创建存储资源
            • 8.3 准备未使用的磁盘,标识存储磁盘信息
            • 8.4 创建device测试pod
            • 8.5 查看pod,pvc状态
          • 八,ZFS Local PV
            • 9.1 k8s存储节点部署zfs服务
            • 9.2 通过磁盘创建存储池(所有节点)
            • 9.3 k8s创建openebs-zfs服务
            • 9.4 创建存储类
            • 9.5 创建测试pvc
            • 9.6查看pvc绑定状态
          • 十,LVM Local PV
            • 10.1 通过磁盘创建卷组
            • 10.2 k8s部署openebs-lvm服务
            • 10.3 查看服务状态
            • 10.4 创建存储类
            • 10.5 创建测试pod使用lvm-pvc
            • 10.6 查看pvc绑定状态
          • 十一,Rawfile Local PV
          • 十二 ,Mayastor
            • 12.1 配置helm
            • 12.2 安装Mayastor 服务
          • 十三,cStor
            • 13.1 k8s存储节点部署iscsi服务(所有存储节点)
            • 13.2 检查openebs的NDM组件
            • 13.3 k8s中安装CStor operators 和 CSI 驱动程序组件
            • 13.4 检查块设备创建
            • 13.5 创建存储池
            • 13.6 创建存储类
            • 13.7 创建测试pod,pvc
          • 十四,Jiva
            • 14.1 安装iscsi服务,加载内核模块(所有存储节点)
            • 14.2 k8s中部署jiva服务
            • 14.3 jiva卷策略配置参数
            • 14.4 创建存储类
            • 14.5 创建测试pod使用pvc
            • 14.6 验证存储卷状态
            • 14.7 检查pod,pvc状态

一,OpenEBS简介

OpenEBS是一组存储引擎,工作节点可用的任何存储转换为本地或分布式 Kubernetes 持久卷, 在高层次上,OpenEBS支持两大类卷——本地卷和复制卷

OpenEBS是Kubernetes本地超融合存储解决方案,它管理节点可用的本地存储,并为有状态工作负载提供本地或高可用的分布式持久卷。 作为一个完全的Kubernetes原生解决方案的另一个优势是,管理员和开发人员可以使用kubectl、Helm、 Prometheus、Grafana、Weave Scope等Kubernetes可用的所有优秀工具来交互和管理OpenEBS,部署需要快速、高度持久、可靠和可扩展的 Kubernetes 有状态工作负载。

二,卷类型

本地卷:本地卷能够直接将工作节点上插入的数据盘抽象为持久卷,供当前节点上的 Pod 挂载使用。

复制卷:OpenEBS 使用其内部的引擎为每个复制卷创建一个微服务,在使用时,有状态服务将数据写入 OpenEBS 引擎,引擎将数据同步复制到集群中的多个节点,从而实现了高可用

img

三,本地卷存储引擎类型

Local PV hostpath

​ 指定使用本地目录

Local PV device

​ 通过配置磁盘标识信息来定义哪些设备可用于创建本地pv

ZFS Local PV K8S:1.20+

​ 通过zfs服务创建存储池,配置卷,比如条带卷、镜像卷

LVM Local PV K8S:1.20+

​ 通过lvm创建存储卷组

Rawfile Local PV K8s:1.21+

四,复制卷存储引擎类型(副本卷)

Mayastor

cStor K8s 1.21+

Jiva 3.2.0+稳定版本 适配k8s:1.21+

4.1 复制卷实现原理

OpenEBS使用其中一个引擎(Mayastor、cStor或Jiva)为每个分布式持久卷创建微服务

Pod将数据写入OpenEBS引擎,OpenEBS引擎将数据同步复制到集群中的多个节点。

OpenEBS引擎本身作为pod部署,并由Kubernetes进行协调。 当运行Pod的节点失败时,Pod将被重新调度到集群中的另一个节点,OpenEBS将使用其他节点上的可用数据副本提供对数据的访问

4.2 复制卷的优势

OpenEBS分布式块卷被称为复制卷,以避免与传统的分布式块存储混淆,传统的分布式块存储倾向于将数据分布到集群中的许多节点上。 复制卷是为云原生有状态工作负载设计的,这些工作负载需要大量的卷,这些卷的容量通常可以从单个节点提供,而不是使用跨集群中的多个节点分片的单个大卷

五,openebs存储引擎技术选型
应用需求存储类型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,由于单机多用于测试环境,数据可靠性要求较低。

六,k8s中部署openebs服务
6.1 下载yaml创建资源
mkdir openebs && cd openebs
wget https://openebs.github.io/charts/openebs-operator.yaml
kubectl apply -f openebs-operator.yaml



修改yaml中hostpath默认路径
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-hostpath
  annotations:
    openebs.io/cas-type: local
    cas.openebs.io/config: |
      #hostpath type will create a PV by
      # creating a sub-directory under the
      # BASEPATH provided below.
      - name: StorageType
        value: "hostpath"
      #Specify the location (directory) where
      # where PV(volume) data will be saved.
      # A sub-directory with pv-name will be
      # created. When the volume is deleted,
      # the PV sub-directory will be deleted.
      #Default value is /var/openebs/local
      - name: BasePath
        value: "/var/openebs/local/"			#默认存储路径
6.2 检查资源创建状态
kubectl get storageclasses,pod,svc -n openebs



kubectl get storageclasses,pod,svc -n openebs 
NAME                                                     PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
storageclass.storage.k8s.io/local-storage                kubernetes.io/no-provisioner   Delete          WaitForFirstConsumer   false                  372d
storageclass.storage.k8s.io/nfs                          nfs                            Delete          Immediate              true                   311d
storageclass.storage.k8s.io/nfs-storageclass (default)   fuseim.pri/ifs                 Retain          Immediate              true                   314d
storageclass.storage.k8s.io/openebs-device               openebs.io/local               Delete          WaitForFirstConsumer   false                  3m41s
storageclass.storage.k8s.io/openebs-hostpath             openebs.io/local               Delete          WaitForFirstConsumer   false                  3m41s

NAME                                                READY   STATUS    RESTARTS   AGE
pod/openebs-localpv-provisioner-6779c77b9d-gr9gn    1/1     Running   0          3m41s
pod/openebs-ndm-cluster-exporter-5bbbcd59d4-4nmjl   1/1     Running   0          3m41s
pod/openebs-ndm-llc54                               1/1     Running   0          3m41s
pod/openebs-ndm-node-exporter-698gw                 1/1     Running   0          3m41s
pod/openebs-ndm-node-exporter-z522n                 1/1     Running   0          3m41s
pod/openebs-ndm-operator-d8797fff9-jzrp7            1/1     Running   0          3m41s
pod/openebs-ndm-prk5g                               1/1     Running   0          3m41s

NAME                                           TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
service/openebs-ndm-cluster-exporter-service   ClusterIP   None         <none>        9100/TCP   3m41s
service/openebs-ndm-node-exporter-service      ClusterIP   None         <none>        9101/TCP   3m41s

#配置hostpath本地卷为默认存储类

#kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
七,Local PV hostpath动态供给
7.1 创建hostpath测试pod

kubectl apply -f demo-openebs-hostpath.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    name: nginx
  namespace: openebs
spec:
  replicas: 1
  selector:
    matchLabels:
      name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      containers:
        - resources:
            limits:
              cpu: 0.5
          name: nginx
          image: nginx
          ports:
            - containerPort: 80
              name: percona
          volumeMounts:
            - mountPath: /usr/share/nginx/html/
              name: demo-nginx
      volumes:
        - name: demo-nginx
          persistentVolumeClaim:
            claimName: demo-vol1-claim
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  namespace: openebs
  name: demo-vol1-claim
spec:
  storageClassName: openebs-hostpath
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1G
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
      name: nginx

7.2 查看pod,pv,pvc状态
kubectl get pod,pv,pvc -n openebs
NAME                                                READY   STATUS    RESTARTS   AGE
pod/nginx-5b56fb9c85-jl4wl                          1/1     Running   0          106s


persistentvolume/pvc-658df0cf-932a-49bf-a237-c4fadcbd143b   1G         RWO            Delete           Bound      openebs/demo-vol1-claim                                            openebs-hostpath            96s


NAME                                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
persistentvolumeclaim/demo-vol1-claim   Bound    pvc-658df0cf-932a-49bf-a237-c4fadcbd143b   1G         RWO            openebs-hostpath   26s

八,Local PV device动态供给
8.1 k8s配置device存储类
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-device
  annotations:
    openebs.io/cas-type: local
 #   cas.openebs.io/config: |
  #    - name: StorageType
  #      value: "device"
parameters:
  devname: "test-device"		#存储空间会使用指定了磁盘标识的设备块
provisioner: openebs.io/local
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete

8.2 创建存储资源
kubectl app -f openebs-device.yaml

kubectl get storageclasses.storage.k8s.io 
NAME               PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
openebs-device     openebs.io/local   Delete          WaitForFirstConsumer   false                  5m35s
openebs-hostpath   openebs.io/local   Delete          WaitForFirstConsumer   false                  23m
8.3 准备未使用的磁盘,标识存储磁盘信息
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart test-device 1MiB 10MiB
8.4 创建device测试pod
apiVersion: v1
kind: Pod
metadata:
  name: hello-local-device-pod
spec:
  volumes:
  - name: local-storage
    persistentVolumeClaim:
      claimName: local-device-pvc
  containers:
  - name: hello-container
    image: busybox
    command:
       - sh
       - -c
       - 'while true; do echo "`date` [`hostname`] Hello from OpenEBS Local PV." >> /mnt/store/greet.txt; sleep $(($RANDOM % 5 + 300)); done'
    volumeMounts:
    - mountPath: /mnt/store
      name: local-storage
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: local-device-pvc
spec:
  storageClassName: openebs-device			#对应存储类名称,kubectl get storageclasses.storage.k8s.io
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5G
8.5 查看pod,pvc状态
[root@master1 openebs]# kubectl get pod,pvc 
NAME                         READY   STATUS    RESTARTS   AGE
pod/hello-local-device-pod   1/1     Running   0          14m

NAME                                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS     AGE
persistentvolumeclaim/local-device-pvc   Bound    pvc-2551b29f-3056-4b32-9004-75f52557a766   5G         RWO            openebs-device   19m
八,ZFS Local PV
9.1 k8s存储节点部署zfs服务
cat /etc/redhat-release	#centos根据系统版本号修改el7_6
yum install http://download.zfsonlinux.org/epel/zfs-release.el7_6.noarch.rpm -y


vi /etc/yum.repos.d/zfs.repo
[zfs-kmod]
name=ZFS on Linux for EL7 - kmod
baseurl=http://download.zfsonlinux.org/epel/7.6/kmod/$basearch/
enabled=1			#修改enabled=0为1,默认未开启
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux

yum -y install zfs
9.2 通过磁盘创建存储池(所有节点)
zpool create zfspv-pool /dev/sdc 
zpool list 	#查看存储池
NAME         SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
zfspv-pool  19.9G   106K  19.9G         -     0%     0%  1.00x  ONLINE  -

9.3 k8s创建openebs-zfs服务
wget https://openebs.github.io/charts/zfs-operator.yaml
sed -i 's/registry.k8s.io\/sig-storage/\/google_containers\//' zfs-operator.yaml 	#修改国内镜像下载地址

kubectl get pods -n kube-system -l role=openebs-zfs		#查看pod服务运行状态
NAME                       READY   STATUS    RESTARTS   AGE
openebs-zfs-controller-0   5/5     Running   0          3m13s
openebs-zfs-node-h5t6b     2/2     Running   0          2m29s
9.4 创建存储类

kubectl apply -f zfs-storage.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-zfspv
parameters:
  recordsize: "4k"
  compression: "off"
  dedup: "off"
  fstype: "zfs"
  poolname: "zfspv-pool"			#对应创建的存储池名字
provisioner: zfs.csi.openebs.io
9.5 创建测试pvc

kubectl apply -f zfs-pvc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: csi-zfspv
  namespace: openebs
spec:
  storageClassName: openebs-zfspv
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
9.6查看pvc绑定状态
kubectl get pvc csi-zfspv 
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
csi-zfspv   Bound    pvc-32775579-e3bd-4fda-a98c-5161d8970528   4Gi        RWO            openebs-zfspv   103m
十,LVM Local PV
10.1 通过磁盘创建卷组
pvcreate /dev/sdc 
vgcreate lvmvg /dev/sdc 
10.2 k8s部署openebs-lvm服务
wget https://openebs.github.io/charts/lvm-operator.yaml
sed -i 's/registry.k8s.io\/sig-storage/registry.aliyuncs.com\/google_containers\//' zfs-operator.yaml 
kubectl apply -f lvm-operator.yaml
10.3 查看服务状态
kubectl get pod -A -l role=openebs-lvm
NAMESPACE     NAME                       READY   STATUS    RESTARTS        AGE
kube-system   openebs-lvm-controller-0   5/5     Running   0               6m19s
kube-system   openebs-lvm-node-7qn5p     2/2     Running   4 (6m40s ago)   7m
10.4 创建存储类

kubectl apply -f lvm-storage.yaml

cat lvm-storage.yaml 
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-lvmpv
parameters:
  storage: "lvm"
  volgroup: "lvmvg"			#对应创建的卷组
provisioner: local.csi.openebs.io
#allowedTopologies:
#- matchLabelExpressions:
#  - key: kubernetes.io/hostname
#    values:
#      - lvmpv-node1
#      - lvmpv-node2
#表示“lvmvg”仅在节点 lvmpv-node1 和 lvmpv-node2 上可用。LVM 驱动程序将仅在这些节点上创建卷。
10.5 创建测试pod使用lvm-pvc
apiVersion: v1
kind: Pod
metadata:
  name: fio
spec:
  restartPolicy: Never
  containers:
  - name: perfrunner
    image: openebs/tests-fio
    command: ["/bin/bash"]
    args: ["-c", "while true ;do sleep 50; done"]
    volumeMounts:
       - mountPath: /datadir
         name: fio-vol
    tty: true
  volumes:
  - name: fio-vol
    persistentVolumeClaim:
      claimName: csi-lvmpv
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: csi-lvmpv
spec:
  storageClassName: openebs-lvmpv
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi
10.6 查看pvc绑定状态
kubectl get pvc csi-lvmpv 
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
csi-lvmpv   Bound    pvc-2ddb8407-03f6-4af0-9d82-f95e567c3b32   4Gi        RWO            openebs-lvmpv   9s
十一,Rawfile Local PV
十二 ,Mayastor

环境要求:

helm版本3.7+

Linux kernel 5.13 (或者更高版本)

内核加载模块:nvme-tcp、ext4 和可选的 XFS

最低配置:1c2g

12.1 配置helm
wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz
tar xf helm-v3.9.4-linux-amd64.tar.gz 
cp linux-amd64/helm /usr/bin/
12.2 安装Mayastor 服务
helm repo add openebs https://openebs.github.io/charts
helm repo update
helm repo list
helm install openebs --namespace openebs openebs/openebs  --set mayastor.enabled=true --create-namespace
十三,cStor
13.1 k8s存储节点部署iscsi服务(所有存储节点)

​ 建议在 至少3 个节点上以实现高可用性

yum install iscsi-initiator-utils -y
systemctl enable iscsid.service --now



#sudo systemctl stop zfs-import-scan.service
#sudo systemctl disable zfs-import-scan.service
13.2 检查openebs的NDM组件

​ openebs服务自动创建,每个节点会运行一个

kubectl -n openebs get pods -l openebs.io/component-name=ndm -owide
NAME                READY   STATUS    RESTARTS   AGE    IP          NODE              NOMINATED NODE   READINESS GATES
openebs-ndm-dq958   1/1     Running   0          4m5s   10.98.4.2   node1.ale.org     <none>           <none>
openebs-ndm-qntzn   1/1     Running   0          4m5s   10.98.4.3   node2.ale.org     <none>           <none>
openebs-ndm-wbv22   1/1     Running   0          54s    10.98.4.1   master1.ale.org   <none>           <none>
13.3 k8s中安装CStor operators 和 CSI 驱动程序组件

​ 可以使用jhelm和yaml方式,推荐yaml

helm repo add openebs-cstor https://openebs.github.io/cstor-operators
helm repo update
helm install openebs-cstor openebs-cstor/cstor -n openebs --create-namespace
#wget https://openebs.github.io/charts/cstor-operator.yaml
#kubectl apply -f cstor-operator.yaml


kubectl get pod -n openebs 
NAME                                                  READY   STATUS    RESTARTS   AGE
openebs-cstor-admission-server-6bf8f59b76-kcb5p       1/1     Running   0          18m
openebs-cstor-csi-controller-0                        6/6     Running   0          51s
openebs-cstor-csi-node-24xv6                          2/2     Running   0          18m
openebs-cstor-csi-node-pf4tt                          2/2     Running   0          18m
openebs-cstor-csi-node-pvmhv                          2/2     Running   0          18m
openebs-cstor-cspc-operator-54c867b7b5-vqmnm          1/1     Running   0          18m
openebs-cstor-cvc-operator-5557b65896-t4r7b           1/1     Running   0          18m
openebs-cstor-openebs-ndm-2k449                       1/1     Running   0          18m
openebs-cstor-openebs-ndm-7rfmr                       1/1     Running   0          18m
openebs-cstor-openebs-ndm-gvc7v                       1/1     Running   0          18m
openebs-cstor-openebs-ndm-operator-667cc5bb79-486jc   1/1     Running   0          18m
openebs-localpv-provisioner-64478448d5-27d9t          1/1     Running   0          24m
openebs-ndm-cluster-exporter-5bbbcd59d4-tvfqp         1/1     Running   0          24m
openebs-ndm-dq958                                     1/1     Running   0          24m
openebs-ndm-node-exporter-4k9lm                       1/1     Running   0          24m
openebs-ndm-node-exporter-7gjdh                       1/1     Running   0          24m
openebs-ndm-node-exporter-v6zwv                       1/1     Running   0          21m
openebs-ndm-operator-5b4b976495-4pm46                 1/1     Running   0          24m
openebs-ndm-qntzn                                     1/1     Running   0          24m
openebs-ndm-wbv22                                     1/1     Running   0          21m
13.4 检查块设备创建

OpenEBS 控制器会在底层节点上发现用户除系统安装盘外的所有磁盘

master1节点上的sdb、sdc会在bd资源中

[root@master1 ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   50G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   49G  0 part 
  ├─centos-root 253:0    0   47G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  
sdb               8:16   0   20G  0 disk 
└─sdb1            8:17   0   20G  0 part 
sdc               8:32   0   20G  0 disk 
└─sdc1            8:33   0   20G  0 part 
sr0              11:0    1 1024M  0 rom  



[root@master1 ~]# kubectl get bd -A 
NAMESPACE   NAME                                           NODENAME          SIZE          CLAIMSTATE   STATUS   AGE
openebs     blockdevice-132b97bf1539798a611ebb52ba751f9b   node1.ale.org     21473771008   Claimed      Active   17h
openebs     blockdevice-210cdc3db63530e8f31d613eba0a8e9a   master1.ale.org   21473771008   Unclaimed    Active   21s
openebs     blockdevice-bc67cbdd43719bd9fa8ae6adc16fb2e6   node2.ale.org     21473771008   Claimed      Active   17h
openebs     blockdevice-ff23509cea3e5f6ee8679d38f8b33595   master1.ale.org   21473771008   Claimed      Active   17h



kubectl get bd -n openebs 
NAME                                           NODENAME          SIZE          CLAIMSTATE   STATUS     AGE
blockdevice-132b97bf1539798a611ebb52ba751f9b   node1.ale.org     21473771008   Unclaimed    Inactive   23m
blockdevice-bc67cbdd43719bd9fa8ae6adc16fb2e6   node2.ale.org     21473771008   Unclaimed    Active     24m
blockdevice-ff23509cea3e5f6ee8679d38f8b33595   master1.ale.org   21473771008   Unclaimed    Inactive   20m
13.5 创建存储池

kubectl apply -f cspc-single.yaml

apiVersion: cstor.openebs.io/v1
kind: CStorPoolCluster
metadata:
  name: cstor-storage
  namespace: openebs
spec:
  pools:
    - nodeSelector:
        kubernetes.io/hostname: "master1.ale.org"	#节点标签选择器
      dataRaidGroups:
        - blockDevices:
            - blockDeviceName: "blockdevice-ff23509cea3e5f6ee8679d38f8b33595"	#bd块设备对应名字
      poolConfig:
        dataRaidGroupType: "stripe"

    - nodeSelector:
        kubernetes.io/hostname: "node1.ale.org" 
      dataRaidGroups:
        - blockDevices:
            - blockDeviceName: "blockdevice-132b97bf1539798a611ebb52ba751f9b"
      poolConfig:
        dataRaidGroupType: "stripe"
   
    - nodeSelector:
        kubernetes.io/hostname: "node2.ale.org"
      dataRaidGroups:
        - blockDevices:
            - blockDeviceName: "blockdevice-bc67cbdd43719bd9fa8ae6adc16fb2e6"
      poolConfig:
        dataRaidGroupType: "stripe"

#检查设备存储池连接状态

kubectl get cspc -n openebs 
NAME            HEALTHYINSTANCES   PROVISIONEDINSTANCES   DESIREDINSTANCES   AGE
cstor-storage                      3                      3                  14s



kubectl get cspi -n openebs 
NAME                 HOSTNAME          FREE   CAPACITY   READONLY   PROVISIONEDREPLICAS   HEALTHYREPLICAS   STATUS   AGE
cstor-storage-cx7k   node1.ale.org     0      0          false      0                     0                          80s
cstor-storage-nmws   node2.ale.org     0      0          false      0                     0                          79s
cstor-storage-zntk   master1.ale.org   0      0          false      0                     0                          81s
13.6 创建存储类

kubectl apply -f csi-cspc-sc.yaml

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: cstor-csi				#存储类名称
provisioner: cstor.csi.openebs.io	
allowVolumeExpansion: true		#是否打开存储扩展功能
parameters:
  cas-type: cstor				
  # cstorPoolCluster should have the name of the CSPC
  cstorPoolCluster: cstor-storage	#存储池名称
  #     # replicaCount should be <= no. of CSPI
  replicaCount: "3"				#
13.7 创建测试pod,pvc

kubectl apply -f csi-cstor-pvc.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - command:
       - sh
       - -c
       - 'date >> /mnt/openebs-csi/date.txt; hostname >> /mnt/openebs-csi/hostname.txt; sync; sleep 5; sync; tail -f /dev/null;'
    image: busybox
    imagePullPolicy: Always
    name: busybox
    volumeMounts:
    - mountPath: /mnt/openebs-csi
      name: demo-vol
  volumes:
  - name: demo-vol
    persistentVolumeClaim:
      claimName: demo-cstor-vol
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: demo-cstor-vol
spec:
  storageClassName: cstor-csi
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

#检查pod,pvc运行状态

kubectl get pod,pvc 
NAME          READY   STATUS    RESTARTS   AGE
pod/busybox   1/1     Running   0          16m

NAME                                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/demo-cstor-vol   Bound    pvc-2e7af54f-e8cd-40c8-9486-1399591706e2   5Gi        RWO            cstor-csi      16m

#检查卷及其副本是否处于Healthy状态

kubectl get cstorvolume -n openebs
NAME                                       CAPACITY   STATUS    AGE
pvc-2e7af54f-e8cd-40c8-9486-1399591706e2   5Gi        Healthy   16h



kubectl get cstorvolumereplica -n openebs
NAME                                                          ALLOCATED   USED    STATUS    AGE
pvc-2e7af54f-e8cd-40c8-9486-1399591706e2-cstor-storage-cx7k   73K         5.07M   Healthy   16h
pvc-2e7af54f-e8cd-40c8-9486-1399591706e2-cstor-storage-nmws   73K         5.07M   Healthy   16h
pvc-2e7af54f-e8cd-40c8-9486-1399591706e2-cstor-storage-zntk   73K         5.07M   Healthy   16h

#查看pod写入数据

kubectl exec -it busybox -- cat /mnt/openebs-csi/date.txt
Wed May 31 10:13:20 UTC 2023
Thu Jun  1 01:32:24 UTC 2023

#节点存储池默认位置

ll /var/openebs/cstor-pool/cstor-storage/
总用量 4
-rw-r--r-- 1 root root 1472 6月   1 09:31 pool.cache
-rw-r--r-- 1 root root    0 5月  31 18:11 zrepl.lock
十四,Jiva
14.1 安装iscsi服务,加载内核模块(所有存储节点)
sudo yum install iscsi-initiator-utils -y
sudo systemctl enable --now iscsid
modprobe iscsi_tcp
echo iscsi_tcp >/etc/modules-load.d/iscsi-tcp.conf
14.2 k8s中部署jiva服务
mkdir openebs && cd openebs
wget https://openebs.github.io/charts/openebs-operator.yaml
kubectl apply -f openebs-operator.yaml

kubectl apply -f  https://openebs.github.io/charts/hostpath-operator.yaml



wget https://openebs.github.io/charts/jiva-operator.yaml
sed -i 's/k8s.gcr.io\/sig-storage/registry.aliyuncs.com\/google_containers/' jiva-operator.yaml 
kubectl apply -f jiva-operator.yaml

#查看pod状态

kubectl get pod -n openebs 
NAME                                           READY   STATUS    RESTARTS   AGE
jiva-operator-7747864f88-scxb9                 1/1     Running   0          11m
openebs-jiva-csi-controller-0                  5/5     Running   0          35s
openebs-jiva-csi-node-7rpp5                    3/3     Running   0          4m39s
openebs-jiva-csi-node-8gnbx                    3/3     Running   0          5m20s
openebs-jiva-csi-node-9fkdf                    3/3     Running   0          5m20s
openebs-localpv-provisioner-846d97c485-xfktf   1/1     Running   0          12m
14.3 jiva卷策略配置参数

kubectl apply -f JivaVolumePolicy.yaml

 apiVersion: openebs.io/v1alpha1
 kind: JivaVolumePolicy
 metadata:
   name: example-jivavolumepolicy
   namespace: openebs
 spec:
   replicaSC: openebs-hostpath
   target:
     replicationFactor: 1
     # disableMonitor: false
     # auxResources:
     # tolerations:
     # resources:
     # affinity:
     # nodeSelector:
     # priorityClassName:
   # replica:
     # tolerations:
     # resources:
     # affinity:
     # nodeSelector:
     # priorityClassName:
14.4 创建存储类

​ 默认卷数据存储位置在节点/var/openebs/<pvc-*>

kubectl apply -f jiva-sc.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: openebs-jiva-csi-sc
provisioner: jiva.csi.openebs.io
allowVolumeExpansion: true
parameters:
  cas-type: "jiva"
  policy: "example-jivavolumepolicy"



[root@master1 ~]# kubectl get sc 
NAME                  PROVISIONER           RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
openebs-jiva-csi-sc   jiva.csi.openebs.io   Delete          Immediate           true                   4s
14.5 创建测试pod使用pvc

kubectl apply -f jiva-pod.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fio
spec:
  selector:
    matchLabels:
      name: fio
  replicas: 1
  strategy:
    type: Recreate
    rollingUpdate: null
  template:
    metadata:
      labels:
        name: fio
    spec:
      containers:
      - name: perfrunner
        image: openebs/tests-fio
        command: ["/bin/bash"]
        args: ["-c", "while true ;do sleep 50; done"]
        volumeMounts:
        - mountPath: /datadir
          name: fio-vol
      volumes:
      - name: fio-vol
        persistentVolumeClaim:
          claimName: example-jiva-csi-pvc
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: example-jiva-csi-pvc
spec:
  storageClassName: openebs-jiva-csi-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 4Gi

14.6 验证存储卷状态
kubectl get jivavolume -n openebs 
NAME                                       REPLICACOUNT   PHASE   STATUS
pvc-264e18d6-782f-41db-80f0-e2d7b2fa0d04   1              Ready   RW
14.7 检查pod,pvc状态
kubectl get pod,pvc 
NAME                       READY   STATUS    RESTARTS   AGE
pod/fio-5bd64c6b49-krwh6   1/1     Running   0          28m

NAME                                         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
persistentvolumeclaim/example-jiva-csi-pvc   Bound    pvc-264e18d6-782f-41db-80f0-e2d7b2fa0d04   4Gi        RWO            openebs-jiva-csi-sc   28m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目延期,怎么有效调整计划,追赶进度

在项目管理过程中&#xff0c;项目延期是一个令人头疼但又无法完全避免的问题。无论是由内部因素还是外部因素导致&#xff0c;都会对项目的整体进度、成本和质量产生影响。 面对延期&#xff0c;关键在于如何迅速而有效地调整项目计划&#xff0c;以确保项目能够尽快回到正轨…

新版IDEA配置前进和后退、打开资源管理器等快捷按钮

新版IDEA&#xff0c;好像是IDEA2024版本开始就默认隐藏了工具条&#xff0c;这时一些很常用的快捷按钮&#xff0c;如前进、后退、打开资源管理器就无法使用。这里图文介绍&#xff0c;如何把这些配置出来。 具体操作如下&#xff1a; 1、选择 File / Settings(windows版)&am…

关于contextmenu-ui组件库

关于这个组件库把&#xff0c;主要用在个人博客制作中&#xff0c;而且由于作者很懒&#xff0c;已经一个多月没有更新了&#xff0c;甚至第二次更新都忘了修改md文件了。 这个组件库是使用vue3和TS来写的&#xff0c;关于引用&#xff0c;看这里 都有介绍的&#xff0c;直接…

计算机网络(八股文)

这里写目录标题 计算机网络一、网络分层模型1. TCP/IP四层架构和OSI七层架构⭐️⭐️⭐️⭐️⭐️2. 为什么网络要分层&#xff1f;⭐️⭐️⭐️3. 各层都有那些协议&#xff1f;⭐️⭐️⭐️⭐️ 二、HTTP【重要】1. http状态码&#xff1f;⭐️⭐️⭐️2. 从输入URL到页面展示…

边缘计算工业网关可以为工业企业生产提供哪些价值应用?天拓四方

在数字化、网络化、智能化高度融合的今天&#xff0c;工业领域正迎来一场深刻的变革。边缘计算工业网关&#xff0c;作为这场变革中的关键角色&#xff0c;以其强大的数据处理能力、高效的通信效率和灵活的部署方式&#xff0c;为智能制造注入了新的活力。本文将结合一个实际应…

【安卓13】解决HDMI OUT和耳机等设备接入时会解除静音问题

安卓原生定义了部分外部设备接入时是否静音&#xff0c;比如耳机、有线扬声器、HDMIOUT设备等&#xff0c;这些设备接入时&#xff0c;安卓会设置AudioSystem.STREAM_MUSIC为非静音状态 从代码里可以看出&#xff0c;当一个newDevice 接入时&#xff0c;会携带一个deviceID&am…

Java基于微信小程序的超市购物管理系统

1 简介 Java基于微信小程序的超市购物管理系统&#xff0c;此超市购物系统利用当下成熟完善的springboot框架&#xff0c;使用跨平台的可开发大型商业网站的Java语言&#xff0c;以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了收货地址管理、购物车管理、…

Win11 / Win10 系统极化工具,降低游戏延迟效果明显

Win11 / Win10 系统优化工具,降低游戏延迟效果明显 Windows 系统优化就是精简系统一些功能组件、对一些系统功能进行设置等&#xff0c;这样可以减少不必要的硬件资源占用。 全面的系统优化功能外&#xff0c;据不少网友表示通过优化后 CS GO 游戏降低输入延迟效果明显。 免费…

领夹麦克风哪个牌子音质好?西圣、博雅、枫笛领夹麦克风对比

当今的直播、短视频已经深深的融入到了我们的生活当中&#xff0c;很多小伙伴会通过拍摄短视频、Vlog来分享自己生活精彩的瞬间。不过录制视频时&#xff0c;如果单纯靠手机拾音会发现&#xff0c;音频效果是极差的&#xff0c;特别距离手机越远效果会越明显&#xff0c;会出现…

【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(二十二)

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

一文直接搞懂SpringMVC完整版教程

三、SpringMVC 1、SpringMVC简介 1.1、什么是MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为实体…

《黑神话悟空》广智打法技巧图文攻略详解

​黑神话悟空广智会挥舞火刀砍我们&#xff0c;是前期一个较难的boss&#xff0c;那么广智怎么打&#xff1f;基本就是别贪刀&#xff0c;躲技能&#xff0c;然后砍就完事儿了。这个boss之所以是第一个boss&#xff0c;可能就是锻炼大家躲技能的能力的&#xff0c;下面就来看下…

大数据测试知识架构与技术框架分享|大数据测试工程师学习方向

本文一起看一下关于大数据技术的基本的技术体系和典型技术栈&#xff0c;帮助想要从事大数据方向软件测试的朋友快速了解需要掌握的知识架构。 大数据基本的思想、它的整体框架&#xff0c;与以往的数据相关体系实际上是相类似的。区别主要在于数据的收集、存储包括资源的调度…

怎么一键导出多条数据的二维码?一物一码的在线生成技巧

怎么将多条数据生成单独二维码呢&#xff1f;现在扫描物品包装的二维码经常会看到对应的产品编号&#xff0c;一般是数字和字母组合内容&#xff0c;每个物品的编码都是不同的&#xff0c;怎么把不同的信息批量生成二维码呢&#xff1f;下面来给大家分享一物一码的使用技巧&…

ios动态创建控件及添加事件

效果如下&#xff0c;就是在一个空白页面动态添加控件&#xff0c;给按钮添加事件&#xff0c;图片名字和标题放入plist文件,plist是个Array&#xff0c;每一项是Dictionary。Dictionary里面方icon和name两个String的key。图片都放入Assets.xcassets。如果需要使用imageWithCon…

再次拿下品牌全球代言人,王鹤棣商业价值再度证明!

9月2日&#xff0c;FENTY BEAUTY品牌正式官宣王鹤棣为全球代言人&#xff0c;这也是该品牌创立至今官宣的中国首位全球代言人。 FENTY BEAUTY是由美国歌手Rihanna创立于2017年的高端美妆品牌&#xff0c;也是LV母公司LVMH集团联手RIHANNA一同孵化的品牌&#xff0c;因其产品具有…

【精选】基于HTML5技术应用于智能宠物寻找与领养系统的设计与实现(全网独一无二,阿龙独创)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

2020年ICPC南京站 补题记录

文章目录 A - Ah, Its Yesterday Once More&#xff08;构造&#xff09;E - Evil Coordinate&#xff08;构造&#xff09;F - Fireworks&#xff08;概率三分&#xff09;H - Harmonious Rectangle&#xff08;打表&#xff09;K - K Co-prime Permutation&#xff08;签到&a…

Git如何安装和配置

一、Git 的安装 1、Git 的官网 Git (git-scm.com) 2、下载 Git for Windows 在官网下载好 Git 的安装文件后&#xff0c;接下来就可以进行安装了。 3、安装 Git 以管理员身份运行你下载的安装文件&#xff1a; 然后就可以进入安装向导了。 4、验证是否安装成功 当安装向…