《OpenShift / RHEL / DevSecOps 汇总目录》
说明:本文已经在支持 OpenShift 4.12 的 OpenShift Local 环境中验证
文章目录
- 什么是 ODF LVM ?
- 为 OpenShift Local 增加额外存储设备
- 安装并配置 ODF LVM Operator
- 使用 ODF 创建 PVC/PV 验证
什么是 ODF LVM ?
OpenShift Data Foundation Logical Volume Manager(即 ODF LVM)是利用 OpenShift 单节点的本地存储部署 ODF 的一种方式,可以把 ODF LVM 看成是在单节点部署 ODF 的一种精简部署方式。
由于 ODF 其实是一种容器化 Ceph 部署方式,因此部署 ODF LVM 的 OpenShift 单节点至少需要额外提供 3 个存储设备。本文使用 OpenShift Local 演示如何在单节点 OpenShift 上安装配置 ODF。
需要注意的是,标准 ODF 是部署在多个节点上的,因此具备 RWX能力。而 ODF LVM 只运行在一个节点上,因此其 PV 没有多节点同时访问的 RWX 能力。
为 OpenShift Local 增加额外存储设备
- 在第一个 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
Error from server (NotFound): pods "node" not found
[dawnsky@openshift crc-linux-2.12.0-amd64]$ 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
安装并配置 ODF LVM Operator
- 在 OpenShift 控制台中使用缺省配置安装 ODF LVM Operator。缺省会安装在 openshift-storage 项目中。
- 在 ODF LVM Operator 中使用默认配置创建一个 LVMCluster 的实例。
kind: LVMCluster
apiVersion: lvm.topolvm.io/v1alpha1
metadata:
name: odf-lvmcluster
namespace: openshift-storage
spec:
storage:
deviceClasses:
- name: vg1
thinPoolConfig:
name: thin-pool-1
overprovisionRatio: 10
sizePercent: 90
- 部署完成后可以在 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
使用 ODF 创建 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 目录中写文件,确认文件内容是持久化的。