《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 的节点准备空盘。
- 在第一个 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#
- 然后查看系统的存储情况,此时只有一个名为 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
- 在第二个 Terminal 窗口运行命令启动 virt-manager,完成后将显示以下窗口。
$ virt-manager
- 先点击上图的 Open 图标,此时将显示以下窗口。然后在弹出的 “crc on QEMU/KVM“ 窗口中点击第二个图标,确认此时 crc 虚拟机只有 1 个 VirtIO Disk。
- 先点击上图的 Add Hardware 按钮,然后在弹出的下图 “Add New Virtual Hardware” 窗口中设置 disk 空间,然后点击 Finish 按钮。
- 再重复上一步操作 2 次后可以看到如下图显示,此时 VM 会有 4个 VirtIO Disk,其中 3 个是我们手动增加的。
- 在第一个 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
- 也可运行以下命令为 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
- 在 OpenShift 控制台中使用缺省配置安装 LVM Storage Operator,缺省会安装在 openshift-storage 项目中。
- 在 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
-
部署完成后可以在 openshift-storage 项目中看到如下的部署拓扑。
-
在第二个 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
- 在第一个 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 验证
- 执行命令,创建测试项目和测试部署。
$ 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
- 进入 OpenShift 开发者视图中的 “拓扑”,先选中的 busybox 部署,然后在 “操作” 中选择 “添加存储” 选项。
- 在 “添加存储” 页面中按照下图使用创建一个 PVC,并挂载到容器的 /mnt 目录。
- 创建完 PVC 后 busybox 部署将重新创建对应的 pod。
- 完成后可分别进入 busybox 部署的 2 个 pod,然后向 /mnt 目录中写文件,确认文件内容是持久化的。
参考
https://www.redhat.com/en/blog/persistent-data-red-hat-openshift-edge