OpenShift 4 - 在单节点 OpenShift 上部署 ODF 存储软件

news2024/11/8 13:56:30

《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 增加额外存储设备

  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
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#
  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 

安装并配置 ODF LVM Operator

  1. 在 OpenShift 控制台中使用缺省配置安装 ODF LVM Operator。缺省会安装在 openshift-storage 项目中。
  2. 在 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
  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

使用 ODF 创建 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 目录中写文件,确认文件内容是持久化的。

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

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

相关文章

Mock的接口自动化测试如何测?

1.Mock实现原理和实现机制 在某些时候&#xff0c;后端在开发接口的时候&#xff0c;处理逻辑非常复杂&#xff0c;在测试的时候&#xff0c;后端在未完成接口的情况下该如何去测试呢&#xff1f; 我们需要测试&#xff0c;但是有些请求又需要修改一下参数&#xff0c;或者改…

寻找适合程序员的笔记软件

做为一个程序员,有两个东西是我们必需的.一个是搜索,另一个则是记录. 当我们遇到不会或解决不了的困难点时,我们会第一时间使用搜索(如Google)来寻找解决方案,而当我们积累与在技术上有任何心得时,我们会记录它. 因而,寻找一个合适的笔记软件,对程序员非常重要. 一) 程序员…

Apache Spark 机器学习 特征转换 1

分词器&#xff08;Tokenizer&#xff09; 分词是一个处理过程&#xff0c;其将文本句子分割成一系列独立的单词词汇集合&#xff0c;Spark提供Tokenizer分词器类&#xff0c;其提供的功能是使用分隔符的方式处理文本句子的特征转换&#xff0c;Spark提供RegexTokenizer分词器…

在PC上安装OpenSSL,生成证书

文章目录一.在编程 PC 上安装 OpenSSL1. 下载安装 OpenSSL2.生成CA认证3. 生成 Broker 证书4. 生成各个 Client 的证书一.在编程 PC 上安装 OpenSSL 为了使用带 TLS 安全证书的 ADS Over MQTT&#xff0c;在 MQTT 的 Server 和 Client 侧都需要证书以进行安全通信&#xff0c;…

安装vue-cli2和3以及创建vue2和vue3项目的步骤及区别

文章目录安装vue-cli2版本步骤1.下载vue-cli2问题1&#xff1a;安装Vue Cli出现EEXIST: file already exists, cmd shim ‘C:\Users\2.vue-cli2构建vue项目问题2&#xff1a;报错&#xff1a; vue-cli Failed to download repo vuejs-templates/webpack: connect ETIMEDOUT 19…

「兔了个兔」福兔贺春,纯CSS实现超精美月兔404界面(附源码)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

搭建一个FAQ智能问答系统/服务

FAQ智能问答系统 介绍 项目传送门&#xff1a;https://github.com/wzzzd/FAQ_system 构建了一个FAQ智能问答系统。 使用多种方法&#xff0c;实现FAQ的问题-模板匹配功能。 使用Tornado框架&#xff0c;部署成轻量级的Web服务应用。 整体框架如下。 流程 1.初始化流程 1.…

这福利给你要不要 — 用Python采集相亲网站女生数据

前言 俗话说学咱这行的男同志 找对象容易吗 这马上就要过完年了 是时候找找女朋友了 我在这里摸索到了个网站 或许你们可以来看看 送一波单身福利 不需要的也可以学学怎么采集这些数据呗 环境与模块 环境开发 Python 3.8Pycharm 模块使用 import parsel --> p…

类与对象的原理

前言 在JavaScript中&#xff0c;类的实现是基于原型继承机制的。 JavaScript中的类的一个重要特性是“动态可继承”。 类与原型 在JavaScript中&#xff0c;类的所有实例对象都从同一个原型对象上继承属性&#xff0c;因此原型对象是类的核心。 所有的类都有一个共同的根…

关系数据库——关系操作和关系完整性

文章目录一、关系操作1.基本的关系操作2.关系数据语言的分类关系代数语言关系演算语言具有关系代数和关系演算双重特点的语言二、关系的完整性1.实体完整性(Entity Integrity)实体完整性规则2.参照完整性(Referential Integrity)参照完整性规则引用关系3.用户定义的完整性(User…

WebRTC 的连接过程

经过前面几部分的铺垫&#xff0c;你应该对P2P音视频互动的过程有了一个大概的了解&#xff0c;有可能你会觉得过程比较繁琐&#xff0c;甚至涉及到了网络底层。但是&#xff0c;不要担心&#xff0c;WebRTC已经帮我们做了很多的事情&#xff0c;让我们在音视频开发时变得轻而易…

【Spring源码】22. 属性填充populateBean()详解

进入populateBean()对bean的属性进行填充&#xff0c;将各个属性值注入&#xff08;存在其他bean的属性&#xff0c;则会递归初始化依赖的bean&#xff09;一开始会先对传入的参数进行判断&#xff08;如下图红框框中的逻辑&#xff09;如果传入的BeanWrapper和RootBeanDefinit…

SpringBoot3+最新MybatisPlus+Mysql与TDengine双数据源

前言 昨天写的ideaApifox uploader插件apifox新年第一天上班就上榜了&#xff0c;真是不错。今天来补一篇&#xff0c;本来应该是在前一篇之前发的。实际上就是最新的springBoot集成最新的mybatisPlus&#xff0c;加双数据源&#xff1a;mysql、TDengine&#xff0c;一个关系型…

kvm虚拟机克隆

kvm虚拟机克隆链接克隆和完整克隆的区别完整克隆自动克隆手动克隆的步骤1.复制模板vm磁盘为新vm的磁盘2.复制模板vm配置文件为新vm的配置文件3.修改新vm配置文件中的信息为新vm的信息4.导入新vm的配置文件5.启动新vm链接克隆1.生成链接克隆虚拟机磁盘文件2.后续流程与手动克隆一…

【算法练习】链表中环的入口结点

题源&#xff1a;牛客描述给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。数据范围&#xff1a;n≤10000&#xff0c;1<结点值<10000要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂度O(…

1、数据库概述

文章目录1 为什么要使用数据库2 数据库与数据库管理系统2.1 数据库的相关概念2.2 数据库与数据库管理系统的关系2.3 常见的数据库管理系统排名(DBMS)2.4 常见的数据库介绍3 MySQL介绍3.1 概述3.2 MySQL发展史重大事件3.3 关于MySQL 8.03.4 为什么选择MySQL3.5 Oracle vs MySQL4…

学成在线项目开发技巧整理---第二部分

1.静态资源处理通常项目会采用动静分离架构,利用Nginx作为静态资源服务器,存放所有静态资源:#访问动态资源时,将请求负载均衡到多个服务器实例或者多个网关实例 upstream webservice{server 192.168.200.146:8080; }server {listen 80;server_name localhost;#动态资源l…

C++基础知识点整理笔记(一)

一直想尝试自己动手构建一个简单的深度学习训练框架&#xff0c;包括数据读取与处理、PS、NN前后向传播、模型save和load、不同训练方式&#xff08;offline/online .etc&#xff09;、指标监控、模型部署等部分, 去深入研究内部深度学习训练框架及horovod、byteps、pslite、te…

深刻理解状态机设计需要避免的冒险;时序电路可能存在essential hazard;处理单元里的control和datapath;竞争冒险【SV】【VLSI】

深刻理解状态机设计需要避免的冒险&#xff1b;时序电路可能存在essential hazard&#xff1b;处理单元里的control和datapath&#xff1b;竞争冒险【SV】【VLSI】0. 前言&#xff1a;时序电路可能存在essential hazard1. 理解control和datapath1.1 Datapath control2. 硬件电路…

MFC|创建一个对话框及窗体各个属性介绍

参考&#xff1a; VS2015 建立一个C的MFC简易窗体程序项目&#xff08;https://www.cnblogs.com/xingboy/p/11059721.html&#xff09; 对话框中各项属性介绍&#xff08;https://blog.csdn.net/u012350993/article/details/26093051&#xff09; MFC窗口风格 WS_style/WS_EX_s…