minio作为K8S后端存储
docker部署minio
mkdir -p /minio/datadocker run -d \-p 9000:9000 \-p 9001:9001 \--name minio \-v /minio/data:/data \-e "MINIO_ROOT_USER=jbk" \-e "MINIO_ROOT_PASSWORD=jbjbjb123" \quay.io/minio/minio server /data --console-address ":9001"
直接安装csi-s3
https://artifacthub.io/packages/helm/k8s-csi-s3/csi-s3
helm repo add kubeblocks https://apecloud.github.io/helm-charts
helm pull kubeblocks/csi-s3
kubectl create ns csi-s3helm install -n csi-s3 csi-s3 csi-s3-0.31.4.tgz \--set secret.accessKey="tw8iFXwkBlrUmNKLp6ei" \--set secret.secretKey="GBQW7xObmwcTDo4Yz5b2OH4u73i6sEPGBhnvxvSl" \--set secret.endpoint="http://172.16.8.104:9000" #你的minio地址
安装完成如下

简单测试
cat <<EOF > demon.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: s3-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 5GistorageClassName: csi-s3
---
apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginxvolumeMounts:- mountPath: /xx/xxxname: s3-storagevolumes:- name: s3-storagepersistentVolumeClaim:claimName: s3-pvc
EOF
部署pods基本都没有什么问题,比如kafka集群,redis集群都OK ,不再过多演示


将 S3 作为 Kubernetes 的后端存储,主要依赖于 CSI(Container Storage Interface)驱动的实现。csi-s3 驱动负责将 S3 对象存储与 Kubernetes 的存储管理系统集成。以下是其实现原理的简要概述:
实现原理
-
CSI 驱动架构:
-
CSI 是 Kubernetes 的标准接口,允许不同的存储系统(如 S3)与 Kubernetes 集成。csi-s3 驱动实现了 CSI 的 API,使得 Kubernetes 能够通过标准化的方式与 S3 进行交互。
StorageClass 和 PVC: -
用户首先创建一个 StorageClass,指定使用 csi-s3 驱动。然后,用户创建一个 PersistentVolumeClaim(PVC),请求特定的存储容量。Kubernetes 会根据 PVC 的请求,调用 CSI 驱动来动态创建或绑定相应的存储资源。
卷的创建与管理: -
当 PVC 被创建时,csi-s3 驱动会处理卷的创建请求。它会与 S3 API 交互,创建一个新的 S3 存储桶或在现有存储桶中创建一个对象。例如,驱动可能会创建一个特定的文件夹或对象,代表 PVC 的存储。
数据读写操作: -
当 Pod 需要访问存储时,csi-s3 驱动会将读写请求转换为 S3 API 调用。例如,写入数据时,驱动会将数据上传到 S3 存储桶;读取数据时,驱动会从 S3 存储桶下载数据。
数据一致性和性能: -
S3 是基于对象的存储,通常采用最终一致性模型。csi-s3 驱动需要处理数据一致性的问题,确保应用能够正确处理数据的读取和写入。
对于性能,S3 的延迟相对较高,因此不适合所有类型的工作负载,尤其是需要低延迟和高 IO 性能的数据库应用。
卷的删除与回收: -
当 PVC 被删除时,csi-s3 驱动会处理卷的删除请求,可能会删除相应的 S3 对象或存储桶,具体取决于 PersistentVolumeReclaimPolicy 的配置(如 Retain、Delete 等)。
关键组件 -
CSI 适配器:
-
csi-s3 驱动实现了 CSI 适配器,处理 Kubernetes 发送的存储请求。
-
S3 API:
-
驱动使用 AWS S3 API 或兼容 S3 的 API 与对象存储进行交互。
-
Kubernetes API:
-
驱动与 Kubernetes API 交互,处理 PVC、PV 和 StorageClass 的生命周期管理。
网络交互
数据写入:
-
当一个 Pod 需要将数据写入 S3 时,csi-s3 驱动会通过网络向 S3 API 发起 HTTP(S) 请求,将数据上传到指定的 S3 存储桶。这意味着数据需要经过网络传输,从 Pod 的容器到 S3 存储服务。
数据读取: -
类似地,当 Pod 需要读取数据时,csi-s3 驱动会通过网络向 S3 API 发起请求,下载所需的数据。这同样需要网络连接。
网络延迟与性能
延迟:由于数据需要通过网络传输,读写操作的延迟通常会比直接使用本地或块存储要高。这对于需要快速响应的应用(如数据库)可能会影响性能。 -
带宽:网络带宽也会影响数据传输的速度,尤其是在处理大量数据时。
考虑因素
-
网络可靠性:确保网络连接的可靠性,以避免在读写操作时出现中断或失败。
-
安全性:使用 HTTPS 加密数据传输,以保护敏感数据在传输过程中的安全。
-
数据一致性:由于 S3 是基于对象的存储,其一致性模型为最终一致性,需考虑应用如何处理这种一致性。
-
总结来说,使用 S3 作为 Kubernetes 的后端存储时,所有的数据读写操作都依赖于网络,这对性能和应用设计都有一定影响。
- 注意事项
-
权限管理:
-
确保 Kubernetes 集群有足够的权限访问 S3 存储。这通常通过 IAM 角色或 S3 存储桶策略来实现。
-
性能考虑:
-
对象存储的性能与块存储不同,适合存储大量非结构化数据,但可能不适合需要高性能的应用。
-
数据安全性:
-
考虑数据在传输和存储过程中的安全性,可能需要启用加密和访问控制。
-
通过以上机制,csi-s3 驱动能够将 S3 对象存储无缝集成到 Kubernetes 中,为应用提供灵活的持久化存储解决方案。
-
关键点
-
没有真正的挂载:与传统的块存储不同,S3 是对象存储,实际上并没有将 S3 存储“挂载”到 Pods 上。相反,Pods 通过 csi-s3 驱动与 S3 API 进行交互。
-
通过 CSI 驱动进行读写:所有的读写操作都通过 csi-s3 驱动进行,这个驱动负责将 Pod 中的操作转换为对 S3 存储桶的 API 调用。
-
文件系统接口:尽管 Pods 可以使用类似于文件系统的接口(如 /mnt/s3),但底层的实现是通过网络请求与 S3 进行交互,而不是直接访问存储块。
-
性能考虑:由于 S3 是对象存储,性能和延迟可能会影响应用的表现,特别是对于高 IO 的工作负载
-
数据一致性:S3 的最终一致性模型可能会影响应用的行为,特别是在并发读写的情况下
-
因此,虽然在 Kubernetes 中看起来像是将 S3 存储挂载到 Pods,但实际上是通过 CSI 驱动与 S3 API 进行交互的过程。这种方式使得 S3 的对象存储特性能够在 Kubernetes 环境中使用。
-
个人觉得如果再测试环境中还是比nfs之类的网络文件存储好使,是真正live环境还是推荐使用ceph这种块存储性能更好的存储
相关文章:
minio作为K8S后端存储
docker部署minio mkdir -p /minio/datadocker run -d \-p 9000:9000 \-p 9001:9001 \--name minio \-v /minio/data:/data \-e "MINIO_ROOT_USERjbk" \-e "MINIO_ROOT_PASSWORDjbjbjb123" \quay.io/minio/minio server /data --console-address ":90…...
一周学会Flask3 Python Web开发-Jinja2模板访问对象
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 如果渲染模板传的是对象,如果如何来访问呢? 我们看下下面示例: 定义一个Student类 cla…...
RAGS评测后的数据 如何利用influxdb和grafan 进行数据汇总查看
RAGS(通常指相关性、准确性、语法、流畅性)评测后的数据能借助 InfluxDB 存储,再利用 Grafana 进行可视化展示,实现从四个维度查看数据,并详细呈现每个问题对应的这四个指标情况。以下是详细步骤: 1. 环境准备 InfluxDB 安装与配置 依据自身操作系统,从 InfluxDB 官网下…...
第25周JavaSpringboot实战-电商项目 4.商品分类管理
商品分类模块开发笔记 模块功能概述 实现分类数据的 增删改查 功能核心难点: 分类的父子级目录结构递归实现多级分类查找列表展示顺序控制(从父级向子级递归) 接口说明 后台接口 1. 添加分类 请求地址: /admin/category/add 请求方法: …...
C语言--正序、逆序输出为奇数的位。
题目: 采用正序和逆序分别输出为奇数的位。例如输入12345,正序输出135,逆序输出531 代码: #include <stdio.h>void printOddDigits(int num) {int res 0;int divider 10;while (num / divider > 10) {divider * 10;…...
C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载
下载地址<------完整源码 在数字化转型加速的背景下,企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台,其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下,C#开发者需要耗费大…...
H13-821 V3.0 HCIP 华为云服务架构题库
华为云上哪个服务能够用于收集来自主机和云服务的日志数据,并通过海量日志数据的分析与处理帮助开发或运维人员进行问题定位和分析? A:云监控服务 B:云日志服务 C:云审计服务 D:对象存储服务 答案ÿ…...
Linux主机用户登陆安全配置
Linux主机用户登陆安全配置 在Linux主机上进行用户登录安全配置是一个重要的安全措施,可以防止未经授权的访问。以下是如何创建用户hbu、赋予其sudo权限,以及禁止root用户SSH登录,以及通过ssh key管理主机用户登陆。 创建用户hbu 使用具有…...
提升数据洞察力:五款报表软件助力企业智能决策
概述 随着数据量的激增和企业对决策支持需求的提升,报表软件已经成为现代企业管理中不可或缺的工具。这些软件能够帮助企业高效处理数据、生成报告,并将数据可视化,从而推动更智能的决策过程。 1. 山海鲸报表 概述: 山海鲸报表…...
Linux | man 手册使用详解
注:本文为 “Linux man 手册” 相关文章合辑。 略作重排。 man 手册常用命令 1. 查看和搜索手册页 查看特定软件包的手册页,并使用 grep 命令过滤出包含特定关键字的行: man <package> | grep <keyword>在整个系统的手册页中…...
安全见闻4
今天学了Windows操作系统和驱动程序的相关知识 Windows注册表 注册表是windows系统中具有层次结构的核心数据库 储存的数据对windows 和Windows上运行的应用程序和服务至关重要。注册表时帮助windows控制硬件、软件、用户环境和windows界面的一套数据文件。 打开注册表编辑器…...
项目实战--网页五子棋(匹配模块)(4)
上期我们完成了游戏大厅的前端部分内容,今天我们实现后端部分内容 1. 维护在线用户 在用户登录成功后,我们可以维护好用户的websocket会话,把用户表示为在线状态,方便获取到用户的websocket会话 package org.ting.j20250110_g…...
P8716 [蓝桥杯 2020 省 AB2] 回文日期
1 题目说明 2 题目分析 暴力不会超时,O(n)的时间复杂度, < 1 0 8 <10^8 <108。分析见代码: #include<iostream> #include<string> using namespace std;int m[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};// 判断日期…...
如何在视频中提取关键帧?
在视频处理中,提取关键帧是一项常见的任务。下面将介绍如何基于FFmpeg和Python,结合OpenCV库来实现从视频中提取关键帧的功能。 实现思路 使用FFmpeg获取视频的关键帧时间戳:FFmpeg是一个强大的视频处理工具,可以通过命令行获取…...
為什麼使用不限量動態住宅IP採集數據?
在瞭解“不限量動態住宅IP數據採集”之前,我們需要先搞清楚什麼是“動態住宅IP”。簡單來說,動態IP是一種會定期變化的IP地址,通常由互聯網服務提供商(ISP)分配給家庭用戶。與固定IP(靜態IP)不同…...
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
在Go中使用Viper将YAML配置绑定到结构体时,主要依赖 mapstructure 标签(而非 json 或 yaml 标签)实现字段名映射。 --- ### 1. **基础绑定方法** 使用 viper.Unmarshal(&config) 或 viper.UnmarshalKey("key", &subConfi…...
OpenIPC开源FPV之Adaptive-Link安装
OpenIPC开源FPV之Adaptive-Link安装 1. 源由2. 介绍2.1 天空端安装2.2 地面端安装 3. 问题汇总3.1 安装脚本问题3.2 网络安装问题3.3 非SSC30KQ/SSC338Q硬件3.4 代码疑问 4. 总结5. 后续 1. 源由 鉴于飞行过程,发现一些马赛克现象,且60FPS桌面30FPS的录…...
[杂学笔记]OSI七层模型作用、HTTP协议中的各种方法、HTTP的头部字段、TLS握手、指针与引用的使用场景、零拷贝技术
1.OSI七层模型作用 物理层:负责光电信号的传输,以及将光电信号转化为二进制数据数据链路层:主要负责将收到的二进制数据进一步的封装为数据帧报文。同时因为数据在网络中传递的时候,每一个主机都能够收到报文数据,该层…...
RK3568开发笔记-AD7616调试笔记
目录 前言 一、AD7616介绍 高分辨率 高速采样速率 宽模拟输入范围 集成丰富功能 二、原理图连接 三、设备树配置 四、内核驱动配置 五、AD芯片测试 总结 前言 在嵌入式数据采集领域,将模拟信号精准转换为数字信号至关重要。AD7616 作为一款性能卓越的 16 位模数转换器…...
Unity摄像机与灯光相关知识
一、Inspector窗口 Inspector窗口可以查看和编辑对象的属性以及设置 其中包含各种组件,例如用Cube对象来举例 1.Sphere(Mesh)组件: 用来决定对象的网格属性,例如球体网格为Sphere、立方体网格为Cube 2.Mesh Renderer组件: 用来设置…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
高保真组件库:开关
一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...
Axure Rp 11 安装、汉化、授权
Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接:https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…...
