OpenShift 4 - 在单节点 OpenShift 上使用 LVM Storage

OpenShift / RHEL / DevSecOps 汇总目录
说明:本文已经在支持 OpenShift 4.15 的 OpenShift Local 环境中验证

什么是 LVM Storage ?

Logical Volume Manager Storage 使用 TopoLVM CSI 驱动在 OpenShift 集群上动态供应本地存储。LVM Storage 使用 Logical Volume Manager 创建精简置备卷,并在资源有限的集群上动态提供块存储。可用 LVM 存储创建卷组、持久性卷声明 (PVC)、卷快照和卷克隆

为 OpenShift Local 增加额外存储设备

因为 LVM 需要使用空盘来提供存储,因此需要先为运行 OpenShift 的节点准备空盘。

  1. 在第一个 Terminal 窗口先执行命令进入 OpenShift Local 的集群节点的 RHCOS 操作系统。
$ oc get node
NAME                 STATUS   ROLES           AGE   VERSION
crc-pbwlw-master-0   Ready    master,worker   41d   v1.25.4+77bec7a
$ oc debug node/crc-pbwlw-master-0
To use host binaries, run `chroot /host`
Pod IP: 192.168.126.11
If you don't see a command prompt, try pressing enter.
sh-4.4#
  1. 然后查看系统的存储情况,此时只有一个名为 vda 的存储设备。
sh-4.4# chroot /host
sh-4.4# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
vda    252:0    0   180G  0 disk 
|-vda1 252:1    0     1M  0 part 
|-vda2 252:2    0   127M  0 part 
|-vda3 252:3    0   384M  0 part /boot
`-vda4 252:4    0 179.5G  0 part /sysroot
  1. 在第二个 Terminal 窗口运行命令启动 virt-manager,完成后将显示以下窗口。
$ virt-manager

在这里插入图片描述

  1. 先点击上图的 Open 图标,此时将显示以下窗口。然后在弹出的 “crc on QEMU/KVM“ 窗口中点击第二个图标,确认此时 crc 虚拟机只有 1 个 VirtIO Disk。
    在这里插入图片描述
  2. 先点击上图的 Add Hardware 按钮,然后在弹出的下图 “Add New Virtual Hardware” 窗口中设置 disk 空间,然后点击 Finish 按钮。
    在这里插入图片描述
  3. 再重复上一步操作 2 次后可以看到如下图显示,此时 VM 会有 4个 VirtIO Disk,其中 3 个是我们手动增加的。
    在这里插入图片描述
  4. 在第一个 Terminal 窗口再次查看 RHCOS 的存储设备,现在已经出现 vdb、vdc、vdd 三个新存储设备。
sh-4.4# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
vda    252:0    0   180G  0 disk 
|-vda1 252:1    0     1M  0 part 
|-vda2 252:2    0   127M  0 part 
|-vda3 252:3    0   384M  0 part /boot
`-vda4 252:4    0 179.5G  0 part /sysroot
vdb    252:16   0    10G  0 disk 
vdc    252:32   0    10G  0 disk 
vdd    252:48   0    10G  0 disk 
  1. 也可运行以下命令为 VM 增加存储设备。
$ qemu-img create -f raw /YOUR/PATH/crc-extra-disk-b 10G
$ qemu-img create -f raw /YOUR/PATH/crc-extra-disk-c 10G
$ qemu-img create -f raw /YOUR/PATH/crc-extra-disk-d 10G
$ sudo virsh attach-disk crc --source /YOUR/PATH/crc-extra-disk-b --target vdb --cache none
$ sudo virsh attach-disk crc --source /YOUR/PATH/crc-extra-disk-c --target vdc --cache none
$ sudo virsh attach-disk crc --source /YOUR/PATH/crc-extra-disk-d --target vdd --cache none

安装并配置 LVM Storage Operator

  1. 在 OpenShift 控制台中使用缺省配置安装 LVM Storage Operator,缺省会安装在 openshift-storage 项目中。
  2. 在 LVM Storage Operator 中使用默认配置创建一个 LVMCluster 的实例。
apiVersion: lvm.topolvm.io/v1alpha1
kind: LVMCluster
metadata:
  name: test-lvmcluster
  namespace: openshift-storage
spec:
  storage:
    deviceClasses:
      - fstype: xfs
        thinPoolConfig:
          sizePercent: 90
          name: thin-pool-1
          overprovisionRatio: 10
        name: vg1
  1. 部署完成后可以在 openshift-storage 项目中看到如下的部署拓扑。
    在这里插入图片描述

  2. 在第二个 Terminal 窗口查看集群 StorageClass 已经有以下两个,其中第一个是 OpenShift Local 自带的,第二项是 ODF LVM Operator 新建的。

$ oc get storageclass
NAME                                     PROVISIONER                        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
crc-csi-hostpath-provisioner (default)   kubevirt.io.hostpath-provisioner   Delete          WaitForFirstConsumer   false                  40d
odf-lvm-vg1                              topolvm.cybozu.com                 Delete          WaitForFirstConsumer   true                   12h
  1. 在第一个 Terminal 窗口可以查看到 RHOCS 的 vdb、vdc、vdd 存储设备已经被使用了。
sh-4.4# lsblk
NAME                                               MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
vda                                                252:0    0   180G  0 disk 
|-vda1                                             252:1    0     1M  0 part 
|-vda2                                             252:2    0   127M  0 part 
|-vda3                                             252:3    0   384M  0 part /boot
`-vda4                                             252:4    0 179.5G  0 part /sysroot
vdb                                                252:16   0    10G  0 disk 
|-vg1-thin--pool--1_tmeta                          253:0    0     4M  0 lvm  
| `-vg1-thin--pool--1-tpool                        253:2    0    27G  0 lvm  
|   |-vg1-thin--pool--1                            253:3    0    27G  1 lvm  
|   `-vg1-2bdb8b85--622f--426a--a096--abe626f32550 253:4    0     1G  0 lvm  /var/lib/kubelet/pods/1c972e66-d879-44d2-92f6-1ba4284237f5/volumes/kubernetes.io~csi/pvc-4f3f49a6-238c-4f77-93ce-96bb8fc77dde/mount
`-vg1-thin--pool--1_tdata                          253:1    0    27G  0 lvm  
  `-vg1-thin--pool--1-tpool                        253:2    0    27G  0 lvm  
    |-vg1-thin--pool--1                            253:3    0    27G  1 lvm  
    `-vg1-2bdb8b85--622f--426a--a096--abe626f32550 253:4    0     1G  0 lvm  /var/lib/kubelet/pods/1c972e66-d879-44d2-92f6-1ba4284237f5/volumes/kubernetes.io~csi/pvc-4f3f49a6-238c-4f77-93ce-96bb8fc77dde/mount
vdc                                                252:32   0    10G  0 disk 
`-vg1-thin--pool--1_tdata                          253:1    0    27G  0 lvm  
  `-vg1-thin--pool--1-tpool                        253:2    0    27G  0 lvm  
    |-vg1-thin--pool--1                            253:3    0    27G  1 lvm  
    `-vg1-2bdb8b85--622f--426a--a096--abe626f32550 253:4    0     1G  0 lvm  /var/lib/kubelet/pods/1c972e66-d879-44d2-92f6-1ba4284237f5/volumes/kubernetes.io~csi/pvc-4f3f49a6-238c-4f77-93ce-96bb8fc77dde/mount
vdd                                                252:48   0    10G  0 disk 
`-vg1-thin--pool--1_tdata                          253:1    0    27G  0 lvm  
  `-vg1-thin--pool--1-tpool                        253:2    0    27G  0 lvm  
    |-vg1-thin--pool--1                            253:3    0    27G  1 lvm  
    `-vg1-2bdb8b85--622f--426a--a096--abe626f32550 253:4    0     1G  0 lvm  /var/lib/kubelet/pods/1c972e66-d879-44d2-92f6-1ba4284237f5/volumes/kubernetes.io~csi/pvc-4f3f49a6-238c-4f77-93ce-96bb8fc77dde/mount

创建 PVC/PV 验证

  1. 执行命令,创建测试项目和测试部署。
$ oc new-project pv-demo
$ oc apply -f - << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  replicas: 2
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
        - name: pod-busybox
          image: busybox:latest
          command: ["/bin/sh"]
          args: ["-c", "while true; do sleep $(($RANDOM % 5 + 5)); done"]
EOF
  1. 进入 OpenShift 开发者视图中的 “拓扑”,先选中的 busybox 部署,然后在 “操作” 中选择 “添加存储” 选项。
    在这里插入图片描述
  2. 在 “添加存储” 页面中按照下图使用创建一个 PVC,并挂载到容器的 /mnt 目录。
    在这里插入图片描述
  3. 创建完 PVC 后 busybox 部署将重新创建对应的 pod。
  4. 完成后可分别进入 busybox 部署的 2 个 pod,然后向 /mnt 目录中写文件,确认文件内容是持久化的。

参考

https://www.redhat.com/en/blog/persistent-data-red-hat-openshift-edge

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值