K8s对接Ceph-csi配置手册(附带踩坑记录以及解决方法)

目录

Ceph CSI (Container Storage Interface)

CSI 的作用:

前提配置

版本信息

获取Ceph认证信息

获取Ceph集群Monitor信息

下载并部署Ceph CSI

          如果此时全部显示错误,那就代表镜像拉取错误,此时执行的yaml脚本,通过yaml脚本去K8S的镜像仓库去拉取镜像。如果这一步遇到错误可以直接去最下方查看解决办法。​编辑

创建Secret

创建StorageClass

创建PVC

创建Pod

验证

 

错误解决方法:

1. kubuctl get po -o wide 的时候发现惊险全部没有被拉取下来,此时我们可以通过describle去分析一下缺少哪些镜像。

2. failed to fetch monitor list using clusterID

3. curl: (52) Empty reply from server


Kubernetes (K8S) 是一个流行的容器编排平台,而 Ceph 是一个分布式存储系统,提供了对象存储、块存储和文件系统等多种存储服务。在 Kubernetes 中使用 Ceph 作为持久化存储后端是一种常见的部署模式。

Ceph CSI (Container Storage Interface)

Ceph CSI(容器存储接口)是 Ceph 社区为 Kubernetes 开发的一个插件,它允许 Kubernetes 使用 Ceph 的块存储功能。CSI 是 Kubernetes 存储生态的一部分,用于标准化各种存储系统的集成方式。

CSI 的作用:
  • 标准化接口:CSI 提供了一个标准的接口,使得 Kubernetes 可以与不同的存储系统交互。
  • 存储管理:通过 CSI 插件,Kubernetes 可以创建、删除、挂载和卸载存储卷。
  • 动态配置:支持动态配置存储类(StorageClass),这允许用户定义存储需求,并由 Kubernetes 动态地分配资源。

前提配置

  1. 确保Ceph集群和Kubernetes集群已经正确部署并运行稳定。
  2. 配置MDS服务,确保CephFS可以使用。
  3. 创建存储池和文件系统,为CephFS接口准备必要的存储资源。
  4. 确保K8S和Ceph版本有所匹配。

目前K8s与ceph - csi版本对应:

版本信息

  • Kubernetes: v1.19.7
  • Ceph-CSI: v3.4.0
  • Ceph: v16.2.10

获取Ceph认证信息

创建认证用户:

ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=test1, allow rw pool=test2'

查看认证用户信息:

ceph auth get client.cephfs

输出示例:

 
ceph auth get client.admin

        输出示例:

        

获取Ceph集群Monitor信息

获取Cluster ID和Monitors信息:

ceph mon dump

输出示例:

epoch 1
fsid f38a95d3-b932-480c-89bc-161a4f81c160
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

下载并部署Ceph CSI

下载Ceph-CSI:

wget https://github.com/ceph/ceph-csi/archive/refs/tags/v3.4.0.tar.gz
tar xf v3.4.0.tar.gz
cd ceph-csi-3.4.0/deploy/cephfs/kubernetes/

修改csi-config-map.yaml文件:

注意,文件中不可有任何注释!!否则在创建PVC的时候会提示报错,显示获取不到Monitor的列表。

apiVersion: v1
kind: ConfigMap
data:config.json: |[{"clusterID": "f38a95d3-b932-480c-89bc-161a4f81c160","monitors": ["192.168.221.141:6789"]}]
metadata:name: ceph-csi-config-fs

部署Ceph 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

检查Pod状态:

kubectl get po -o wide

          如果此时全部显示错误,那就代表镜像拉取错误,此时执行的yaml脚本,通过yaml脚本去K8S的镜像仓库去拉取镜像。如果这一步遇到错误可以直接去最下方查看解决办法。

创建Secret

创建Secret文件:

apiVersion: v1
kind: Secret
metadata:name: csi-cephfs-secretnamespace: default
stringData:userID: cephfs   // 上方获取到的两个用户信息对应填写即可。userKey: AQDW9k1lDBtfBRAAP7aBGqZMXSXlNeWbmQNAoQ==adminID: adminadminKey: AQCV4n5j60KACxAA0ZX1s/ABTrWFcJN5Tnun9w==

应用Secret:

kubectl apply -f secret.yaml

创建StorageClass

编辑storageclass.yaml文件:

        

应用StorageClass:

kubectl apply -f storageclass.yaml
kubectl get sc

创建PVC

创建pvc.yaml文件:

应用PVC:

kubectl apply -f pvc.yaml
kubectl get pvc,pv

STATUS显示Bound即代表正常

 此时如果这个地方报错先检查你的pod是否全部处于运行状态,其次去检查你的csi-config-map.yaml是否有注释,如果都没问题还是报错可以用describle去检查一下报错原因。

示例:

kubectl describe pvc <pvc-name> [-n <namespace>]

创建Pod

创建pod.yaml文件:

apiVersion: v1
kind: Pod
metadata:name: csi-cephfs-demo-pod
spec:containers:- name: csi-cephfs-demo-containerimage: nginxvolumeMounts:- mountPath: "/usr/share/nginx/html"name: cephfs-storagevolumes:- name: cephfs-storagepersistentVolumeClaim:claimName: cephfs-pvc

应用Pod:

kubectl apply -f pod.yaml
kubectl get pods

这个就是我们创建出来的Pod-demo

验证

在Ceph节点上验证:

cd /media  // 这个是你Cephfs挂载的目录,可以使用df -h 或者 mount查看
ls

会发现有我们K8s创建的东西

cd volumes/csi/ // 由于镜像名字是随机生成的,每台机器并不相同,所以我们这边输入 一直按下TAB键进行补全即可
echo "$(date) hello cephfs." > index.html
cat index.html

​​​​​​​从Kubernetes Master节点验证:

curl 10.244.247.6

同时也可以通过进入容器对远处的文件系统进行写入

kubectl exec -it csi-cephfs-demo-pod -- /bin/bash
echo "Hello, CephFS!" > /usr/share/nginx/html/index_test.html

此时在Ceph节点下查看会出现这个和我们之前创建的文件

验证完成!

错误解决方法:

1. kubuctl get po -o wide 的时候发现惊险全部没有被拉取下来,此时我们可以通过describle去分析一下缺少哪些镜像。

kubectl describe pod POD名字

以这个为例,你会发现他缺少了的是Nginx的镜像,这通常与K8S的仓库有关,虽然这个是Docker的,但是你们遇到的错误一般都是K8S的仓库镜像拉不下来。

渡渡鸟镜像同步站 (aityp.com)

这个可以从这个网站里面下载。以 k8s.gcr.io/sig-storage/csi-resizer:v1.2.0 为例:

其原理就是拉取镜像,然后修改镜像的TAG,使其能够检测到你拉取的镜像,最终完成。

2. failed to fetch monitor list using clusterID

去掉注释即可。删除PVC和PV,修改csi-config-map.yaml文件,然后重新apply -f 一下即可。

3. curl: (52) Empty reply from server

如果你是在有网的情况下首先去检查下你的DNS配置是否正确,可以用nmtui或者cat /etc/sysconfig/network-scripts/ifcfg-eth0去查看。

此时就是配置没问题,那么看看你是否是通过代理上网。

curl IP -v可以查看详细信息。

可以看到我这边是先连接到代理IP,然后去curl那个IP,我在代理上ping了一下这个IP发现ping不通,关闭代理即可。

unset http_proxy https_proxy no_proxy

就说到这里,希望可以帮到大家~

参考链接:

手把手系列 - Ceph使用rbd及cephfs与k8s集群集成 - 三种方式实现 - hukey - 博客园 (cnblogs.com)

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

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

相关文章

进行良好的文献综述能否提高学术研究的可信度

VersaBot一键生成文献综述 进行良好的文献综述 对于从多个方面提高学术研究的可信度至关重要&#xff1b; 1. 展示专业知识&#xff1a; 全面的回顾表明您对您所在领域的现有知识和相关理论有深入的了解。这将使您成为权威&#xff0c;并将您的研究置于更广泛的背景下。 2.…

ValueError: invalid literal for int() with base 10: ‘a‘

ValueError: invalid literal for int() with base 10: ‘a‘ 目录 ValueError: invalid literal for int() with base 10: ‘a‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff…

【CodinGame】趣味算法(教学用) CLASH OF CODE -20240730

文章目录 正文转换单位观察模式数字处理字符串处理 写在最后END 正文 转换单位 import sys import math# Auto-generated code below aims at helping you parse # the standard input according to the problem statement.n int(input()) for i in range(n):e int(input())…

win10 定时任务实战--开机启动 Java 应用

引言 在Windows 10系统中&#xff0c;可以通过结合任务计划程序&#xff08;Task Scheduler&#xff09;和批处理脚本&#xff08;.bat&#xff09;或PowerShell脚本来定期运行Java程序。以下是一个基本的步骤说明&#xff0c;展示如何设置这一过程。 第一步&#xff1a;准备…

爬虫“拥抱大模型”,有没有搞头?

验证码坐标识别 数据采集过程中&#xff0c;可能会碰到各种风控策略。其中&#xff0c;验证码人机验证是较为常见的&#xff0c;点选类验证码需要识别出相应的坐标&#xff0c;碰到这种情况&#xff0c;一般要么自己训练模型&#xff0c;要么对接打码平台。现在也可以将识别工…

多媒体技术:语音音频压缩

语音音频压缩 语音音频基础知识物理世界的声音——语音 语音音频编码方法波形编码波形编码原理常用波形编码技术脉冲编码调制PCM差分脉冲编码调制DPCM自适应差分脉冲编码调制ADPCM子带ADPCM 参数编码感知编码 语音音频编码框架语音编码框架音频编码框架混合编码框架 语音音频编…

JDK8的新特性

目录 接口的默认方法和静态方法 Lambda表达式1、匿名内部类2、函数式接口(FunctionalInterface)2.1 无参函数式接口匿名内部类方式-->Lambda表达式方式 2.2 有参函数式接口匿名内部类方式-->Lambda表达式方式 3、Lambda实战 3.1 循环遍历 3.2 集合排序 3.3 创建线程方…

黑马头条Day12-项目部署_持续集成

一、今日内容介绍 1. 什么是持续集成 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;&#xff0c;指的是频繁地&#xff08;一天多次&#xff09;将代码集成到主干。 持续集成的组成要素&#xff1a; 一个自动构建过程&#xff0c;从检出代码、…

Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入

本教程主要实现【Golang处理Word文档模板实现标签填充|表格插入|图标绘制和插入】。 本文源码&#xff1a;https://gitee.com/songfayuan/go-zero-demo 教程源码分支&#xff1a;master 分支&#xff08;_examples/word-template/fill-word-template.go&#xff09; Golang处理…

Java-Swing开发-001组件

文章目录 Top-level containerJFrame容器对话框相关 JComponent组件面板相关文本相关菜单相关工具栏按钮下拉框进度条树形组件 Top-level container 1.JFrame 2.JDialog JFrame容器 //设置APP图标 this.setIconImage(new ImageIcon(getClass().getResource("/button/i…

论文解读(10)-图神经网络

加油&#xff0c;继续看论文。 这次学图神经网络&#xff0c;这个概念经常在其他论文里出现&#xff0c;所以我想先学习一下这方面的知识。 参考&#xff1a; 【图神经网络综述】一文道尽GNN原理、框架和应用-CSDN博客 【图神经网络】10分钟掌握图神经网络及其经典模型_图神经…

某“新一线城市“前端面试,纯纯被恶心到了

一.起因 在boss上刷到的一个小小厂&#xff0c;收大四全年实习生(web前端)&#xff0c;因为离家乡比较近&#xff0c;而且双非一本的学历以及入坑的时间没有太长(前端部分不到一年)&#xff0c;想去那里看看形势&#xff0c;要求是笔试面试&#xff0c;当场给是否录用结果&…

AgentBench: Evaluating LLMs As Agents

AgentBench: Evaluating LLMs As Agents Github&#xff1a; https://github.com/THUDM/AgentBench 榜单&#xff1a;https://llmbench.ai/agent/data demos&#xff1a;https://llmbench.ai/agent/demo 备注&#xff1a;该论文介绍为AgentBench v0.2版本 一、介绍 现如今&am…

三行代码高搞定nestjs静态图片映射方案

方案一 nestjs/serve-static 库映射 上代码 npm i nestjs/serve-staticimport { ServeStaticModule } from nestjs/serve-static; import { join } from path; const staticPath join(__dirname, .., /public/);Module({imports: [ServeStaticModule.forRoot({rootPath: sta…

用Python代码调用GPT-SoVITS

GPT-SoVITS 项目地址&#xff1a;https://github.com/RVC-Boss/GPT-SoVITS import os import requests from PySide6.QtCore import QThread from PySide6.QtWidgets import QWidget, QApplication from design import Ui_Form import subprocess import sounddevice as sd im…

JAVA基础 - 泛型

目录 一. 简介 二. 集合泛型 三. 自定义泛型 四. 自定义泛型类和普通类的区别 一. 简介 泛型是 Java 语言中一种强大的特性&#xff0c;它允许在定义类、接口和方法时使用类型参数&#xff0c;从而增加了代码的类型安全性和复用性。 类型安全性&#xff1a; 使用泛型可以…

day07 项目启动以及git

spring框架 spring 负责整合各种框架&#xff0c;把new对象的部分交给spring去做&#xff0c;对象new不出来&#xff0c;项目就启动不起来&#xff0c;这样可以有效保证所需要的对象都在容器中存在&#xff0c;后续的部分都可以顺利执行控制反转&#xff1a;业务对象创建依赖资…

“八股文”在实际工作中是助力、阻力还是空谈?

一&#xff1a;浅谈 关于“八股文”在程序员面试中的重要性和实际工作中的作用&#xff0c;确实是一个引发广泛讨论的话题。以下是我对这个问题的看法&#xff1a; 1. “八股文”的定义与特征 “八股文”通常指的是面试中常见的标准化问答或经典理论知识&#xff0c;例如…

Apollo:源码分析之cyber/mainboard启动入口介绍-my write, test ok

软件结构图 cyber入口 cyber的入口在"cyber/mainboard"目录中: ├── mainboard.cc // 主函数 ├── module_argument.cc // 模块输入参数 ├── module_argument.h ├── module_controller.cc // 模块加载,卸载 └── module_controller.…

关于Docker Engine AuthZ 插件授权绕过漏洞 (CVE-2024-41110)

一、漏洞概述 漏洞名称&#xff1a;Docker Engine AuthZ 插件授权绕过漏洞 &#xff08;CVE-2024-41110&#xff09; 漏洞等级&#xff1a;高危 漏洞描述&#xff1a;DockerEngine是Docker的核心组件&#xff0c;是一 个开源的容器引擎&#xff0c;负责构建、运行和管理容器…