minio集群部署(k8s内)

一、前言

minio的部署有几种方式,分别是单节点单磁盘,单节点多磁盘,多节点多磁盘三种方式,本次部署使用多节点多磁盘的方式进行部署,minio集群多节点部署最低要求需要4个节点,集群扩容时也是要求扩容的节点为4的倍数才能更好的发挥minio的性能,使用minio集群可以更好的实现高可用,在minio集群还有n/2节点存活时minio集群依然可读但不可写,在minio集群还有n/2+1节点存活时minio集群依然可读可写

二、部署

创建minio 服务yaml文件的存储目录

mkdir /opt/minio  && cd /opt/minio

这里使用nfs作为minio的存储,其实最好还是单独挂载磁盘作为minio的存储更好,用nfs作为minio的存储,相当于存储还是有单点的问题,单独挂载磁盘可以在k8s的每个工作节点分配磁盘的存储路径再使用pv作为存储块,这样就能避免存储的单点问题,这里就是用nfs网络存储作为pv存储块的存储

vi pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv0
spec:storageClassName: minio-pv    #指定动态存储卷的类型或类别,当pvc使用该类别时,可以自动绑定属于该类别的pvcapacity:storage: 100Gi     #存储大小accessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retain   #配置回收模式,配置为删除pv不自动删除存储路径中的数据nfs:      #使用nfs存储path: /volume2/k8s-data/minio/minio-pv0    #nfs存储路径,这里使用4个不同的nfs路径,模拟4个单独的存储磁盘server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv1
spec:storageClassName: minio-pv   capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv1server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv2
spec:storageClassName: minio-pv    capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv2server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv3
spec:storageClassName: minio-pv  capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv3server: 10.1.13.99

使用setafulset的方式部署minio集群,因为每个minio是有状态的应用,每个节点都存着数据,这里再说一下使用的是pvc模板的方式去绑定创建好的pv,也可以使用动态pv,使用pvc模板,然后去动态的自动创建pv绑定

vi setafulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: minionamespace: minio
spec:podManagementPolicy: "Parallel"  #并行启动pod,不配置的话模式是按顺序启动pod,minio、nacos都需要配置并行启动serviceName: minio  #指定Headless Service的名称,这个服务的作用是为每个Pod创建一个独立的DNS记录,使其能够通过该DNS记录进行唯一标识和访问replicas: 4selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:affinity:       #亲和性配置可忽略,我这里是为了分配到固定的节点上nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: appoperator: Invalues:- miniocontainers:- name: minioimage: minio/minioimagePullPolicy: IfNotPresentenv:        #配置变量,配置minio集群的账户密码,密码不能少于8位数- name: MINIO_ROOT_USERvalue: admin- name: MINIO_ROOT_PASSWORDvalue: 12345678args:    #定义minio集群配置,定义每个节点- server- "http://minio-{0...3}.minio.minio.svc.cluster.local/data"#  - "http://minio-{4...7}.minio.minio.svc.cluster.local/data"- --console-address- ":5000"ports:- name: tcp-9000containerPort: 9000protocol: TCP- name: http-5000containerPort: 5000protocol: TCPvolumeMounts:   #配置数据目录- name: datamountPath: /datatolerations:       #配置污点,我这里是为了能在master节点上分配pod- key: node-role.kubernetes.io/control-planeoperator: Existseffect: NoSchedulevolumeClaimTemplates:   #使用定义pvc模板,去自动创建pvc- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "minio-pv"   #配置存储类型的名称,这里配置和上面pv配置的名称一致,就会自动绑定关于此存储类型名称的pvresources:requests:storage: 100Gi

配置service,使得外部能访问minio集群

vi service.yaml

kind: Service
apiVersion: v1
metadata:name: minionamespace: miniolabels:app: minio
spec:type: NodePortports:- name: http-9000protocol: TCPport: 9000nodePort: 30004targetPort: 9000- name: http-5000protocol: TCPport: 5000nodePort: 30002targetPort: 5000selector:app: minio

创建命名空间

kubectl create namespace minio

创建各yaml服务

kubectl apply -f pv.yaml

kubectl apply -f setafulset.yaml

kubectl apply -f service.yaml

查看各服务是否正常

kubectl get all -n minio

kubectl get pv 

 

kubectl get pvc -n minio

 查看minio web

http://10.1.60.119:30002

输入配置setafulset时定义的用户名和密码

 

可以看到minio集群显示4个节点均正常

 

 创建bucket上传文件后进行节点损坏实验

 

这里就不展示实验的过程了, 直接讲述实验的结果,本minio集群一共四个节点,当存活节点只剩下n/2时即2个节点,minio的bucket只能读取文件,不能上传文件,当存活节点剩下n/2+1时,minio的bucket可以进行正常的读取文件、上传文件,可以自行做实验尝试

注意:minio集群部署后如果删除了pvc和pv重新创建,会导致pod重新随机绑定一个pvc和pv,pod随机绑定pvc后minio集群会出现问题,会报错挂载磁盘信息不正确,如果要解决的话,需要删除该pv挂载路径下原来的数据,所以一般不要动pvc和pv,因为setafulset的特性只删除pod,pod会自动绑定原来的pvc,即使把整个setafulset删除重新创建也是会绑定原来的pvc,就不会导致集群出现问题

minio集群节点对等扩容

minio集群的扩容需要提前创建好需要扩容的pv个数,再更改setafulset配置,关于minio的扩容需要是4的倍数,这样才能更好的发挥minio集群的特性以便最好地利用 Erasure Code,并提供最佳的冗余和容错性,这是因为 Erasure Code 将数据分为数据块和冗余块,并将它们分布在不同的节点上,确保了数据的可靠性和冗余,另外使用对等扩容后,minio的集群原来的节点和新加入的加点会分成两部分,两部分不互相同步数据,当数据上传到bucket时,minio会根据算法去判断该数据存在哪一部分节点上

vi pv.yaml

apiVersion: v1          #在之前的pv配置后面加上以下pv配置
kind: PersistentVolume
metadata:name: minio-pv4
spec:storageClassName: minio-pv    #定义了存储类型capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv4server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv5
spec:storageClassName: minio-pv    #定义了存储类型capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv5server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv6
spec:storageClassName: minio-pv    #定义了存储类型capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv6server: 10.1.13.99
---
apiVersion: v1
kind: PersistentVolume
metadata:name: minio-pv7
spec:storageClassName: minio-pv    #定义了存储类型capacity:storage: 100GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: Retainnfs:path: /volume2/k8s-data/minio/minio-pv7server: 10.1.13.99

vi setafulset

apiVersion: apps/v1
kind: StatefulSet
metadata:name: minionamespace: minio
spec:podManagementPolicy: "Parallel"  #平行启动pod,不配置的话模式是按顺序启动podserviceName: minioreplicas: 8          #更改pod数量selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: appoperator: Invalues:- miniocontainers:- name: minioimage: minio/minioimagePullPolicy: IfNotPresentenv:- name: MINIO_ROOT_USERvalue: admin- name: MINIO_ROOT_PASSWORDvalue: Zyh@022759args:- server- "http://minio-{0...3}.minio.minio.svc.cluster.local/data"- "http://minio-{4...7}.minio.minio.svc.cluster.local/data"  #增加minio集群配置- --console-address- ":5000"ports:- name: tcp-9000containerPort: 9000protocol: TCP- name: http-5000containerPort: 5000protocol: TCPvolumeMounts:- name: datamountPath: /datatolerations:- key: node-role.kubernetes.io/control-planeoperator: Existseffect: NoSchedulevolumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "minio-pv"resources:requests:storage: 100Gi

执行yaml文件加载配置

kubectl apply -f pv.yaml

kubectl apply -f setafulset.yaml

执行完成后minio集群就会扩容成8节点集群,关于数据会随机分配到两部分节点上存储,可以自行做实验验证

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

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

相关文章

2、数仓理论概述与相关概念

1、问:数据仓库 建设过程中 经常会遇到那些问题? 模型(逻辑)重复建设 数据不一致性 维度不一致:命名、维度属性值、维度定义 指标不一致:命名、计算口径 数据不规范(字段命名、表名、分层、主题命名规范) 2、OneData数据建设核心方…

python爬虫HMAC加密案例:某企业信息查询网站

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、找出需要加密的参数 js运行 atob(‘aHR0cHM6Ly93d3cucWNjLmNvbS93ZWIvc2VhcmNoP2tleT0lRTQlQjglODclRTglQkUlQkUlRTklOUI…

飞桨——总结PPOCRLabel中遇到的坑

操作系统:win10 python环境:python3.9 paddleocr项目版本:2.7 1.报错:ModuleNotFoundError: No module named Polygon(已解决) 已解决所以没有复现报错内容 尝试方法一:直接使用pip命令安装&…

ts实现合并数组对象中key相同的数据

背景 在平常的业务中,后端同学会返回以下类似的结构数据 // 后端返回的数据结构 [{ id: 1, product_id: 1, pid_name: "Asia", name: "HKG01" },{ id: 2, product_id: 1, pid_name: "Asia", name: "SH01" },{ id: 3, pro…

实现极坐标图表QPolarChart的角度轴范围是[0,360]时,0度在水平右侧

目录 参考角度轴范围是[0,360]时,0度在水平右侧.h.cpp 参考 Qt数据可视化(QPolarChart雷达图) 默认QPolarChart的范围是[0,360]时,0度在垂直上方 如官方例子QValueAxis角度轴范围是[-100,100] 角度轴范围是[0,360]时,0度在水平右侧 原理&am…

简单几步,借助Aapose.Cells将 Excel XLS 转换为PPT

数据呈现是商业和学术工作的一个重要方面。通常,您需要将数据从一种格式转换为另一种格式,以创建信息丰富且具有视觉吸引力的演示文稿。当您需要在幻灯片上呈现工作表数据时,需要从 Excel XLS 转换为 PowerPoint 演示文稿。在这篇博文中&…

原理Redis-QuickList

QuickList **问题1:**ZipList虽然节省内存,但申请内存必须是连续空间,如果内存占用较多,申请内存效率很低。怎么办? 为了缓解这个问题,我们必须限制ZipList的长度和entry大小。 **问题2:**但是…

[网鼎杯 2018]Fakebook

[网鼎杯 2018]Fakebook 打开环境出现一个登录注册的页面 在登录和注册中发现 了地址栏出现变化&#xff0c;扫一波看看 看看robots.txt和flag.php 访问robots.txt看看 再访问user.php.bak <?php class UserInfo { public $name ""; public …

Head、Neck、Backbone介绍

在深度学习中&#xff0c;通常将模型分为三个部分&#xff1a;backbone、neck 和 head。 Backbone&#xff1a;backbone 是模型的主要组成部分&#xff0c;通常是一个卷积神经网络&#xff08;CNN&#xff09;或残差神经网络&#xff08;ResNet&#xff09;等。backbone 负责…

ON1 Photo RAW 2024 for Mac——专业照片编辑的终极利器

ON1 Photo RAW 2024 for Mac是一款专为Mac用户打造的照片编辑器&#xff0c;以其强大的功能和易用的操作&#xff0c;让你的照片编辑工作变得轻松愉快。 一、强大的RAW处理能力 ON1 Photo RAW 2024支持大量的RAW格式照片&#xff0c;能够让你在编辑过程中获得更多的自由度和更…

练习九-利用状态机实现比较复杂的接口设计

练习九-利用状态机实现比较复杂的接口设计 1&#xff0c;任务目的&#xff1a;2&#xff0c;RTL代码3&#xff0c;RTL原理框图4&#xff0c;测试代码5&#xff0c;波形输出 1&#xff0c;任务目的&#xff1a; &#xff08;1&#xff09;学习运用状态机控制的逻辑开关&#xff…

2023.11.22 -数据仓库的概念和发展

目录 https://blog.csdn.net/m0_49956154/article/details/134320307?spm1001.2014.3001.5501 1经典传统数仓架构 2离线大数据数仓架构 3数据仓库三层 数据运营层,源数据层&#xff08;ODS&#xff09;&#xff08;Operational Data Store&#xff09; 数据仓库层&#…

开发上门送桶装水小程序要考虑哪些业务场景

上门送水业务已经有很长一段时间了&#xff0c;但是最开始都是给用户发名片、贴小广告&#xff0c;然后客户电话订水&#xff0c;水站工作人员再上门去送&#xff0c;这种人工记单和派单效率并不高&#xff0c;并且电话沟通中也比较容易出现偏差&#xff0c;那么根据这个情况就…

IT 领域中的主要自动化趋势

48%的IT自动化流程属于IT服务管理&#xff0c;过去一年中&#xff0c;IT运维自动化增长了272%。 IT部门从交付者转变为战略伙伴 今年的《工作自动化指数》数据显示&#xff0c;自动化正在蔓延到组织的各个部门&#xff0c;越来越多的部门采用自动化&#xff0c;并且IT以外的员工…

一条命令彻底卸载Linux自带多个版本jdk

一条命令彻底卸载Linux自带多个版本jdk 检查系统已经安装的jdk rpm -qa | grep java卸载所有已经安装的 jdk xargs 将参数逐个传递 将已安装的 java 程序逐个当做参数传递给 rpm -e --nodeps rpm -qa | grep java | xargs rpm -e --nodeps再次检查系统已经安装的jdk rpm -qa | …

Azure Machine Learning - 搜索中的语义排名

目录 什么是语义排名&#xff1f;语义排名的工作原理如何收集和总结输入语义排名的输出如何对摘要进行评分 语义功能和限制 在 Azure AI 搜索中&#xff0c;“语义排名”通过使用语言理解对搜索结果重新排名来显著提高搜索相关性&#xff0c; 本文概括性地介绍了语义排名工作原…

Arthas 监听 Docker 部署的java项目CPU占比高的信息

1、Linux上安装Arthas wget https://alibaba.github.io/arthas/arthas-boot.jar2、docker ps 查看目标项目的容器ID 3、copy Arthas 到目标容器中 (注意有 &#x1f615; ) docker cp arthas-boot.jar d97e8666666:/4、进入到目标容器目录中 docker exec -it d97e8666666 /b…

5-7求三种数的和

#include<stdio.h> int main(){double sum10;double sum20;double sum30;double sum;int i;for(i1;i<100;i){sum1sum1i;}printf("sum1结果是&#xff1a;%15.6f\n",sum1);for(i1;i<50;i){sum2sum2i*i;}printf("sum2结果是&#xff1a;%15.6f\n"…

Oracle:poor sql导致的latch: cache buffers chains案例

巡检时&#xff0c;执行如下sql发现长会话&#xff1a; SELECT SE.SID,SE.SERIAL#,TO_CHAR(LOGON_TIME,YYYY-MM-DD HH24:MI:SS),SE.STATUS,SE.OSUSER,SE.MACHINE,SE.PROGRAM,SE.BLOCKING_SESSION, SE.SQL_ID,SE.PREV_SQL_ID ,SE.EVENT,SE.P1TEXT,SE.P1,SE.P2TEXT,SE.P2,SE.P3…

visionOS空间计算实战开发教程Day 4 初识ImmersiveSpace

细心的读者会发现在在​​Day1​​​和​​Day2​​​的示例中我们使用的都是​​WindowGroup​​。 main struct visionOSDemoApp: App {var body: some Scene {WindowGroup {ContentView()}} } 本节我们来认识在visionOS开发中会经常用到的另一个概念​​ImmersiveSpace​​…