在Kubernetes上部署高可用MinIO集群方式
更新时间:2025年11月19日 14:19:12 作者:princeAladdin
文章介绍了MinIO的分布式架构及其在开发测试和生产环境中的应用,重点讲解了分布式集群模式的核心组件和部署步骤,并通过验证集群状态来确保服务的高可用性和可靠性
一、MinIO分布式架构核心概念
部署模式对比
单节点模式
适用场景:开发测试环境
特点:
- 仅部署单个节点,资源消耗低,部署简单。
- 无数据冗余,硬件故障可能导致数据丢失,可靠性较差。
- 适合功能验证、性能测试等非生产场景。
分布式集群模式
适用场景:生产环境(推荐)
特点:
- 数据分片存储,支持横向扩展,提升吞吐量和存储容量。
- 采用纠删码(Erasure Coding)或多副本机制,确保数据高可用。
- 节点故障自动恢复,服务连续性高,适合关键业务场景。
集群关键组件
MinIO Server节点:4节点起(推荐偶数节点)
持久化存储:每个节点独立PV
网关服务:通过Service暴露统一入口
二、Kubernetes部署全流程
步骤1:创建命名空间
~]# kubectl create ns minio
步骤2:配置Secrets(访问密钥)
~]# kubectl create secret generic minio-creds \ --namespace minio \ --from-literal=MINIO_ROOT_USER=admin \ --from-literal=MINIO_ROOT_PASSWORD=admin123
步骤3:创建 Service
LoadBalancer 类型
~]# vi minio-service.yaml
kind: Service
apiVersion: v1
metadata:
name: minio
namespace: minio
spec:
selector:
app: minio
type: LoadBalancer
ports:
- name: minio
port: 9000
- name: console
port: 9001
步骤4:部署StatefulSet(核心)
~]# vi minio-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: minio
namespace: minio
spec:
serviceName: "minio"
replicas: 4
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
directpv.min.io/organization: minio
directpv.min.io/app: minio-example
spec:
containers:
- name: minio
image: quay.io/minio/minio:RELEASE.2025-04-08T15-41-24Z
imagePullPolicy: Always
env:
- name: MINIO_ROOT_USER
valueFrom:
secretKeyRef:
name: minio-creds
key: MINIO_ROOT_USER
- name: MINIO_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: minio-creds
key: MINIO_ROOT_PASSWORD
- name: MINIO_CONSOLE_ADDRESS
value: ":9001"
volumeMounts:
- name: minio-data
mountPath: /data
args:
- "server"
- "http://minio-{0...3}.minio.default.svc.cluster.local:9000/data"
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- minio
topologyKey: "kubernetes.io/hostname"
volumeClaimTemplates: # This is the specification in which you reference the StorageClass
- metadata:
name: minio-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
storageClassName: standard
步骤5:暴露外部访问(Ingress)
~]# vi minio-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minio-ingress
namespace: minio
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: "0"
spec:
rules:
- host: minio.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minio
port:
number: 9000
三、验证集群状态
- 检查Pod运行
~]# kubectl get po -n minio NAME READY STATUS RESTARTS AGE minio-0 1/1 Running 0 55s minio-1 1/1 Running 0 45s minio-2 1/1 Running 0 35s minio-3 1/1 Running 0 25s ~]# kubectl get pvc -n minio NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE minio-data-minio-0 Bound pvc-881730c2-b10c-4285-a1d6-9024482e23ac 10Gi RWO standard <unset> 92s minio-data-minio-1 Bound pvc-f467c8e6-576f-49d1-a1e7-2c4db046b6e1 10Gi RWO standard <unset> 82s minio-data-minio-2 Bound pvc-a83706fc-f9c5-433e-ba6b-0d0b27382676 10Gi RWO standard <unset> 72s minio-data-minio-3 Bound pvc-65415c6d-08ae-480e-aff7-b9a22f3f4b3b 10Gi RWO standard <unset> 62s ~]# kubectl get pv -n minio NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-65415c6d-08ae-480e-aff7-b9a22f3f4b3b 10Gi RWO Delete Bound minio/minio-data-minio-3 standard <unset> 66s pvc-881730c2-b10c-4285-a1d6-9024482e23ac 10Gi RWO Delete Bound minio/minio-data-minio-0 standard <unset> 96s pvc-a83706fc-f9c5-433e-ba6b-0d0b27382676 10Gi RWO Delete Bound minio/minio-data-minio-2 standard <unset> 75s pvc-f467c8e6-576f-49d1-a1e7-2c4db046b6e1 10Gi RWO Delete Bound minio/minio-data-minio-1 standard <unset> 85s ~]# kubectl get svc -n minio NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE minio LoadBalancer 10.105.136.9 172.19.0.200 9000:30876/TCP,9001:31775/TCP 2m33s
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Kubernetes集群中Calico网络插件报错问题分析及解决过程
Kubernetes集群中Calico网络插件报错(如FailedCreatePodSandBox)通常由配置错误、RBAC权限缺失或组件故障导致,解决方法包括重启Calico组件、验证配置和权限,定期监控与维护以确保网络正常运行2025-10-10
tkestack/gpu-manager在k8s1.23版本之后的使用方法
这篇文章主要介绍了tkestack/gpu-manager在k8s1.23版本之后的使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-04-04


最新评论