在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调度单位pod的使用详解

    云原生技术kubernetes调度单位pod的使用详解

    这篇文章主要介绍了云原生技术kubernetes调度单位pod的使用详解,帮助大家更好的理解和学习使用K8S,感兴趣的朋友可以了解下
    2021-03-03
  • Kubernetes Gateway API TLS路由使用及说明

    Kubernetes Gateway API TLS路由使用及说明

    TLSRoute是GatewayAPI中的一个资源类型,用于处理TLS流量,可以根据主机名等TLS元数据将流量定向到不同的Kubernetes后端服务,通过配置Gateway和TLSRoute,可以实现TLS流量的透传和终止处理,满足不同的安全和管理需求
    2026-03-03
  • Kubernetes安装Jenkins的思路详解

    Kubernetes安装Jenkins的思路详解

    这篇文章主要介绍了Kubernetes安装Jenkins,Jenkins插件可以在Kubernetes集群中运行动态jenkins-slave代理,基于Kubernetes的docker,自动化在Kubernetes中运行的Jenkins-slave代理的缩放,需要的朋友可以参考下
    2022-06-06
  • IoT 边缘集群Kubernetes Events告警通知进一步配置详解

    IoT 边缘集群Kubernetes Events告警通知进一步配置详解

    这篇文章主要为大家介绍了IoT 边缘集群Kubernetes Events告警通知进一步配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Rainbond的ServiceMesh架构组件端口冲突处理解决

    Rainbond的ServiceMesh架构组件端口冲突处理解决

    这篇文章主要大家介绍了Rainbond ServiceMesh架构组件端口冲突处理方式,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Kubernetes 权限管理认证鉴权详解

    Kubernetes 权限管理认证鉴权详解

    这篇文章主要为大家介绍了Kubernetes 权限管理认证鉴权详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • IoT边缘集群Kubernetes Events告警通知实现示例

    IoT边缘集群Kubernetes Events告警通知实现示例

    这篇文章主要为大家介绍了IoT边缘集群Kubernetes Events告警通知实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 详解Rainbond云原生平台简化Kubernetes业务问题排查

    详解Rainbond云原生平台简化Kubernetes业务问题排查

    这篇文章主要介绍了详解Rainbond云原生平台简化Kubernetes业务问题排查,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Kubernetes环境部署Redis集群过程

    Kubernetes环境部署Redis集群过程

    在Kubernetes环境中部署Redis集群,推荐使用Redis7.0及以上版本;需配置cluster-announce-ip确保节点间稳定通信;使用StatefulSet管理节点提供稳定网络标识和持久化存储;配置l生检查确保节点可用性
    2026-06-06
  • MinIO分布式文件存储(从入门到飞翔)

    MinIO分布式文件存储(从入门到飞翔)

    MinIO是一款高性能的分布式对象存储系统,兼容Amazon S3协议,具有轻量级、易部署、高可用和可扩展性等优势,它通过纠删码技术实现数据冗余与高容错性,适用于私有云存储、大数据分析和静态资源托管等场景,本文介绍MinIO分布式文件存储的相关知识,感兴趣的朋友一起看看吧
    2025-03-03

最新评论