k8s使用ceph-csi插件的cephfs方式持久化存储

news2024/10/6 8:26:04

环境说明

操作系统:centos-7.9 x86_64,内核版本3.10.0,所有组件安装均在该操作系统
ceph版本:ceph version 14.2.22 nautilus (stable)
kubernetes版本:v1.17.4
ceph-csi版本:v3.0.0
docker版本:19.03.9

部署

前置条件:docker、k8s、ceph均已部署完毕

ceph集群需要完成的工作

ceph 集群开启安全模式ceph config set mon auth_allow_insecure_global_id_reclaim true默认应该是开启的

创建存储池和文件系统

使用cephfs必须开启mds服务(元数据服务的守护进程),此进程管理与CephFS上存储的文件相关的元数据,并协调对Ceph存储集群的访问。因此,若要使用CephFS接口,需要在存储集群中至少部署一个MDS实例

# 在admin节点使用ceph-deploy命令开启mds服务,将mds服务运行在node1节点上
ceph-deploy mds create node1

查看是否启动成功systemctl status ceph-mds@node1
在这里插入图片描述

使用cephfs之前需要事先于集群中创建一个文件系统,并为其分别指定元数据和数据相关的存储池,本次测试创建名为k8s-cephfs的文件系统,使用k8s-cephfs-metadata作为元数据存储池,使用k8s-cephfs为数据存储池

# 创建存储池
ceph osd pool create k8s-cephfs 16
ceph osd pool create k8s-cephfs-metadata 16
# 创建文件系统
ceph fs new k8s-cephfs k8s-cephfs-metadata k8s-cephfs
# 查看创建的cephfs
[root@node1 ~]# ceph fs ls
name: k8s-cephfs, metadata pool: k8s-cephfs-metadata, data pools: [k8s-cephfs ]

查看cluster id以及用户的key

本次操作使用ceph的admin用户,不再另外创建用户,如有需要可自行另外创建

获取admin用户的key

[root@node1 ~]# ceph auth get client.admin  
[client.admin]
	key = AQCV4n5j60KACxAA0ZX1s/ABTrWFcJN5Tnun9w==
	caps mds = "allow *"
	caps mgr = "allow *"
	caps mon = "allow *"
	caps osd = "allow *"
exported keyring for client.admin

获取ceph集群monitor信息,主要是需要其中的fsid和mon的node信息

[root@node1 ~]# ceph mon dump
epoch 1
fsid f38a95d3-b932-480c-89bc-161a4f81c160  // 后续k8s使用的ceph的cluster id是这个
last_changed 2022-11-24 11:18:44.328712
created 2022-11-24 11:18:44.328712
min_mon_release 14 (nautilus)
0: [v2:192.168.221.141:3300/0,v1:192.168.221.141:6789/0] mon.node1  // 这里的3300和6789测试均可使用
dumped monmap epoch 1

k8s集群需要完成的工作

命名空间直接使用default,如果有需要自行创建新的命名空间

在k8s集群拉取ceph-csi代码

本次是在master节点操作,其他节点未做尝试

git clone --branch v3.0.0 https://github.com/ceph/ceph-csi.git
cd ceph-csi/deploy/cephfs/kubernetes

修改yaml文件

  • csi-config-map.yaml
---
apiVersion: v1
kind: ConfigMap
data:
  config.json: |-
    [
      {
        "clusterID": "f38a95d3-b932-480c-89bc-161a4f81c160", # 前面的fsid
        "monitors": [
          "192.168.221.141:6789"
        ]
      }
    ]
metadata:
  name: ceph-csi-config-fs  # 加了fs目的是个rbd的操作做区分
  • csi-provisioner-rbac.yaml和csi-nodeplugin-rbac.yaml里面的命名空间,如果不适用default,需要自行修改为要使用的namespace

  • csi-provisioner-psp.yaml和csi-nodeplugin-psp.yaml这两个文件,因为集群没有开启PodSecurityPolicy ,因此也不设置,也不会部署

部署cephfs csi

kubectl apply -f csi-config-map.yaml 
kubectl apply -f csi-provisioner-rbac.yaml 
kubectl apply -f csi-nodeplugin-rbac.yaml 
kubectl apply -f csi-cephfsplugin-provisioner.yaml 
kubectl apply -f csi-cephfsplugin.yaml 

查看启动的pods是否正常kubectl get pods
在这里插入图片描述

验证

k8s集群操作

创建秘钥

[root@master cephfs]# cd ceph-csi/examples/cephfs
[root@master cephfs]# vim secret.yaml
// 内容如下,其中的userid和userkey都是ceph集群的用户和key,本文第一步已经获取得到了
---
apiVersion: v1
kind: Secret
metadata:
  name: csi-cephfs-secret
  namespace: default
stringData:
  userID: admin
  userKey: AQCV4n5j60KACxAA0ZX1s/ABTrWFcJN5Tnun9w==

  adminID: admin
  adminKey: AQCV4n5j60KACxAA0ZX1s/ABTrWFcJN5Tnun9w==
[root@master cephfs]# kubectl apply -f secret.yaml

编辑storageclass.yaml

vim storageclass.yaml

---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-cephfs-sc
provisioner: cephfs.csi.ceph.com
parameters:
  # (required) String representing a Ceph cluster to provision storage from.
  # Should be unique across all Ceph clusters in use for provisioning,
  # cannot be greater than 36 bytes in length, and should remain immutable for
  # the lifetime of the StorageClass in use.
  # Ensure to create an entry in the configmap named ceph-csi-config, based on
  # csi-config-map-sample.yaml, to accompany the string chosen to
  # represent the Ceph cluster in clusterID below
  clusterID: f38a95d3-b932-480c-89bc-161a4f81c160  # 此处就是填写上面的clusterID
  
  # (required) CephFS filesystem name into which the volume shall be created
  # eg: fsName: myfs
  fsName: k8s-cephfs # 填写上面的文件系统
  
  # (optional) Ceph pool into which volume data shall be stored
  # pool: <cephfs-data-pool>
  
  # (optional) Comma separated string of Ceph-fuse mount options.
  # For eg:
  # fuseMountOptions: debug
  
  # (optional) Comma separated string of Cephfs kernel mount options.
  # Check man mount.ceph for mount options. For eg:
  # kernelMountOptions: readdir_max_bytes=1048576,norbytes
  
  # The secrets have to contain user and/or Ceph admin credentials.
  # 注意,这里的命名空间如有修改,请做修改
  csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/provisioner-secret-namespace: default 
  csi.storage.k8s.io/controller-expand-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/controller-expand-secret-namespace: default 
  csi.storage.k8s.io/node-stage-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/node-stage-secret-namespace: default 
  
  # (optional) The driver can use either ceph-fuse (fuse) or
  # ceph kernelclient (kernel).
  # If omitted, default volume mounter will be used - this is
  # determined by probing for ceph-fuse and mount.ceph
  # mounter: kernel
  
  # (optional) Prefix to use for naming subvolumes.
  # If omitted, defaults to "csi-vol-".
  # volumeNamePrefix: "foo-bar-"
  
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
  - discard
kubectl apply -f storageclass.yaml
kubectl get sc

在这里插入图片描述

创建pvc

kubectl apply -f pvc.yaml
kubectl get pvc

在这里插入图片描述

创建pod

kubectl apply -f pod.yaml
kubectl get pods

在这里插入图片描述
验证成功

日志查看方法

先获取pods信息
在这里插入图片描述
上图中的几个pod,不一定log在哪个pod中,可以试试,因为对k8s还不是很熟悉,暂时不知道更多方式

kubectl logs csi-cephfsplugin-provisioner-7c46d589d9-7m5b4 -c csi-cephfsplugin

安装过程中出现的问题

在安装pvc时,pod一直是pending状态,日志内提示pvc-31c28f95-cf1e-4746-81ce-51d24f34a5b2 an operation with the given Volume ID pvc-31c28f95-cf1e-4746-81ce-51d24f34a5b2 already exists,根据网上教程设置monitor端口为3300后还是不可以。
后来发现是没有启动ceph集群没有开启mds服务,开启之后,pod状态直接转为bound了,后续操作完成。

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

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

相关文章

【网络安全】红队攻防之基础免杀

引言 本文主要介绍“反射型dll注入”及“柔性加载”技术。 反射型dll注入 为什么需要反射型dll注入 常规的dll注入代码如下&#xff1a; int main(int argc, char *argv[]) { HANDLE processHandle; PVOID remoteBuffer; wchar_t dllPath[] TEXT("C:\\experiments\\…

Go语言学习笔记

1. 普通函数声明/定义 函数声明包括函数名、形式参数列表、返回值列表&#xff08;可省略&#xff09;以及函数体 func 函数名(形式参数列表) (返回值列表){函数体 }2. 接口定义及实现 接口定义&#xff0c;注意和上述函数声明作区分 type 接口名 interface{method1(参数列…

【语音去噪】谱减法+维纳滤波+卡尔曼滤波语音去噪【含Matlab源码 1881期】

⛄一、谱减法维纳滤波卡尔曼滤波语音去噪简介 1 维纳滤波算法 在传统的去噪算法中,维纳滤波因其操作简单、去噪效果好,被公认为一种经典的去噪算法。语音信号在时域的表示为: yi( t) si( t) ni( t) ,其中si( t) 、ni( t) 和yi( t) 分别是第i帧原始语音信号、噪声和被噪声污染…

springboot反射执行private方法@Autowired字段为空

springboot反射执行private方法Autowired字段为空描述错误复现controllerserviceReflectServiceImplReflectCallServiceservice 层切面debug 结果图调用 reflectTest 方法(public反射)调用 reflectTest1方法(private反射)分析参考描述 业务代码写完之后&#xff0c;懒得写mock代…

Python基础(四):Python必需掌握基础注释、变量、输出

文章目录 Python必需掌握基础注释、变量、输出 一、注释 1、作用 2、分类及语法 3、快速体验 4、总结 二、变量 1、作用 2、定义变量 三、输出 1、格式化符号 2、体验 3、转义字符 4、结束符 Python必需掌握基础注释、变量、输出 14天学习训练营导师课程&#xf…

[附源码]计算机毕业设计JAVA汽车租赁系统

[附源码]计算机毕业设计JAVA汽车租赁系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

自动化运维CICD

目录 概述 为什么持续集成和发布可以提高效率 如何实现 1、在linux服务器安装部署代码仓库 2、安装jenkins 使用shell脚本实现CICD 使用pipeline实现CICD 使用Blue Ocean实现CICD 概述 持续集成&#xff08;Continuous Integration&#xff0c;CI)和持续发布&#xff0…

C/C++编译器配置——MinGW下载安装

一. 前言 由于重装Win11系统&#xff0c;所有配置环境需要重装&#xff0c;对于C/C编译器MinGW配置做一个简单记录。 VS code等软件只提供编辑器&#xff0c;不提供编译器&#xff0c;因此windows系统上的C/C编译器需要通过安装MinGW实现。 二. 安装过程 在MinGW官网下载安装…

元宇宙产业委风语筑董事长李晖:到更多城市探索元宇宙“虚实结合”

导语&#xff1a;近期李晖和风语筑团队在深度探索“虚实结合”&#xff0c;布局元宇宙&#xff0c;谋求更多的创新。他受中国移动通信联合会元宇宙产业委员会委托&#xff0c;参与研究编撰《元宇宙十大技术》&#xff0c;并为该书做序《元宇宙&#xff1a;数字技术构建美好生活…

(十)延迟队列

延迟队列1. 延迟队列概念2. 延迟队列使用场景3. 整合Springboot4. TTL队列1. 代码架构图2.MQ组件配置文件类代码3. 消息生产者代码4. 消息消费者代码5. 延时队列优化1. 代码架构图2. 配置文件类代码3. 消息生产者代码6. Rabbitmq插件实现延迟队列1.安装延时队列插件2.代码实现7…

强强联合:OpenFeign 整合 Sentinel

书接前文&#xff1a; 微服务间的远程接口调用&#xff1a;OpenFeign 的使用 当项目中使用了 OpenFeign 后&#xff0c;可以很方便的进行远程服务调用&#xff0c;现在有个问题&#xff0c;假如远程服务出现故障了&#xff0c;调不了远程的接口&#xff0c;这边又着急等着返回…

系统启动其实就2个步骤BIOS和MBR(和之后的init/systemd的关系)

1.让计算机知道系统被放在哪个设备上了&#xff08;BIOS&#xff09; 计算机启动先启动bios&#xff0c;再去读MBR&#xff0c;MBR动了才会启动操作系统 2.让计算机知道哪里的分区是活动分区(MBR)&#xff0c;找出来把系统引导到这里来 这两部类似于早先游戏里的红色警报和星…

springcloud20:springcloudalibaba之Nacos

为什么会出现spring alibaba 整个Netflix项目进入维护模式&#xff08;不会添加新功能&#xff09; springcloud: Nerflix:eureka ribbon feign ruul config springcloud一些小技术和其整合 此时内部出问题 SpringCloud 吸收了springcloud alibaba 此时springcloud带了了什么呢…

【笔试强训】Day 3

&#x1f308;欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&#x…

python中pytest库用法详解

Pytest 是用于测试 Python 应用的 Python 库。 官方文档&#xff1a;Full pytest documentation — pytest documentation 安装&#xff1a; pip install pytest pytest 测试发现约定规范 如果未指定任何参数&#xff0c;则在testpaths&#xff08;如果已配置&#xff09;或…

智慧水利数字孪生案例分享:数字孪生水利,助力三峡科学防洪防汛

长江是我国第一大河流&#xff0c;长江流域在我国经济发展中&#xff0c;占据举足轻重的地位。与此同时&#xff0c;长江流域频繁的洪涝、气象灾害&#xff0c;严重影响危害着流域内经济社会发展和生态环境&#xff0c;因此长江流域防汛管理被作为我国防洪体系中的关键工程。水…

阿里大咖纯手写的微服务入门笔记,从基础到进阶直接封神

前言 学习是一种基础性的能力。然而&#xff0c;“吾生也有涯&#xff0c;而知也无涯。”&#xff0c;如果学习不注意方法&#xff0c;则会“以有涯随无涯&#xff0c;殆矣”。 学习就像吃饭睡觉一样&#xff0c;是人的一种本能&#xff0c;人人都有学习的能力。我们在刚出生的…

通讯/服务器公司 测试|测试开发 面试真题|面经 汇总

浪潮 测试开发 一面 8.24 三个面试官。一个HR&#xff0c;两个技术官。 1 为什么选择测开&#xff1f;意向工作地点。 2 软件质量模型 3 测试要做哪些测试 4 集成测试和验收测试的区别&#xff1f; 5 黑盒测试和白盒测试的理解 6 知道哪些黑盒测试和白盒测试的方法 7 手工测试…

【观察】“中国算力网”向全社会开放,意味着什么?

今天&#xff0c;算力的重要性已被提升到全新的高度&#xff0c;这是因为算力作为数字经济时代新的生产力&#xff0c;对推动科技进步、行业数字化转型以及经济社会发展都发挥着至关重要的作用。根据中国信通院发布《中国算力发展指数白皮书&#xff08;2022年&#xff09;》显…

AE插件:流体渐变着色特效动画生成 Potok mac

Potok是After Effects的流体渐变插件。它会产生噪波并使用渐变对其进行着色。可以从UI Gradient Control或任何图层设置渐变。噪波可以用任何层掩盖。 Noise噪波&#xff1a;Potok 插件有一个内置的噪音发生器&#xff0c;有四种噪音类型。噪声动画可以无缝循环。此外&#xf…