首页 > 其他分享 >k8s集成MinIo

k8s集成MinIo

时间:2025-01-18 18:33:46浏览次数:3  
标签:集成 PV MinIo s3 yaml PVC csi k8s minio

本篇文章分享一下在 k8s怎么集成 minio做存储,并实现 PersistentVolume (PV)PersistentVolumeClaim (PVC)、动态存储卷StorageClass,以及演示让pod使用这些存储卷的完整流程。

一、理论

1、PV概念

PV是对K8S存储资源的抽象,PV一般由运维人员创建和配置,供容器申请使用。

没有PV之前,服务器的磁盘没有分区的概念,有了PV之后,相当于通过PV对服务器的磁盘进行分区。

2、PVC概念

PVC 是Pod对存储资源的一个申请,主要包括存储空间申请、访问模式等。创建PV后,Pod就可以通过PVC向PV申请磁盘空间了。类似于某个应用程序向操作系统的D盘申请1G的使用空间。

PVC 创建成功之后,Pod 就可以以存储卷(Volume)的方式使用 PVC 的存储资源了。Pod 在使用 PVC 时必须与PVC在同一个Namespace下。

3、PV / PVC的关系

PV相当于对磁盘的分区,PVC相当于APP(应用程序)向某个分区申请多少空间。比如说安装WPS程序时,一般会告知我们安装它需要多少存储空间,让你选择在某个磁盘下安装。如果将来某个分区磁盘满了,也不会影响别的分区磁盘的使用。

一旦 PV 与PVC绑定,Pod就可以使用这个 PVC 了。如果在系统中没有满足 PVC 要求的 PV,PVC则一直处于 Pending 状态,直到系统里产生了一个合适的 PV。

4、StorageClass概念

K8S有两种存储资源的供应模式:静态模式和动态模式,资源供应的最终目的就是将适合的PV与PVC绑定:

  • 静态模式:管理员预先创建许多各种各样的PV,等待PVC申请使用。
  • 动态模式:管理员无须预先创建PV,而是通过StorageClass自动完成PV的创建以及与PVC的绑定。

StorageClass就是动态模式,根据PVC的需求动态创建合适的PV资源,从而实现存储卷的按需创建。

一般某个商业性的应用程序,会用到大量的Pod,如果每个Pod都需要使用存储资源,那么就需要人工时不时的去创建PV,这也是个麻烦事儿。解决方法就是使用动态模式:当Pod通过PVC申请存储资源时,直接通过StorageClass去动态的创建对应大小的PV,然后与PVC绑定,所以基本上PV → PVC是一对一的关系。

二、pod数据存储流程

三、部署minio

官方文档:MinIO | Code and downloads to create high performance object storage

下载minio

# 下载服务端
[root@minio opt]# wget https://dl.min.io/server/minio/release/linux-amd64/minio
# 将下载所得minio文件拷贝到指定文件夹并赋权
[root@minio opt]# cp minio /usr/local/bin/
[root@minio opt]# chmod +x /usr/local/bin/minio

为MinIO创建一个存储目录:

[root@minio opt]# mkdir /data

启动MinIO,并指定存储目录和访问地址:

[root@minio opt]# minio server /data --console-address ":9099"
INFO: Formatting 1st pool, 1 set(s), 1 drives per set.
INFO: WARNING: Host local has more than 0 drives of set. A host failure will result in data becoming unavailable.
MinIO Object Storage Server
Copyright: 2015-2025 MinIO, Inc.
License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html
Version: RELEASE.2025-01-18T00-31-37Z (go1.23.5 linux/amd64)

API: http://10.0.0.12:9000  http://127.0.0.1:9000 
   RootUser: minioadmin 
   RootPass: minioadmin 

WebUI: http://10.0.0.12:9099 http://127.0.0.1:9099   
   RootUser: minioadmin 
   RootPass: minioadmin 

CLI: https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
   $ mc alias set 'myminio' 'http://10.0.0.12:9000' 'minioadmin' 'minioadmin'

Docs: https://docs.min.io
WARN: Detected default credentials 'minioadmin:minioadmin', we recommend that you change these values with 'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' environment variables

其中 /data 是用于存储 MinIO 数据的目录,--console-address ":9099" 是指定 MinIO Web 控制台的监听地址为端口 9099

1.访问

http://10.0.0.12:9099
账号:minioadmin 
密码:minioadmin

 

2.配置自启动服务

为简化MinIO配置,我们可将MinIO的配置统一写入一个配置文件,以供启动时调用。配置方式如下:

[root@minio ~]# vim /etc/default/minio
# 指定数据存储目录(注意:这个目录要存在且拥有相对应的权限)
MINIO_VOLUMES="/data"

# 监听端口
MINIO_OPTS="--address :9000 --console-address :9099"

# 老版本使用MINIO_ACCESS_KEY/MINIO_SECRET_KEY,新版本已不建议使用
# Access key (账号)
# MINIO_ACCESS_KEY="minioadmin"
# Secret key (密码)
# MINIO_SECRET_KEY="minioadmin"

# 新版本使用;指定默认的用户名和密码,其中用户名必须大于3个字母,否则不能启动
MINIO_ROOT_USER="minioadmin"
MINIO_ROOT_PASSWORD="minioadmin666"

# 区域值,标准格式是“国家-区域-编号”,
MINIO_REGION="cn-north-1"

# 域名
# MINIO_DOMAIN=minio.your_domain.com

3.编写服务文件

创建minio.service服务文件,并写入配置信息:

[root@minio ~]# vim /usr/lib/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
WorkingDirectory=/usr/local/

ProtectProc=invisible

# 指向3.1节中的配置文件
#EnvironmentFile=/etc/default/minio
EnvironmentFile=-/etc/default/minio

ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum (1M) file descriptor number that can be opened by this process
LimitNOFILE=1048576

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
SuccessExitStatus=0

[Install]
WantedBy=multi-user.target
Alias=minio.service

使服务生效

通过systemctl将服务生效并启动服务。

# 重新加载服务配置文件,使服务生效
systemctl daemon-reload

# 将服务设置为开机启动
systemctl enable minio

# 服务立即启动
systemctl start minio

# 查看minio服务当前状态
systemctl status minio

重新登录

http://10.0.0.12:9099
账号:minioadmin 
密码:minioadmin666

如果起不来可以查看日志排查

[root@minio ~]# journalctl -u minio -f 

四、minio集成k8s

MinIO控制台提供了一个图形用户界面(GUI),用于与MinIO租户进行交互。默认情况下,MinIO操作员为每个租户安装和配置控制台。

参考地址:https://github.com/yandex-cloud/k8s-csi-s3

下载资源包

[root@master231 kubernetes]# pwd 
/opt/k8s-csi-s3-0.35.5/deploy/kubernetes

[root@master231 kubernetes]# tree ./
./
├── attacher.yaml
├── csi-s3.yaml
├── examples
│   ├── pod.yaml
│   ├── pvc-manual.yaml
│   ├── pvc.yaml
│   ├── secret.yaml
│   └── storageclass.yaml
└── provisioner.yaml

1 directory, 8 files

部署driver

cd deploy/kubernetes
kubectl create -f provisioner.yaml
kubectl create -f driver.yaml
kubectl create -f csi-s3.yaml

查看

创建存储类

[root@master231 examples]# vim storageclass.yaml 
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: csi-s3
provisioner: ru.yandex.s3.csi
parameters:
  mounter: geesefs
  # you can set mount options here, for example limit memory cache size (recommended)
  options: "--memory-limit 1000 --dir-mode 0777 --file-mode 0666"
  # to use an existing bucket, specify it here:
  #bucket: some-existing-bucket
  csi.storage.k8s.io/provisioner-secret-name: csi-s3-secret
  csi.storage.k8s.io/provisioner-secret-namespace: kube-system
  csi.storage.k8s.io/controller-publish-secret-name: csi-s3-secret
  csi.storage.k8s.io/controller-publish-secret-namespace: kube-system
  csi.storage.k8s.io/node-stage-secret-name: csi-s3-secret
  csi.storage.k8s.io/node-stage-secret-namespace: kube-system
  csi.storage.k8s.io/node-publish-secret-name: csi-s3-secret
  csi.storage.k8s.io/node-publish-secret-namespace: kube-system
  
[root@master231 examples]# kubectl apply -f storageclass.yaml 

 1.模拟生成环境测试

创建pvc

[root@master231 examples]# cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-s3-pvc
  namespace: default
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  storageClassName: csi-s3
  
[root@master231 examples]# kubectl apply -f pvc.yaml 

创建pod

[root@master231 examples]# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: csi-s3-test-nginx
  namespace: default
spec:
  containers:
   - name: csi-s3-test-nginx
     image: nginx
     volumeMounts:
       - mountPath: /usr/share/nginx/html/s3
         name: webroot
  volumes:
   - name: webroot
     persistentVolumeClaim:
       claimName: csi-s3-pvc
       readOnly: false

创建secret

[root@master231 examples]# cat secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  namespace: kube-system
  name: csi-s3-secret
stringData:
  accessKeyID: minioadmin
  secretAccessKey: minioadmin666
  #填写minio api接口地址
  endpoint: http://10.0.0.12:9000  
  # For AWS set it to AWS region
  #region: ""

 检查pv,pvc,sc,pod状态

写入数据

 minio web界面查看是否写入成功

 

标签:集成,PV,MinIo,s3,yaml,PVC,csi,k8s,minio
From: https://blog.csdn.net/m0_69326428/article/details/145230573

相关文章

  • 集成AI离线免费,全平台毫秒级快速处理!
    随着PS技术的发展,大家对图像的要求和处理更加的多样化,其中,抠图作为一种常见的图像处理操作,并不是每个小伙伴都完全掌握PS技能,对于那些复杂的抠图操作往往会显得捉襟见肘,近两年随着AI技术的进步,各类软件都和AI集合,希望通过AI快速、高效的实现某些操作;分享一款免费、离线并且......
  • (pdm集成CAD SDK)在线CAD绘制条形码、二维码的教程
    一、条形码绘制1.原理绘制条形码需要根据不同的应用场景选择适当的条形码标准,如常见的codabar、CODE30、CODE128等,每一种条形码标准都有它特定的数据编码规则,调用这些编码规则进行数据编码时会将数据字符按照所选编码规则转换成条和空的组合(一组二进制数据)。不同的条形码标准......
  • node_exporter 集成Prometheus+Grafana
    一、配置Prometheus采集nano/root/apisix-docker/example/prometheus_conf/prometheus.yml========================末尾添加一段===================-job_name:"nodeexporter"scrape_interval:5smetrics_path:"metrics"static_configs:......
  • Zalo SDK集成指南
    配置部分1.官方sdk链接 https://developers.zalo.me/docs/sdk/android-sdk/tong-quan2.zalosdk主要提供的功能集成zalo登录获取用户信息,朋友列表支持android4.3及以上3.demo链接 https://gitlab.com/zalosdk/repositories集成步骤第一步:去Zolo后台创建应用  http:/......
  • 客户案例:致远OA与携程商旅集成方案
    一、前言        本文主要探讨如何利用慧集通(DataLinkXiPaaS)集成平台将致远OA与携程商旅有机融合,构建高效、流畅的企业差旅管理生态体系,提升企业整体运营效率与员工差旅体验。二、客户现状与期望效果    现状:员工处理差旅事务的流程颇为繁琐,不得不在多个系......
  • Kubernetes (K8s) 权限管理指南
    1.引言Kubernetes(K8s)作为当今最流行的容器编排平台,其安全性至关重要。本指南旨在全面介绍K8s的权限管理机制,帮助具有一定基础的读者深入理解并掌握这一关键领域。©ivwdcwso(ID:u012172506)2.Kubernetes安全模型概述K8s的安全模型主要包括三个阶段:认证(......
  • Kubernetes(k8s)和Docker Compose本质区别
    Kubernetes(简称k8s)和DockerCompose是容器编排领域的两大重要工具,虽然它们都用于管理和编排容器化应用,但在设计目标、功能特性、使用场景和复杂度上存在显著差异。以下将从多个方面详细探讨Kubernetes和DockerCompose的本质区别。一、设计目标与应用场景1.KubernetesK......
  • LossVal:一种集成于损失函数的高效数据价值评估方法
    在机器学习领域,训练数据的价值并非均等:部分训练数据点对模型训练的影响显著高于其他数据点。评估单个数据点的影响程度通常需要反复重训练模型,计算效率低下。LossVal提出了一种创新方法,通过将数据价值评估过程直接集成到神经网络的损失函数中,实现了高效的数据价值评估。现代机器......
  • 实施零信任模型的方法指南 支柱1用户 集成ICAM平台(Integrated ICAM Platform)
    1.9.1功能描述国防部各组织和整个企业采用企业级身份管理和公钥基础设施(PKI)系统,用于跟踪整个网络中的用户、管理员和非人员实体(NPE)的身份,并确保访问权限仅限于有需要且有知情权的人员,各组织可以通过凭证管理系统、身份治理和管理工具以及访问管理工具来验证其是否为必需......
  • 深入解读:华为集成服务交付ISD业务变革总体方案
            华为集成服务交付(ISD)业务变革总体方案旨在通过转变服务交付视角和业务运作模式,以适应运营商转型的需求。变革的核心在于从单纯的设备供应商转变为运营商视角的设备和服务提供商,承担更多职责和角色。        该方案提出了“四位一体”的变革框架,包括......