在k8s集群部署minio开源版,免费,多节点,多副本

说明

部署MinIO开源版本,多副本,多POD。

修改配置

若需定制配置,请修改yaml文件,文件已定义namespace等资源。可投喂给AI处理。

bash 复制代码
# minio/minio:RELEASE.2025-09-07T16-13-09Z 是最后一个开源版本。
# minio/minio:RELEASE.2025-04-22T22-12-26Z 是最后一个带图形界面版本
# minio代码:https://github.com/minio/minio
# console代码:https://github.com/georgmangold/console  https://github.com/Alevsk/console

# 命名空间
apiVersion: v1
kind: Namespace
metadata:
  name: minio
---
# 账号密码 Secret(生产环境建议替换为强密码)
apiVersion: v1
kind: Secret
metadata:
  name: minio-secret
  namespace: minio
type: Opaque
data:
  root-user: YWRtaW4=        # admin (base64编码)
  root-password: YWRtaW5AMTIz # admin@123 (base64编码)

---
# MinIO 分布式集群 StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: minio
  namespace: minio
spec:
  serviceName: minio-headless
  replicas: 3  # Pod 副本数量,可在此处修改
  selector:
    matchLabels:
      app: minio
  template:
    metadata:
      labels:
        app: minio
    spec:
      containers:
        - name: minio
          image: minio/minio:RELEASE.2025-09-07T16-13-09Z
          command:
            - minio
            - server
            # 节点地址范围:{0...2} 对应 3 个副本,修改副本数需同步调整
            # 磁盘范围:{1...2} 表示每个 Pod 挂载 2 块盘
            - http://minio-{0...2}.minio-headless.minio.svc.cluster.local/data{1...2}
            - --console-address
            - ":9001"
          env:
            - name: MINIO_ROOT_USER
              valueFrom:
                secretKeyRef:
                  name: minio-secret
                  key: root-user
            - name: MINIO_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: minio-secret
                  key: root-password
          ports:
            - containerPort: 9000
              name: api
            - containerPort: 9001
              name: console
          livenessProbe:
            httpGet:
              path: /minio/health/live
              port: 9000
            initialDelaySeconds: 5
            periodSeconds: 30
            timeoutSeconds: 10
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /minio/health/ready
              port: 9000
            initialDelaySeconds: 5
            periodSeconds: 10
          volumeMounts:
            - name: minio-data-1
              mountPath: /data1
            - name: minio-data-2
              mountPath: /data2
          resources:
            requests:
              cpu: 100m
              memory: 256Mi
            limits:
              cpu: 2000m
              memory: 2Gi
  # 每个 Pod 独立分配 2 块持久化存储
  volumeClaimTemplates:
    - metadata:
        name: minio-data-1
      spec:
        accessModes: ["ReadWriteOnce"]
        # storageClassName: "your-storage-class"  # 指定集群存储类,按需取消注释
        resources:
          requests:
            storage: 10Gi  # 单盘容量,按需调整
    - metadata:
        name: minio-data-2
      spec:
        accessModes: ["ReadWriteOnce"]
        # storageClassName: "your-storage-class"
        resources:
          requests:
            storage: 10Gi
---
# 第三方 MinIO Console 部署
apiVersion: apps/v1
kind: Deployment
metadata:
  name: minio-console
  namespace: minio
spec:
  replicas: 1
  selector:
    matchLabels:
      app: minio-console
  template:
    metadata:
      labels:
        app: minio-console
    spec:
      containers:
        - name: minio-console
          image: zhuyifeiruichuang/georgmangold-console:dev1
          env:
            - name: CONSOLE_MINIO_SERVER
              value: "http://minio-service.minio.svc.cluster.local:9000"
          ports:
            - containerPort: 9090
              name: http
          resources:
            requests:
              cpu: 50m
              memory: 128Mi
            limits:
              cpu: 500m
              memory: 512Mi
---
# 第三方 Console 访问 Service
apiVersion: v1
kind: Service
metadata:
  name: minio-console-service
  namespace: minio
spec:
  selector:
    app: minio-console
  ports:
    - port: 9090
      targetPort: 9090
      name: http
  type: ClusterIP
---
# MinIO 主服务 NodePort(对外暴露 API + 官方控制台)
apiVersion: v1
kind: Service
metadata:
  name: minio-nodeport
  namespace: minio
spec:
  type: NodePort
  selector:
    app: minio
  ports:
    - name: api
      port: 9000
      targetPort: 9000
      nodePort: 30000  # 对外 S3 API 端口,范围需在 30000-32767 之间
    - name: console-official
      port: 9001
      targetPort: 9001
      # nodePort: 30001  # 对外官方 Web 控制台端口
---
# 第三方 MinIO Console NodePort
apiVersion: v1
kind: Service
metadata:
  name: minio-console-nodeport
  namespace: minio
spec:
  type: NodePort
  selector:
    app: minio-console
  ports:
    - port: 9090
      targetPort: 9090
      # nodePort: 30090  # 对外第三方控制台端口
      name: http
---
# Headless Service(StatefulSet 必需,提供稳定 DNS 解析)
apiVersion: v1
kind: Service
metadata:
  name: minio-headless
  namespace: minio
spec:
  clusterIP: None
  selector:
    app: minio
  ports:
    - name: api
      port: 9000
      targetPort: 9000
    - name: console
      port: 9001
      targetPort: 9001
---
# MinIO 集群访问 Service
apiVersion: v1
kind: Service
metadata:
  name: minio-service
  namespace: minio
spec:
  selector:
    app: minio
  ports:
    - name: api
      port: 9000
      targetPort: 9000
    - name: console-official
      port: 9001
      targetPort: 9001
  type: ClusterIP

关于容器镜像

bash 复制代码
# minio/minio:RELEASE.2025-09-07T16-13-09Z 是最后一个开源版本。
# minio/minio:RELEASE.2025-04-22T22-12-26Z 是最后一个带完整图形界面版本
# minio代码:https://github.com/minio/minio https://gitee.com/zhudev2026/minio
# console代码:https://github.com/georgmangold/console  https://github.com/Alevsk/console

console组件需要自己定制打包并构建容器镜像。也可以用默认的。

部署

bash 复制代码
kubectl apply -f minio.yaml

验证

bash 复制代码
kubectl exec -it minio-0 -n minio -- bash
mc alias set local http://localhost:9000 admin admin@123
mc admin info local
# 将查询结果发给AI,分析查询结果是否有异常。
# 进行数据测试
mc mb local/test-bucket
echo "test data" > test.txt
mc cp test.txt local/test-bucket/
# 验证每个POD的双副本生效。三个POD是6副本。
ls /data1/test-bucket/
ls /data2/test-bucket/