MinIO · 集群统一的 S3 兼容对象存储
MinIO 是部署在 minio namespace 的单副本 S3 兼容对象存储,承载集群里所有需要对象存储的下游:Velero 备份、k3s etcd 快照、yldm-static CDN、各应用 bucket 等。
它对外暴露两类入口:Web Console(受 Cloudflare Access 保护)与 S3 API(公网直连),并通过 STS AssumeRoleWithWebIdentity 与 Dex 做 OIDC 集成,供程序获取临时凭据。
部署形态
- Name
- 命名空间
- Description
- minio
- Name
- 工作负载
- Description
- StatefulSet(serviceName
minio),replicas: 1单副本
- Name
- 镜像
- Description
- quay.io/minio/minio:RELEASE.2025-09-07T16-13-09Z
- Name
- 启动参数
- Description
- server /data --console-address :9001
- Name
- 调度
- Description
- nodeSelector
node-role: database(只有 k8s-worker3 带该标签)
- Name
- 端口
- Description
- 9000(api)、9001(console)
- Name
- 存储
- Description
- volumeClaimTemplates
data,storageClasslocal-path(本地盘 provisioner),800Gi,ReadWriteOnce
- Name
- 资源
- Description
- requests 50m / 256Mi,limits 500m / 512Mi
- Name
- 探针
- Description
- liveness
/minio/health/live、readiness/minio/health/ready,均走 9000 端口
namespace 还附带 ResourceQuota(minio-quota:pods 10、requests 500m/1Gi、limits 2/4Gi)与 LimitRange(minio-limits:容器默认 100m/128Mi,上限 1 CPU/2Gi)。
配置与依赖
root 账号写死为 xiaomo,密码与 OIDC client secret 通过 ExternalSecret minio-secret 从 Vault 经 ClusterSecretStore vault-backend 拉取(refreshInterval: 1h)。
| secretKey | remoteRef.key | property |
|---|---|---|
| root-password | minio/root | password |
| oidc-secret | dex/clients/minio | secret |
关键环境变量(在 StatefulSet 容器内直接声明):
| 变量 | 值 |
|---|---|
| MINIO_ROOT_USER | xiaomo |
| MINIO_SERVER_URL | https://minio-api.yldm.tech |
| MINIO_BROWSER_REDIRECT_URL | https://minio.yldm.tech |
| MINIO_IDENTITY_OPENID_CONFIG_URL | https://dex.yldm.tech/.well-known/openid-configuration |
| MINIO_IDENTITY_OPENID_CLIENT_ID | minio |
| MINIO_IDENTITY_OPENID_SCOPES | openid,profile,email,groups |
| MINIO_IDENTITY_OPENID_REDIRECT_URI | https://minio.yldm.tech/oauth_callback |
| MINIO_IDENTITY_OPENID_ROLE_POLICY | readwrite |
| MINIO_IDENTITY_OPENID_DISPLAY_NAME | Dex |
| MINIO_PROMETHEUS_AUTH_TYPE | public |
依赖项:Vault(凭据来源)、Dex(OIDC IdP)、node-role: database 节点的本地盘。
访问与监控
Service 为 ClusterIP,暴露 api(9000)与 console(9001)两个端口。三个 Ingress 都走 traefik ingressClass,经 cert-manager(letsencrypt-prod)签证书,并通过 external-dns 注册到 Cloudflare Tunnel(cloudflare-proxied: "true")。
| Host | 后端端口 | 用途 |
|---|---|---|
| minio.yldm.tech | 9001 | Web Console(受 Cloudflare Access 保护) |
| minio-api.yldm.tech | 9000 | S3 API(公网直连,无 CF Access) |
| static.yldm.tech | 9000 | yldm-static bucket 只读 CDN,middleware rewrite /(.*) → /yldm-static/$1 |
| download.dunaifen.games | 9000 | DNF 下载,走单独的 Cloudflare Tunnel + dnf 前缀 rewrite middleware |
主 Ingress 设置 proxy-body-size: "0"(不限上传体积)与 600s 读写超时。监控方面:ServiceMonitor minio 抓 api 端口的 /minio/v2/metrics/cluster(interval 30s),配合 MINIO_PROMETHEUS_AUTH_TYPE=public 免鉴权暴露指标。本仓库未为 MinIO 定义 HPA / VPA / PDB。
bucket 初始化 Job
base kustomization 包含一组 argocd.argoproj.io/sync-wave: "1" 的初始化 Job,用 quay.io/minio/mc 镜像在 MinIO 起来后用 root 凭据创建 bucket(mc mb --ignore-existing),按需设置匿名下载权限。涵盖:yldm-static、velero-backups、k3s-etcd-snapshots、registry、dnf。例如 minio-bucket-yldm-static 创建 yldm-static 并 mc anonymous set download,对应 static CDN 的只读公开访问。
注意事项
Console 上没有 OIDC 登录按钮是 MinIO 上游 RELEASE.2025-05-24 起的有意行为,不是配置问题:OIDC 登录按钮、用户/策略管理等管理功能被搬进了商业版 AIStor;2025-12 community edition 进入 maintenance mode。服务端 OIDC 仍完整工作——MINIO_IDENTITY_OPENID_*、IAM Role、与 Dex 的 client 注册都正常,任何走 STS AssumeRoleWithWebIdentity 的程序(SDK、mc CLI)都能通过 Dex 拿临时凭据。被砍掉的只是 console 那个按钮,当前选择维持现状:进 console 只用 root 表单登录(进 console 的只有 xiaomo 一人,程序场景 OIDC 已工作)。
minio namespace 是 default-deny,Pod 出方向受限,其中 allow-external-egress(公网 TCP 80/443)必须保留:MinIO 启动时要走公网回连自己的 MINIO_SERVER_URL=https://minio-api.yldm.tech 验证凭据,并去 https://dex.yldm.tech/.well-known/openid-configuration 拉 OIDC discovery。删掉这条规则,表单登录会直接报 unable to login due to login network error,OIDC 也注册不上(见 PR #783)。入方向走 default-deny-ingress + 按 namespace 单独放行(allow-from-{app,game,platform,velero,argo-workflows,kube-system,...}、allow-prometheus-scraping);新增使用 minio 的 namespace 时要补一条对应的 allow-from-<ns>.yaml。
local-path 本地盘意味着 MinIO 没有冗余,数据生死系于 node-role: database 那一个节点的盘。它又是 Velero / etcd 快照的备份目标,属于集群的关键依赖,扩容或迁移(如迁去 RustFS)需同步改所有引用 minio 的下游:Velero、Argo Workflows、etcd-backup、Loki、Grafana。返回 Storage 总览