您的位置 首页 linux 运维

Kubernetes 中使用 MinIO 作为存储类(StorageClass)

在 Kubernetes 中使用 MinIO 作为存储类(StorageClass),可以通过以下两种主流方案实现动态存储供给:


方案一:使用 MinIO CSI 驱动(推荐生产环境)

1. 安装 MinIO CSI 驱动

`bash

添加 Helm 仓库

helm repo add minio-csi https://minio.github.io/csi-driver
helm repo update

安装驱动(替换以下参数)

helm install minio-csi minio-csi/minio-csi \
--namespace kube-system \
--set accessKeyID=MINIOACCESSKEY \
--set secretAccessKey=MINIOSECRETKEY \
--set endpoints=https://minio.example.com \
--set storageClass.name=minio-csi \
--set storageClass.defaultClass=true
`

2. 验证安装

`bash

检查 CSI 驱动 Pod

kubectl get pods -n kube-system -l app.kubernetes.io/name=minio-csi

查看 StorageClass

kubectl get storageclass minio-csi -o yaml
`

3. 创建 PVC 测试

`yaml

minio-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: minio-test-pvc
spec:
storageClassName: minio-csi
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
`


方案二:使用 S3FS Provisioner(兼容 S3 协议)

1. 安装 S3FS Provisioner

bash
helm install s3fs-provisioner \
https://charts.kubesphere.io/main/s3fs-provisioner-1.3.0.tgz \
--namespace kube-system \
--set accessKeyID=MINIO_ACCESS_KEY \
--set secretAccessKey=MINIO_SECRET_KEY \
--set endpoint=https://minio.example.com \
--set storageClass.name=minio-s3 \
--set storageClass.defaultClass=false

2. 创建自定义 StorageClass

`yaml

minio-s3-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: minio-s3
provisioner: cluster.local/s3fs-provisioner
parameters:
bucket: "my-k8s-bucket" # 需先在MinIO创建的桶
endpoint: "https://minio.example.com"
path: "/k8s-pv"
otherOpts: "-o usepathrequest_style -o umask=0022"
reclaimPolicy: Retain
volumeBindingMode: Immediate
`


关键配置说明

| 参数 | CSI 驱动方案 | S3FS 方案 |
| -------------- | ------------------ | ----------------- |
| 协议支持 | CSI 标准接口 | S3/FUSE 兼容 |
| 动态扩容 | ✅ 支持 | ❌ 不支持 |
| 性能 | ⭐️⭐️⭐️ (直接挂载) | ⭐️⭐️ (FUSE 层转换) |
| 多租户隔离 | 通过K8s RBAC控制 | 依赖MinIO桶策略 |
| 适用场景 | 生产环境持久化存储 | 开发测试/临时存储 |


生产环境优化建议

  1. MinIO 服务器配置
    bash
    # 分布式MinIO部署(4节点示例)
    helm install minio minio/minio \
    --set mode=distributed \
    --set persistence.size=10Ti \
    --set resources.requests.memory=8Gi \
    --set accessKey=MINIO_ROOT_USER \
    --set secretKey=MINIO_ROOT_PASSWORD
  2. 网络策略
    `yaml
    # network-policy.yaml
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
    name: minio-csi-access
    spec:
    podSelector:
    matchLabels:
    app.kubernetes.io/name: minio-csi
    ingress:

    • from:
      • podSelector:
        matchLabels:
        app: data-intensive-app
        `
  3. 监控告警
    yaml
    # 启用Prometheus监控
    metrics:
    enabled: true
    serviceMonitor:
    enabled: true
    interval: 30s

故障排查命令

`bash

查看CSI驱动日志

kubectl logs -n kube-system -l app.kubernetes.io/name=minio-csi -c minio-csi

测试MinIO连接性

kubectl run -it --rm --image=minio/mc test -- \
mc alias set minio https://minio.example.com $MINIOACCESSKEY $MINIOSECRETKEY --api S3v4 && \
mc admin info minio

检查PVC绑定事件

kubectl get events --field-selector involvedObject.name=minio-test-pvc
`


注意事项

  1. 访问密钥管理
    • 使用K8s Secret存储凭证
      bash
      kubectl create secret generic minio-creds \
      --from-literal=accesskey=$MINIO_ACCESS_KEY \
      --from-literal=secretkey=$MINIO_SECRET_KEY
  2. 版本兼容性
    • MinIO Server ≥ RELEASE.2023-08-29T23-54-05Z
    • Kubernetes ≥ v1.21
  3. 性能调优
    `yaml
    # values-csi-tuning.yaml
    args:

    • "--fuse-max-idle=30"
    • "--fuse-mount-timeout=5m"
      resources:
      limits:
      cpu: 2
      memory: 2Gi
      `

根据实际需求选择方案,生产环境推荐CSI驱动方案,可获得更好的性能和稳定性。

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章