OpenShift 4 - 在单节点的 OpenShift 上用 NFS Operator 实现以 RWX 访问存储

news2024/11/19 4:05:46

《OpenShift / RHEL / DevSecOps 汇总目录》
文本已在 OpenShift Local 4.12 环境中进行验证。

文章目录

  • OpenShift 支持的存储访问模式
  • 用 NFS Provisioner Operator 实现 RWX 访问存储
    • 安装 NFS Operator
    • 解决安装 Operator 过程无法访问谷歌 gcr.io 上的容器镜像
    • 配置 NFSProvisioner
    • 验证
  • 参考

OpenShift 支持的存储访问模式

红帽 OpenShift 4 内置支持的 PV 插件和访问模式如下表。另外 OpenShift 也可支持其他第三方存储 ,一般是通过 OperatorHub 进行安装。
根据下表可以看出 ReadWriteOnce - RWO 模式支持也为最广泛,而 ReadWriteMany - RWX 模式却只有少量插件才支持。而在支持 RWX 的环境中 NFS 无疑是最容易获得的,因为其他支持 RWX 存储要么只能在公有云上使用,要么就是通常需要较为复杂的存储硬件和软件才能支持。
在这里插入图片描述

用 NFS Provisioner Operator 实现 RWX 访问存储

下面介绍如何通过 NFS Provisioner Operator 在单节点 OpenShift 中(例如 OpenShift Local)使用节点的本地存储提供基于 NFS 的 PV。

安装 NFS Operator

  1. 可以在 OpenShift 控制台的 OperatorHub 中找到 NFS Provisioner Operator,然后使用缺省配置安装该 Operator。
    在这里插入图片描述
    也可运行以下命令通过 nfs-provisioner-operator 订阅安装。
$ cat << EOF | oc apply -f -  
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: nfs-provisioner-operator
  namespace: openshift-operators
spec:
  channel: alpha
  installPlanApproval: Automatic
  name: nfs-provisioner-operator
  source: community-operators
  sourceNamespace: openshift-marketplace
EOF
  1. 安装成功后可查看 Operator 的状态。
    在这里插入图片描述

解决安装 Operator 过程无法访问谷歌 gcr.io 上的容器镜像

由于在安装过程会用到谷歌 gcr.io 上的容器镜像,因此在国内安装 NFS Operator 的时候会遇到失败的情况。解决方案如下:

  1. 运行命令查看在 nfs-provisioner-operator 中使用到来自谷歌的镜像,应该有 kube-rbac-proxy 和 kube-rbac-proxy 两个镜像。
$ oc get ClusterServiceVersion
NAME                              DISPLAY                      VERSION      REPLACES                          PHASE
nfs-provisioner-operator.v0.0.7   NFS Provisioner Operator     0.0.7        nfs-provisioner-operator.v0.0.6   Installing
 
$ oc get ClusterServiceVersion nfs-provisioner-operator.v0.0.7 -oyaml | grep gcr.io
              "image": "k8s.gcr.io/sig-storage/nfs-provisioner@sha256:e943bb77c7df05ebdc8c7888b2db289b13bf9f012d6a3a5a74f14d4d5743d439",
                image: gcr.io/kubebuilder/kube-rbac-proxy@sha256:e10d1d982dd653db74ca87a1d1ad017bc5ef1aeb651bdea089debf16485b080b
  - image: k8s.gcr.io/sig-storage/nfs-provisioner@sha256:e943bb77c7df05ebdc8c7888b2db289b13bf9f012d6a3a5a74f14d4d5743d439
  - image: gcr.io/kubebuilder/kube-rbac-proxy@sha256:e10d1d982dd653db74ca87a1d1ad017bc5ef1aeb651bdea089debf16485b080b
  1. 在 OpenShift 控制台的 OperatorHub 中进入 NFS Provisioner Operator,然后在 YAML 中替换以下用到的 2 个镜像,最后保存。
    1)将 gcr.io/kubebuilder/kube-rbac-proxy@sha256:e10d1d982dd653db74ca87a1d1ad017bc5ef1aeb651bdea089debf16485b080b
    替换为 quay.io/dawnskyliu/kube-rbac-proxy:latest
    2)将 k8s.gcr.io/sig-storage/nfs-provisioner@sha256:e943bb77c7df05ebdc8c7888b2db289b13bf9f012d6a3a5a74f14d4d5743d439
    替换为 quay.io/dawnskyliu/nfs-provisioner:latest
    在这里插入图片描述
  2. 由于此时的 nfs-provisioner-operator-controller-manager 部署还用的是谷歌镜像,因此部署状态一直不会 READY。
$ oc get deployment nfs-provisioner-operator-controller-manager -n openshift-operators
  1. 由于 nfs-provisioner-operator-controller-manager 部署的生命周期是由 NFS Provisioner Operator 维护的,因此可执行以下命令先删除 nfs-provisioner-operator-controller-manager 部署,稍后 NFS Provisioner Operator 会自动根据前面更新的镜像重新创建该部署。
$ oc delete deployment nfs-provisioner-operator-controller-manager -n openshift-operators
  1. 查看 nfs-provisioner-operator-controller-manager 部署的状态到 READY 即可。
$ oc get deployment -n openshift-operators
NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
nfs-provisioner-operator-controller-manager   1/1     1            1           9m
  1. 确认 NFS Provisioner Operator 已经安装成功。
$ oc get clusterserviceversion
NAME                              DISPLAY                    VERSION   REPLACES                          PHASE
nfs-provisioner-operator.v0.0.7   NFS Provisioner Operator   0.0.7     nfs-provisioner-operator.v0.0.6   Succeeded

配置 NFSProvisioner

  1. 执行命令,对节点打标签。
$ target_node=$(oc get node --no-headers -o name|cut -d'/' -f2)
$ oc label node/${target_node} app=nfs-provisioner
node/crc-pbwlw-master-0 labeled
  1. 执行命令进入集群的节点内部。
$ oc debug node/${target_node}
Starting pod/crc-pbwlw-master-0-debug ...
To use host binaries, run `chroot /host`

Pod IP: 192.168.126.11
If you don't see a command prompt, try pressing enter.
  1. 在节点内部创建 NFS 使用的目录,然后退出。
sh-4.4# chroot /host
sh-4.4# mkdir -p /home/core/nfs
sh-4.4# chcon -Rvt svirt_sandbox_file_t /home/core/nfs
changing security context of '/home/core/nfs'
sh-4.4# exit
exit
sh-4.4# exit
exit

Removing debug pod ...
  1. 创建 NFSProvisioner 对象,会创建对应的 deployment 和 storageclass 对象。
$ oc new-project nfsprovisioner-operator
$ cat << EOF | oc apply -f -  
apiVersion: cache.jhouse.com/v1alpha1
kind: NFSProvisioner
metadata:
  name: nfsprovisioner-sample
  namespace: nfsprovisioner-operator
spec:
  nodeSelector: 
    app: nfs-provisioner
  hostPathDir: "/home/core/nfs"
EOF

$ oc get deployment
NAME              READY   UP-TO-DATE   AVAILABLE   AGE
nfs-provisioner   1/1     1            1           5h18m
  1. 注意:如果是在国内部署而前面采用了手动修改的 NFS Provisioner Operator 的配置,此处还需额外手动修改 nfs-provisioner 部署的配置。
    将 k8s.gcr.io/sig-storage/nfs-provisioner@sha256:e943bb77c7df05ebdc8c7888b2db289b13bf9f012d6a3a5a74f14d4d5743d439
    替换为 quay.io/dawnskyliu/nfs-provisioner:latest
  2. 查看集群包含的 storageclass 对象。
$ oc get storageclass
NAME                                     PROVISIONER                        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
crc-csi-hostpath-provisioner (default)   kubevirt.io.hostpath-provisioner   Delete          WaitForFirstConsumer   false                  36d
nfs                                      example.com/nfs                    Delete          Immediate              false                  3m38s
  1. 由上一步的结果可知,名为 nfs 的 storageclass 不是集群缺省的,而 crc-csi-hostpath-provisioner 是缺省的 storageclass。可以执行下面命令将 nfs 设为缺省的 storageclass。
$ oc patch storageclass crc-csi-hostpath-provisioner -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
$ oc patch storageclass nfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

$ oc get storageclass
NAME                                     PROVISIONER                        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
crc-csi-hostpath-provisioner             kubevirt.io.hostpath-provisioner   Delete          WaitForFirstConsumer   false                  36d
nfs (default)                            example.com/nfs                    Delete          Immediate              false                  4m20s

验证

  1. 执行命令,创建测试 PVC。
$ cat << EOF | oc apply -f -  
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nfs-pvc-example
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
  storageClassName: nfs
EOF
  1. 确认 PV 和 PVC 已经是可用状态。
$ oc get pvc
NAME              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs-pvc-example   Bound    pvc-1399650c-8c58-4057-8693-1c4f4d80efa0   1Mi        RWX            nfs            35s

$ oc get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                                 STORAGECLASS                   REASON   AGE
pvc-1399650c-8c58-4057-8693-1c4f4d80efa0   1Mi        RWX            Delete           Bound    nfsprovisioner-operator/nfs-pvc-example               nfs                                     32s

参考

https://developers.redhat.com/articles/2022/04/20/create-and-manage-local-persistent-volumes-codeready-containers#set_up_persistent_volumes_anywhere

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

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

相关文章

《零基础学机器学习》读书笔记三之基本机器学习术语

《零基础学机器学习》读书笔记三之基本机器学习术语 一、机器学习快速上手路径&#xff08;续&#xff09; 1.3 基本机器学习术语 1.3.1 特征 特征是机器学习中的输入&#xff0c;原始的特征描述了数据的属性。特征的维度指的是特征的数目。 把向量、矩阵和其他张量的维度统…

React脚手架应用(二)

1、react脚手架 脚手架简介 用来帮助程序员快速创建一个基于xxx库的模板项目 1、包含了所有需要的配置&#xff08;语法检查、jsx编译、devServer…&#xff09;&#xff1b; 2、下载好了所有相关的依赖&#xff1b; 3、可以直接运行一个简单效果&#xff1b; create-react-a…

加速企业数字化进展,小程序容器来帮忙

近年来&#xff0c;由于新冠疫情&#xff0c;诸多企业面临经济挑战&#xff0c;高效办公常常无法正常保证。在此期间&#xff0c;不少企业纷纷加快了数字化进展。 2021年&#xff0c;在Gartner新型技术成熟度曲线中我们看到&#xff1a;组装式应用、实时事件中心即服务、生成式…

软考高级系统架构师背诵要点---系统安全与系统可靠性分析

系统安全与系统可靠性分析 系统安全&#xff1a; 信息摘要、数字签名、数字信封 被动攻击&#xff1a;收集信息为主&#xff0c;破坏保密性 窃听&#xff1a;用各种可能的合法手段和非法手段窃取系统中的信息资源和敏感信 业务流分析&#xff1a;通过对系统进行长期的监听&a…

Spark08: Spark Job的三种提交模式

一、三种任务提交方式 1. 第一种&#xff0c;standalone模式 基于Spark自己的standalone集群。指定–master spark://bigdata01:7077 2. 第二种&#xff0c;是基于YARN的client模式。 指定–master yarn --deploy-mode client 使用场景&#xff1a;这种方式主要用于测试&am…

Homekit智能家居DIY-智能通断开关

智能通断器&#xff0c;也叫开关模块&#xff0c;可以非常方便地接入家中原有开关、插座、灯具、电器的线路中&#xff0c;通过手机App或者语音即可控制电路通断&#xff0c;轻松实现原有家居设备的智能化改造。 随着智能家居概念的普及&#xff0c;越来越多的人想将自己的家改…

自定义archetype脚手架完整步骤与异常情况处理方案

自定义archetype脚手架完整步骤与异常情况处理方案一、创建模板项目二、生成骨架jar包三、骨架安装到本地仓库如果出现安装位置错误的情况&#xff0c;参考以下场景处理&#xff1a;四、选择骨架&#xff0c;创建新项目创建项目时&#xff0c;如果一直卡在Generating project i…

Java集合(七)LinkedHashSet

LinkedHashSet的全面说明&#xff1a; &#xff08;1&#xff09;LinkedHashSet是HashSet的子类 &#xff08;2&#xff09;LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组双向链表 HashSet为数组单向链表 &#xff08;3&#xff09;LinkedHashSet根据元素的has…

Redis基础篇:Redis常见命令与数据结构

文章整理自B站黑马视频课程第一章&#xff1a;Redis数据结构介绍一&#xff1a;五种常见基本类型二&#xff1a;三种不常见类型第二章&#xff1a;数据类型的使用一&#xff1a;Redis通用命令二&#xff1a;String类型1&#xff1a;String常见命令2&#xff1a;String常见命令实…

任务系统的程序设计

任务是程序应用中常见的系统&#xff0c;它有助于用户代入角色&#xff0c;也有助于研发、运营和用户的互动&#xff0c;通常完成任务之后会给予用户一定的奖励。1&#xff0c;基本数据结构早期的任务系统设计的都很简单&#xff0c;大部分都是线性结构&#xff0c;偶尔会有环任…

负载均衡-

常见的负载均衡系统包括 3 种&#xff1a;DNS 负载均衡、硬件负载均衡和软件负载均衡。 DNS 负载均衡 DNS 是最简单也是最常见的负载均衡方式&#xff0c;一般用来实现地理级别的均衡。例如&#xff0c;北方的用户访问北京的机房&#xff0c;南方的用户访问深圳的机房。DNS 负…

【FreeRTOS】详细讲解FreeRTOS中事件(event)并通过具体示例讲述其用法

文章目录事件函数解析示例事件 事件&#xff0c;实际上是一种任务间通信的机制&#xff0c;主要用于实现多任务间的同步&#xff0c;其只能是事件类型的通信&#xff0c;无数据传输。与信号量不同的是&#xff0c;它可以实现一对多&#xff0c;多对多的同步。即可以是任意一个事…

为什么data属性是一个函数而不是一个对象?

一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象&#xff0c;也可以是一个函数 const app new Vue({el:"#app",// 对象格式data:{foo:"foo"},// 函数格式data(){return {foo:"foo"}} }) 组件中定义data属性&#x…

MACD二次金叉选股公式,零轴上下、一次三次金叉举一反三

本文介绍了MACD二次金叉选股公式编写思路&#xff0c;以MACD零轴之下二次金叉为例&#xff0c;编写选股公式&#xff0c;进行信号过滤&#xff0c;并把选股公式改编为技术指标。此外举一反三&#xff0c;介绍了三次金叉以及MACD零轴上二次金叉。 一、MACD二次金叉选股公式编写 …

ECharts线性渐变色示例演示

第003个点击查看专栏目录Echarts的渐变色采用了echarts.graphic.LinearGradient的方法&#xff0c;可以根据代码中的内容来看如何使用。线性渐变&#xff0c;多用于折线柱形图&#xff0c;前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1&#xff0c;相当于在图形包围盒中的百分…

计算机图形学 第10章 真实感图形

目录 学习目标 前情提要 # RGB颜色模型 HSV颜色模型 CMYK颜色模型/印刷颜色模型 简单光照模型&#xff08;考&#xff09;⭐⭐⭐ 简单光照模型假定&#xff1a; 材质属性 环境光模型 漫反射光模型 镜面反射光模型 Phong反射模型: 光强衰减 增加颜色 光滑着色 直线段的…

CentOS 7.9安装zabbix6.0LTS版本

环境说明 这里使用为 CentOS 7.9版本进行测试验证&#xff0c;zabbix Server 采用源码包部署&#xff0c;数据库采用 MySQL8.0版本&#xff0c;zabbix-web使用 &#xff0c;nginxphp来实现。 具体信息如下&#xff1a; 软件名版本zabbix-server6.0.12LTSzabbix-agent6.0.12LT…

MySQL数据库的常见考点

文章目录1、ACID事务原理事务持久性事务原子性MVCC基本概念MVCC基本原理undo logundo log版本链readviewMVCC实现原理RC读已提交RR可重复读MVCC实现原理总结2、并发事务引发的问题3、事务隔离级别4、索引4.1、索引概述4.2、索引优缺点4.3、索引结构二叉树B-Tree树BTree树BTree优…

测试组合生成器-allpairspy

1、前言 在我们写功能用例时&#xff0c;常常会遇到多个参数有很多的选项&#xff0c;而如果想把这些参数值都要覆盖执行的话&#xff0c;工作量可想而知。那有没有什么办法既可以减少用例数量&#xff0c;也可以保证用例质量又降低测试时间成本&#xff0c;本篇将介绍一款工具…

关于机房精密空调监控系统,你想了解的都在这里!

机房精密空调是针对现代电子设备机房规划的专用空调&#xff0c;它的作业精度和可靠性都要比一般空调高得多。在计算机机房中的设备是由很多的微电子、精细 机械设备等组成&#xff0c;而这些设备运用了很多的易受温度、湿度影响的电子元器件、机械构件及资料&#xff0c;所以精…