MinIO分布式存储k8s集群部署

news2024/11/18 9:46:10

一、MinIO是什么

MinIO是go开发的,高性能分布式存储;基于GNU AGPL v3开源,可免费使用;
官网:https://min.io/
github: https://github.com/minio/minio
在这里插入图片描述
官网宣传MinIO是世界上速度最快的分布式对象存储;

二、安装

2.1 单机单磁盘

安装非常简单,可参考官网:https://min.io/docs/minio/container/index.html

docker run -p 9000:9000 -p 9090:9090 \
-v F:/minIO:/data \
-e "MINIO_ROOT_USER=ROOTUSER" \
-e "MINIO_ROOT_PASSWORD=CHANGEME123" \
 minio/minio server /data --console-address ":9090"

./minio server /data --console-address :9090
/data为挂载目录
--console-address :9090 设置控制面板端口,不设置会变为随机端口;

启动后,访问看板:http://127.0.0.1:9090/,输入设置的用户名密码,这样一个单节点MinIO就搭建好了;
在这里插入图片描述

单节点模式仅用于测试,因有单节点故障

2.2 集群搭建

MinIO是云原生应用,最适合在k8s内部搭建集群,Linux下集群搭建可参考官网,这里简单记录下,因MinIO迭代较快,具体还需要参考官网:https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html

export MINIO_ROOT_USER=ROOTUSER
export MINIO_ROOT_PASSWORD=CHANGEME123
nohup /opt/server/minio/minio server --console-address ":9090" \
http://172.16.10.226:9000/minio-data \
http://172.16.10.227:9000/minio-data \
http://172.16.10.228:9000/minio-data \
http://172.16.10.229:9000/minio-data \
> /data/logs/minio/minio.out 2>&1 &

因为分布式存储需要冗余存储,MinIO需要一半节点存切片后的数据,一半节点存储奇偶校验块,因此集群至少需要4个节点

集群搭建完毕后,每个节点都可以进行操作,需要在前端搭建nginx进行负载均衡;

2.2.2 k8s内部部署

官网上也提供了一个单例配置方法,但该方法仅能用于测试不能用于生产;

  • 单节点模式yml:
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: minio
  name: minio
  namespace: minio-dev # Change this value to match the namespace metadata.name
spec:
  replicas: 1
  selector:
    matchLabels:
      app: minio
  template:
    metadata:
      labels:
        app: minio
    spec:
     containers:
     - name: minio
       image: quay.io/minio/minio:latest
       command:
       - /bin/bash
       - -c
       args:
       - minio server /data --console-address :9090
       volumeMounts:
       - mountPath: /data
         name: localvolume # Corresponds to the `spec.volumes` Persistent Volume
     nodeSelector:
       minio: "true" # Specify a node label associated to the Worker Node on which you want to deploy the pod.
     hostNetwork: true
     volumes:
     - name: localvolume
       hostPath: # MinIO generally recommends using locally-attached volumes
         path: /mnt/disk1/data # Specify a path to a local drive or volume on the Kubernetes worker node
         type: DirectoryOrCreate # The path to the last directory must exist

注意修改nodeSelector,访问方式这里使用hostNetwork,可根据情况自行调整,这里仅做测试;
该yml会把选择node的本地磁盘路径/mnt/disk1/data映射入minIO;

创建pod成功后,访问节点IP:9090即可打开控制台,进行上传下载等操作;IP:9000为API接口;

  • 多节点配置模式
    MinIO官方为了方便用户部署,专门写了一个 MinIO Operator, 用来部署集群,架构如下:
    在这里插入图片描述
    MinIO Operator分为两部分:Console Pod 和 Operator Pod, 一个是负责显示控制台,一个负责执行部署;
    为了安装MinIO Operator,官方专门写了一个插件kubectl-minio,官方真的我哭死;为了安装这个插件需要安装k8s插件管理器krew;……,因众所周知的原因,凡是这种包管理器都需要源,一般网都不通;只能直接下载安装;
    整个安装步骤:
    1. 安装kubectl-minio
    2. 通过kubectl-minio安装MinIO Operator
    3. 通过MinIO Operator安装MinIO集群;
1. 安装kubectl-minio
curl https://github.com/minio/operator/releases/download/v5.0.7/kubectl-minio_5.0.7_linux_amd64 -o kubectl-minio
chmod +x kubectl-minio
mv kubectl-minio /usr/local/bin/

这里使用的5.07,请根据自己k8s版本自行下载安装,https://github.com/minio/operator/releases
4.0.0+对应k8s版本>=1.19.0;
5.0.0+对应k8s>=1.21.0;
5.0.6+对应k8s>=1.25.0

安装完成后,查看版本

kubectl minio version #查看版本
2. 安装MinIO Operator

运行以下命令进行安装,该命令会自动创建名为minio-operator的namespace;并在该命名空间创建Console PodOperator Pod

kubectl minio init

等待pod创建成功
在这里插入图片描述
修改service/console为NodePort或者配置ingress路由,让console可以集群外访问;当然也可以按照官方文档上的,进行端口代理;

kubectl minio proxy

运行后,即可通过当前节点ip:9090进行访问,jwt token控制台也打出来了,

这种方式我并没有登录成功,可能这种代理只能通过localhost:9090访问,没有深入研究,我是通过ingress暴露地址,拿token进行访问的;

在这里插入图片描述
另外一个获取token的命令:

kubectl get secret/console-sa-secret -n minio-operator -o json | jq -r '.data.token' | base64 -d

在这里插入图片描述
登录后,我这里已经创建好了一个集群或者说租户suozq;
在这里插入图片描述

3. 创建MinIO集群

创建集群就非常简单了,在控制台配置创建即可
在这里插入图片描述
以上就是所有的必填项,其他配置,可以大概看下,不想看的点击创建也可;
下方可以通过Images配置MinIO的镜像版本

填写完成点击create;
等待创建完成
在这里插入图片描述
创建的服务中,minio对外提供API服务,suozq-console提供控制台服务;
查看nodeport端口
在这里插入图片描述
打开控制台:https://192.168.10.100:30822/
在这里插入图片描述
Operator控制台中修改密码, 注意:密码需要至少8位数,如果不是会导致pod重启失败
在这里插入图片描述

等待pod重启完毕后,使用账号密码登录即可;
在这里插入图片描述

bucket 可以理解为文件夹

API访问,集群外部通过nodeport或者ingress,集群内部同一命名空间通过minio进行访问,集群内部不同命名空间通过:https://minio.minio-dev.svc.cluster.local访问
即:{SERVICE_NAME}.{NAMESPACE_NAME}.svc.cluster.local 跨命名空间访问服务方式;

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

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

相关文章

Typora导出的PDF目录标题自动加编号

Typora导出的PDF目录标题自动加编号 在Typora主题文件夹增加如下文件后,标题便自动加上了编号: https://gitcode.net/as604049322/blog_data/-/blob/master/base.user.css 例如: 但是导出的PDF中,目录却没有编号: 这…

ConsoleApplication17_2项目免杀(Fiber+VEH Hook Load)

加载方式FiberVEH Hook Load Fiber是纤程免杀,VEH是异常报错,hook使用detours来hook VirtualAlloc和sleep,通过异常报错调用实现主动hook 纤程Fiber的概念:纤程是比线程的更小的一个运行单位。可以把一个线程拆分成多个纤程&#…

高可用集群介绍

一、高可用集群概念 高可用集群( High Availability Cluster, HA 集群),其中高可用的含义是最大限度地可以使用。从集群 的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。当应用程序出现故障或…

XSSchallenge1-20

test1 第一题直接在test插入XSS代码即可 test2 第二关对内容进行”“包裹 这里可以采用”>来绕过 test3 代码审计发现这里用了htmlspecialchars函数&#xff0c;这个函数对<>和’ “等进行了转义&#xff0c;这里可以用事件来绕过 test4 这里用了str_replace&a…

vue+elementUI el-table实现单选

if (selection.length > 1) {this.$refs.table.clearSelection();this.$refs.table.toggleRowSelection(selection.pop());}

Kubernetes技术--k8s核心技术持久化存储

有时候需要在集群中进行一些重要的数据进行持久化存储,然后需要的时候再进行挂载,那么下面我们一起来看看如何实现数据的持久化存储操作。 1.nfs网络存储 -1.找一台服务器做nfs的服务端,安装nfs。(这里我们直接在master上实现)。 这里应该找再单独的搭建一个node节点做持…

Linux多线程同步机制(下)

文章目录 前言一、读写锁二、条件变量总结 前言 一、读写锁 多线程同步机制中的读写锁&#xff08;Read-Write Lock&#xff09;是一种特殊的锁机制&#xff0c;用于控制对共享资源的读写访问。读写锁允许多个线程同时读取共享资源&#xff0c;但在写操作时需要独占访问。 读…

2023年IT服务行业研究报告

第一章 行业概况 1.1 定义 IT服务行业是一个广泛的术语&#xff0c;涵盖了所有提供技术支持和服务的公司。这些服务包括系统集成&#xff0c;云计算服务&#xff0c;软件和硬件支持&#xff0c;网络服务&#xff0c;咨询服务&#xff0c;以及一系列其他类型的技术服务。此外&…

CodeFlow - 渐进式低代码开发管理工具(目前仅服务于前端)

CodeFlow 渐进式低代码开发管理工具 目前仅支持前端开发的使用。 简介 通过界面化操作&#xff0c;简化工作流程。 目前项目支持情况 前端 vue3 软件构想图 codeflow构想图.png 目前功能与界面 功能 前端Web 支持工程管理&#xff0c;将不同的项目归纳到一个工程下进行管理支持…

聊聊检索增强,LangChain一把梭能行吗?

背景 ChatGPT诞生之初&#xff0c;大家仿佛从中看到了未来&#xff1a;可以拿着大语言模型&#xff08;LLM&#xff09;这把锤子&#xff0c;锤遍业务上的钉子。其中最被看好的场景&#xff0c;莫过于搜索&#xff0c;不仅是微软、谷歌、百度这样的大公司将LLM用到自己的搜索业…

【ES6】Promise的入门介绍

Promise 是 JavaScript 中的一个对象&#xff0c;用于处理异步操作。Promise 对象代表一个最终可能完成&#xff08;并得到结果&#xff09;或失败&#xff08;并被拒绝&#xff09;的操作&#xff0c;以及其结果的值。 一个 Promise 有三种状态&#xff1a; Pending&#xf…

记录--vue 拉伸指令

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 在我们项目开发中,经常会有布局拉伸的需求,接下来 让我们一步步用 vue指令 实现这个需求 动手开发 在线体验 codesandbox.io/s/dawn-cdn-… 常规使用 解决拉伸触发时机 既然我们使用了指令的方式…

10.引入导航栏样式

1.导航栏为单独一个组件 在element-ui中引入导航栏的代码 &#xff01;注意 内容一定要在template中&#xff0c;否则bug遇到很久 <template><div><!-- 页面布局 --><el-container><!-- 侧边栏 --><el-aside width"200px"><…

模拟电子技术基础学习笔记二 杂质半导体

通过扩散工艺&#xff0c;在本征半导体中掺入少量合适的杂质元素&#xff0c;可得到杂质半导体。 按掺入的杂质元素不同&#xff0c;可形成N型半导体和P型半导体 控制掺入杂质元素的浓度&#xff0c;可以控制杂质半导体的导电性能。 一、N型半导体&#xff08;negative Semic…

独家首发!openEuler 主线集成 LuaJIT RISC-V JIT 技术

RISC-V SIG 预期随主线发布的 openEuler 23.09 创新版本会集成 LuaJIT RISC-V 支持。本次发版将提供带有完整 LuaJIT 支持的 RISC-V 环境并带有相关软件如 openResty 等软件的支持。 随着 RISC-V SIG 主线推动工作的进展&#xff0c;LuaJIT 和相关软件在 RISC-V 架构下的支持也…

活用 命令行通配符

本文是对 阮一峰老师命令行通配符教程[1]的学习与记录 通配符早于正则表达式出现,可以看作是原始的正则表达式. 其功能没有正则那么强大灵活,而胜在简单和方便. - 字符 切回上一个路径/分支 如图: !! 代表上一个命令, 如图: [Linux中“!"的神奇用法](https://www.cnblogs.…

【ES6】Promise.all用法

Promise.all()方法用于将多个 Promise 实例&#xff0c;包装成一个新的 Promise 实例。 const p Promise.all([p1, p2, p3]);上面代码中&#xff0c;Promise.all()方法接受一个数组作为参数&#xff0c;p1、p2、p3都是 Promise 实例&#xff0c;如果不是&#xff0c;就会先调…

华为数通方向HCIP-DataCom H12-821题库(单选题:181-200)

第181题 某管理员需要创建AS Path过滤器(ip as-path-iter)&#xff0c;允许AS_Path中包含65001的路由通过&#xff0c;那么以下哪一项配置是正确的? A、​​ip as-path-filter 1 permit 65001​​ B、​​ip as-path-filter 1 permit "65001​​ C、​​ip as-path-f…

开源电子合同签署平台小程序源码 在线签署电子合同小程序源码 合同在线签署源码

聚合市场上各类电子合同解决方案商&#xff0c;你无需一个一个的对接电子合同厂商&#xff0c;费时&#xff0c;费力&#xff0c;因为这个工作我们已经做了适配&#xff0c;你只需要一个接口就能使用我们的所有服务商&#xff0c;同时你还可以享受我们的接口渠道价格。 Mini-C…

Redis图文指南

1、什么是 Redis&#xff1f; Redis&#xff08;REmote DIctionary Service&#xff09;是一个开源的键值对数据库服务器。 Redis 更准确的描述是一个数据结构服务器。Redis 的这种特殊性质让它在开发人员中很受欢迎。 Redis不是通过迭代或者排序方式处理数据&#xff0c;而是…