目 录CONTENT

文章目录

使用Helm安装MinIO并配置APISIX流量转发:打造高可用对象存储方案

Administrator
2026-04-02 / 0 评论 / 0 点赞 / 1 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

使用Helm安装MinIO并配置APISIX流量转发:打造高可用对象存储方案

背景介绍

随着云原生技术的发展,对象存储已成为现代应用架构的重要组成部分。MinIO作为高性能的对象存储系统,兼容Amazon S3 API,广泛应用于各种场景。本文将详细介绍我如何使用Helm在Kubernetes环境中部署MinIO,并通过APISIX实现对s3.howlaisi.com和minio.howlaisi.com两个域名的请求转发,同时使用NodePort实现端口转发,并配置必要的环境变量,构建高可用的对象存储服务。

技术架构概述

本文档涵盖的技术栈包括:

  • MinIO:高性能对象存储服务
  • Helm:Kubernetes包管理工具
  • APISIX:API网关(虚拟机部署)
  • Kubernetes:容器编排平台

准备工作

环境要求

  • Kubernetes集群(已安装kubectl)
  • Helm 3.x
  • 已部署APISIX作为入口控制器

添加Helm仓库

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

安装MinIO

1. 创建命名空间

kubectl create namespace minio

2. 下载并解压Chart包

下载MinIO的Helm Chart包并解压进行自定义配置:

# 拉取并解压chart包
helm pull bitnami/minio --version 12.6.4 --untar

# 进入解压后的目录
cd minio

3. 直接编辑values.yaml

在解压后的目录中直接编辑 values.yaml 文件,进行自定义配置。我在实际操作中进行了以下更改:

# 备份原始配置
cp values.yaml values.yaml.bak

执行以下更改:

diff values.yaml values.yaml.bak
100c100
<   rootPassword: "Huawei@123"
---
>   rootPassword: ""
143,147c143
< extraEnvVars: 
<   - name: MINIO_SERVER_URL
<     value: 'https://s3.howlaisi.com'
<   - name: MINIO_BROWSER_REDIRECT_URL
<     value: 'https://minio.howlaisi.com'
---
> extraEnvVars: []

最终的 values.yaml 配置如下:

## MinIO服务配置
auth:
  rootUser: "admin"
  rootPassword: "Huawei@123"  # 修改了默认密码

persistence:
  enabled: true
  size: 20Gi
  storageClass: "" # 根据您的存储类进行调整

service:
  type: NodePort  # 改为NodePort以便从集群外部访问
  ports:
    api: 9000
    console: 9001
  nodePorts:
    api: 30900  # 指定固定NodePort
    console: 30901

resources:
  limits:
    cpu: 500m
    memory: 1Gi
  requests:
    cpu: 250m
    memory: 512Mi

metrics:
  enabled: true

consoleService:
  type: NodePort
  port: 9001
  nodePort: 30901

apiService:
  port: 9000
  nodePort: 30900

## 环境变量配置
extraEnvVars:
  - name: MINIO_SERVER_URL
    value: 'https://s3.howlaisi.com'  # 使用HTTPS协议
  - name: MINIO_BROWSER_REDIRECT_URL
    value: 'https://minio.howlaisi.com'  # 使用HTTPS协议

4. 使用Helm安装MinIO

helm install minio . \
  --namespace minio \
  --create-namespace

5. 验证安装

kubectl get pods -n minio
kubectl get svc -n minio

您应该能看到类似以下的输出:

NAME                     READY   STATUS    RESTARTS   AGE
minio-0                  1/1     Running   0          5m

NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
minio-api           NodePort    10.96.100.150   <none>        9000:30900/TCP               5m
minio-console       NodePort    10.96.120.200   <none>        9001:30901/TCP               5m

配置APISIX路由

由于我的APISIX是通过虚拟机安装的,我使用APISIX Dashboard界面来配置路由规则。

1. 配置APISIX路由规则

通过APISIX Dashboard界面创建路由规则,将s3.howlaisi.com映射到MinIO的API端口(9000),minio.howlaisi.com映射到控制台端口(9001)。

s3.howlaisi.com -> MinIO API (端口9000)

我在APISIX Dashboard中创建了以下路由配置:

{
  "uri": "/*",
  "name": "s3.howlaisi.com",
  "methods": [
    "GET",
    "POST",
    "PUT",
    "DELETE",
    "PATCH",
    "HEAD",
    "OPTIONS",
    "CONNECT",
    "TRACE",
    "PURGE"
  ],
  "host": "s3.howlaisi.com",
  "plugins": {
    "proxy-rewrite": {
      "scheme": "https"
    },
    "redirect": {
      "http_to_https": true
    }
  },
  "upstream": {
    "nodes": [
      {
        "host": "10.147.18.203",
        "port": 9000,
        "weight": 1
      }
    ],
    "timeout": {
      "connect": 600,
      "send": 600,
      "read": 600
    },
    "type": "roundrobin",
    "scheme": "http",
    "pass_host": "pass",
    "keepalive_pool": {
      "idle_timeout": 60,
      "requests": 1000,
      "size": 320
    }
  },
  "enable_websocket": true,
  "status": 1
}

minio.howlaisi.com -> MinIO Console (端口9001)

我在APISIX Dashboard中创建了以下路由配置:

{
  "uri": "/*",
  "name": "minio.howlaisi.com",
  "methods": [
    "GET",
    "POST",
    "PUT",
    "DELETE",
    "PATCH",
    "HEAD",
    "OPTIONS",
    "CONNECT",
    "TRACE",
    "PURGE"
  ],
  "host": "minio.howlaisi.com",
  "plugins": {
    "proxy-rewrite": {
      "scheme": "https"
    },
    "redirect": {
      "http_to_https": true
    }
  },
  "upstream": {
    "nodes": [
      {
        "host": "10.147.18.203",
        "port": 9001,
        "weight": 1
      }
    ],
    "timeout": {
      "connect": 600,
      "send": 600,
      "read": 600
    },
    "type": "roundrobin",
    "scheme": "http",
    "pass_host": "pass",
    "keepalive_pool": {
      "idle_timeout": 60,
      "requests": 1000,
      "size": 320
    }
  },
  "enable_websocket": true,
  "status": 1
}

注意:这里的配置展示了我实际使用的路由配置,实际上我在APISIX Dashboard界面中创建这些路由,而不是使用API。

2. 配置TLS证书(可选)

如果您需要HTTPS支持,请在APISIX Dashboard中配置SSL证书。

访问MinIO服务

1. 控制台访问

2. S3 API访问

配置参数说明

参数含义可选值默认值
auth.rootUserMinIO管理员用户名字符串admin
auth.rootPasswordMinIO管理员密码字符串空字符串
persistence.enabled是否启用持久化存储true/falsetrue
persistence.size存储卷大小如20Gi10Gi
persistence.storageClass存储类名称存储类名""
service.type服务类型ClusterIP/NodePort/LoadBalancerClusterIP
service.ports.apiAPI服务端口端口号9000
service.ports.console控制台端口端口号9001

性能调优建议

  1. 存储性能优化

    • 使用SSD存储以获得更好的I/O性能
    • 配置合适的存储类以满足性能需求
  2. 资源分配优化

    • 根据预期负载合理分配CPU和内存资源
    • 启用水平Pod自动伸缩(HPA)以应对负载变化
  3. 网络优化

    • 确保APISIX与MinIO之间的网络连接稳定
    • 配置适当的超时和重试策略

故障排除

常见问题

  1. 服务无法访问

    • 检查APISIX路由规则是否正确配置
    • 确认域名DNS解析是否指向正确的入口IP
  2. 控制台无法登录

    • 检查用户名密码是否正确
    • 确认浏览器是否允许第三方Cookie
  3. 存储空间不足

    • 扩展PersistentVolume容量
    • 清理不必要的对象数据

日志查看

# 查看MinIO日志
kubectl logs -n minio deployment/minio -f

# 查看APISIX日志
kubectl logs -n ingress-apisix deployment/apisix -f

安全注意事项

  1. 生产环境安全配置

    • 更改默认的用户名和密码
    • 启用TLS加密通信
    • 配置访问控制策略
  2. 备份策略

    • 定期备份MinIO配置
    • 实施数据备份和恢复计划

扩展阅读

如果需要更高级的MinIO集群配置,可以考虑使用分布式模式部署,这将提供更高的可用性和容错能力。

参考资料

  1. MinIO官方文档
  2. Helm Chart for MinIO
  3. APISIX Ingress Controller
  4. Kubernetes官方文档

如需获取更多技术支持,可通过张师傅博客 https://howlaisi.com 联系我们,也可通过微信(ggttxlss)咨询具体的部署细节。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区