Kubernetes环境MinIO部署与应用

发布于2022-09-03,最后编辑于2025-03-16,全文约1702字,阅读时间约4分钟。

Kubernetes Kubernetes Operator MinIO S3 Storage Object Storage

MinIO Operator
MinIO Operator
更新记录
  • 2022-09-17

    • MinIO版本由RELEASE.2022-09-01T23-53-36Z更新至RELEASE.2022-09-07T22-25-02Z
    • MinIO Operator版本由v4.4.28更新至v4.5.0
    • MinIO Client版本由RELEASE.2022-08-28T20-08-11Z更新至RELEASE.2022-09-16T09-16-47Z
  • 2022-09-24

    • MinIO版本由RELEASE.2022-09-07T22-25-02Z更新至RELEASE.2022-09-22T18-57-27Z
    • MinIO Operator版本由v4.5.0更新至v4.5.1
  • 2022-10-01

    • MinIO版本由RELEASE.2022-09-22T18-57-27Z更新至RELEASE.2022-09-25T15-44-53Z
  • 2022-10-14

    • MinIO版本由RELEASE.2022-09-25T15-44-53Z更新至RELEASE.2022-10-08T20-11-00Z
    • MinIO Operator版本由v4.5.1更新至v4.5.2
    • MinIO Client版本由RELEASE.2022-09-16T09-16-47Z更新至RELEASE.2022-10-09T21-10-59Z
  • 2022-10-20

    • MinIO版本由RELEASE.2022-10-08T20-11-00Z更新至RELEASE.2022-10-15T19-57-03Z
    • MinIO Operator版本由v4.5.2更新至v4.5.3
    • MinIO Client版本由RELEASE.2022-10-09T21-10-59Z更新至RELEASE.2022-10-12T18-12-50Z
  • 2022-11-08

    • MinIO版本由RELEASE.2022-10-15T19-57-03Z更新至RELEASE.2022-10-29T06-21-33Z
    • MinIO Operator版本由v4.5.3更新至v4.5.4
    • MinIO Client版本由RELEASE.2022-10-12T18-12-50Z更新至RELEASE.2022-10-29T10-09-23Z
  • 2022-11-12

    • MinIO版本由RELEASE.2022-10-29T06-21-33Z更新至RELEASE.2022-11-11T03-44-20Z
    • MinIO Client版本由RELEASE.2022-10-29T10-09-23Z更新至RELEASE.2022-11-07T23-47-39Z
  • 2022-11-18

    • MinIO版本由RELEASE.2022-11-11T03-44-20Z更新至RELEASE.2022-11-17T23-20-09Z
    • MinIO Client版本由RELEASE.2022-11-07T23-47-39Z更新至RELEASE.2022-11-17T21-20-39Z
  • 2022-12-08

    • MinIO版本由RELEASE.2022-11-17T23-20-09Z更新至RELEASE.2022-12-07T00-56-37Z
    • MinIO Operator版本由v4.5.4更新至v4.5.5
    • MinIO Client版本由RELEASE.2022-11-17T21-20-39Z更新至RELEASE.2022-12-02T23-48-47Z
  • 2022-12-30

    • MinIO版本由RELEASE.2022-12-07T00-56-37Z更新至RELEASE.2022-12-12T19-27-27Z
    • MinIO Client版本由RELEASE.2022-12-02T23-48-47Z更新至RELEASE.2022-12-13T00-23-28Z
  • 2023-01-07

    • MinIO版本由RELEASE.2022-12-12T19-27-27Z更新至RELEASE.2023-01-02T09-40-09Z
    • MinIO Operator版本由v4.5.5更新至v4.5.6
    • MinIO Client版本由RELEASE.2022-12-13T00-23-28Z更新至RELEASE.2022-12-24T15-21-38Z
  • 2023-01-28

    • MinIO版本由RELEASE.2023-01-02T09-40-09Z更新至RELEASE.2023-01-25T00-19-54Z
    • MinIO Operator版本由v4.5.6更新至v4.5.8
    • MinIO Client版本由RELEASE.2022-12-24T15-21-38Z更新至RELEASE.2023-01-11T03-14-16Z
  • 2023-02-03

    • MinIO版本由RELEASE.2023-01-25T00-19-54Z更新至RELEASE.2023-01-31T02-24-19Z
    • MinIO Client版本由RELEASE.2023-01-11T03-14-16Z更新至RELEASE.2023-01-28T20-29-38Z
  • 2023-02-11

    • MinIO版本由RELEASE.2023-01-31T02-24-19Z更新至RELEASE.2023-02-10T18-48-39Z
  • 2023-03-03

    • MinIO版本由RELEASE.2023-02-10T18-48-39Z更新至RELEASE.2023-02-27T18-10-45Z
    • MinIO Client版本由RELEASE.2023-01-28T20-29-38Z更新至RELEASE.2023-02-28T00-12-59Z
  • 2023-03-22

    • MinIO版本由RELEASE.2023-02-27T18-10-45Z更新至RELEASE.2023-03-20T20-16-18Z
    • MinIO Client版本由RELEASE.2023-02-28T00-12-59Z更新至RELEASE.2023-03-20T17-17-53Z
  • 2023-03-27

    • MinIO版本由RELEASE.2023-03-20T20-16-18Z更新至RELEASE.2023-03-24T21-41-23Z
    • MinIO Client版本由RELEASE.2023-03-20T17-17-53Z更新至RELEASE.2023-03-23T20-03-04Z
  • 2023-04-14

    • MinIO版本由RELEASE.2023-03-24T21-41-23Z更新至RELEASE.2023-04-13T03-08-07Z
    • MinIO Operator版本由v4.5.8更新至v5.0.3
    • MinIO Client版本由RELEASE.2023-03-23T20-03-04Z更新至RELEASE.2023-04-12T02-21-51Z
  • 2023-06-27

    • MinIO版本由RELEASE.2023-04-13T03-08-07Z更新至RELEASE.2023-06-23T20-26-00Z
    • MinIO Operator版本由v5.0.3更新至v5.0.5
    • MinIO Client版本由RELEASE.2023-04-12T02-21-51Z更新至RELEASE.2023-06-23T18-12-07Z
  • 2023-07-24

    • MinIO版本由RELEASE.2023-06-23T20-26-00Z更新至RELEASE.2023-07-21T21-12-44Z
    • MinIO Operator版本由v5.0.5更新至v5.0.6
    • MinIO Client版本由RELEASE.2023-06-23T18-12-07Z更新至RELEASE.2023-07-21T20-44-27Z
  • 2023-08-08

    • MinIO版本由RELEASE.2023-07-21T21-12-44Z更新至RELEASE.2023-08-04T17-40-21Z
    • MinIO Operator版本由v5.0.6更新至v5.0.7
    • MinIO Client版本由RELEASE.2023-07-21T20-44-27Z更新至RELEASE.2023-08-01T23-30-57Z
  • 2023-09-03

    • MinIO版本由RELEASE.2023-08-04T17-40-21Z更新至RELEASE.2023-08-31T15-31-16Z
    • MinIO Client版本由RELEASE.2023-08-01T23-30-57Z更新至RELEASE.2023-08-30T08-02-26Z
  • 2023-11-18

    • MinIO版本由RELEASE.2023-08-31T15-31-16Z更新至RELEASE.2023-11-15T20-43-25Z
    • MinIO Operator版本由v5.0.7更新至v5.0.11
    • MinIO Client版本由RELEASE.2023-08-30T08-02-26Z更新至RELEASE.2023-11-15T22-45-58Z
  • 2024-01-01

    • MinIO版本由RELEASE.2023-11-15T20-43-25Z更新至RELEASE.2023-12-23T07-19-11Z
    • MinIO Client版本由RELEASE.2023-11-15T22-45-58Z更新至RELEASE.2023-12-23T08-47-21Z
  • 2024-03-31

    • MinIO版本由RELEASE.2023-12-23T07-19-11Z更新至RELEASE.2024-03-30T09-41-56Z
    • MinIO Operator版本由v5.0.11更新至v5.0.14
    • MinIO Client版本由RELEASE.2023-12-23T08-47-21Z更新至RELEASE.2024-03-30T15-29-52Z
  • 2024-09-30

    • MinIO版本由RELEASE.2024-03-30T09-41-56Z更新至RELEASE.2024-09-09T16-59-28Z
    • MinIO Operator版本由v5.0.14更新至v6.0.3
    • MinIO Client版本由RELEASE.2024-03-30T15-29-52Z更新至RELEASE.2024-09-09T07-53-10Z
  • 2025-01-26

    • MinIO版本由RELEASE.2024-09-09T16-59-28Z更新至RELEASE.2025-01-20T14-49-07Z
    • MinIO Operator版本由v6.0.3更新至v7.0.0
    • MinIO Client版本由RELEASE.2024-09-09T07-53-10Z更新至RELEASE.2025-01-17T23-25-50Z
  • 2025-03-16

    • MinIO版本由RELEASE.2025-01-20T14-49-07Z更新至RELEASE.2025-03-12T18-04-18Z
    • MinIO Client版本由RELEASE.2025-01-17T23-25-50Z更新至RELEASE.2025-03-12T17-29-24Z

概述

本文用于整理基于Kubernetes环境的MinIO部署与应用,搭建S3兼容的分布式对象存储服务,作为后续演练项目的前置环境准备。

随着各相关组件版本的更新,笔者将在验证通过后对本文进行补充和更新,请参考更新记录

本次演练环境为Kubernetes集群环境,环境配置可参考笔者另一篇笔记《Kubernetes集群部署笔记》。

本次演练使用Traefik作为Ingress Controller实现,环境配置可参考笔者另一篇笔记《Kubernetes环境Traefik部署与应用》。

组件版本

配置过程

准备工作

  • 添加Helm仓库

    添加用于安装minio-operatorminio-tenant的Helm仓库。

    1helm repo add minio-operator https://operator.min.io/
    2helm repo update minio-operator
    
  • 创建命名空间

    本次演练中将MinIO Operator安装至minio-operator命名空间,将MinIO Tenant安装至minio-tenants命名空间,可根据需要替换。

    1kubectl create namespace minio-operator
    2kubectl create namespace minio-tenants
    
  • 创建TLS证书Secret

    从已准备好的证书key文件和crt文件创建Secret

    1kubectl create secret tls local-choral-io-tls -n apps-gitlab \
    2  --key=local.choral.io.key --cert=local.choral.io.crt
    

安装MinIO Operator

本次演练中将MinIO Tenant安装至minio-operator命名空间,可根据需要替换。

  • 安装MinIO Operator

    1# operator.env[0].name=OPERATOR_STS_ENABLED 设置环境变量`OPERATOR_STS_ENABLED`的值
    2# operator.env[0].value=off                 设置环境变量`OPERATOR_STS_ENABLED`的值为`off`,禁用STS服务
    3helm upgrade --install --namespace minio-operator \
    4  --set operator.env[0].name=OPERATOR_STS_ENABLED \
    5  --set operator.env[0].value=off \
    6  minio-operator minio-operator/operator --version 7.0.0
    

安装MinIO Tenant

本次演练中将MinIO Tenant安装至minio-tenants命名空间,可根据需要替换。

  • 创建MinIO Tenant

     1# tenant.name=minio-default                                                                    设置MinIO Tenant实例的名称
     2# tenant.image.tag=RELEASE.2025-03-12T18-04-18Z                                                指定MinIO镜像的版本
     3# tenant.pools[0].name=pool-0                                                                  设置存储池名称
     4# tenant.pools[0].servers=3                                                                    设置存储池中MinIO服务器数量
     5# tenant.pools[0].volumesPerServer=3                                                           设置每个服务器的存储卷数量
     6# tenant.pools[0].storageClassName=local-path                                                  指定分配PVC的存储类
     7# tenant.pools[0].size=1Gi                                                                     定义存储卷的大小
     8# tenant.certificate.requestAutoCert=false                                                     禁用自动申请证书(使用预配置的证书)
     9# tenant.configuration.name=minio-default-env-configuration                                    指定环境变量Config Map名称
    10# tenant.configSecret.name=minio-default-env-configuration                                     指定密钥配置Secret名称
    11# ingress.api.enabled=true                                                                     开启MinIO Tenant的Ingress访问
    12# ingress.api.host=minio.local.choral.io                                                       设置MinIO Tenant服务的访问域名
    13# ingress.api.tls[0].secretName=local-choral-io-tls                                            指定TLS证书的Secret名称
    14# ingress.api.annotations."traefik\.ingress\.kubernetes\.io/router\.entrypoints"=websecure     仅限HTTPS访问
    15# ingress.console.enabled=true                                                                 开启MinIO Console的Ingress访问
    16# ingress.console.host=minio-console.local.choral.io                                           定义MinIO Console服务的访问域名
    17# ingress.console.tls[0].secretName=local-choral-io-tls                                        指定TLS证书的Secret名称
    18# ingress.console.annotations."traefik\.ingress\.kubernetes\.io/router\.entrypoints"=websecure 仅限HTTPS访问
    19helm upgrade --install --namespace minio-tenants \
    20  --set tenant.name=minio-default \
    21  --set tenant.image.tag=RELEASE.2025-03-12T18-04-18Z \
    22  --set tenant.pools[0].name=pool-0 \
    23  --set tenant.pools[0].servers=3 \
    24  --set tenant.pools[0].volumesPerServer=3 \
    25  --set tenant.pools[0].storageClassName=local-path \
    26  --set tenant.pools[0].size=1Gi \
    27  --set tenant.certificate.requestAutoCert=false \
    28  --set tenant.configuration.name=minio-default-env-configuration \
    29  --set tenant.configSecret.name=minio-default-env-configuration \
    30  --set ingress.api.enabled=true \
    31  --set ingress.api.host=minio.local.choral.io \
    32  --set ingress.api.tls[0].secretName=local-choral-io-tls \
    33  --set ingress.api.annotations."traefik\.ingress\.kubernetes\.io/router\.entrypoints"=websecure \
    34  --set ingress.console.enabled=true \
    35  --set ingress.console.host=minio-console.local.choral.io \
    36  --set ingress.console.tls[0].secretName=local-choral-io-tls \
    37  --set ingress.console.annotations."traefik\.ingress\.kubernetes\.io/router\.entrypoints"=websecure \
    38  minio-default minio-operator/tenant --version 7.0.0
    
  • 获取访问MinIO Tenant的认证信息

    当MinIO发布更新版本时,可通过如下命令升级MinIO Tenant。

    1kubectl get secret -n minio-tenants minio-default-env-configuration -o jsonpath="{.data['config\.env']}" | base64 --decode
    2# export MINIO_ROOT_USER="minio"
    3# export MINIO_ROOT_PASSWORD="minio123"
    

安装MinIO Client

  • 安装MinIO Client

     1# 可根据需要在 https://dl.min.io/client/mc/release 找到可执行文件文件地址,直接下载到本地$PATH目录中
     2# 笔者本地电脑为`x86_64`架构`Linux`操作系统
     3sudo curl -L https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc
     4
     5# 设置可执行文件的所有者和权限
     6sudo chown root:root /usr/local/bin/mc
     7sudo chmod 755 /usr/local/bin/mc
     8
     9# 验证是否可以正常运行
    10mc --version | head -1
    11# mc version RELEASE.2025-03-12T17-29-24Z (commit-id=c1d5d4cbb4caf05afef3ea06a91a56bd778336de)
    

Bucket配置与应用

  • 设置服务别名

    1mc alias set choral-local https://minio.local.choral.io minio minio123
    
  • 创建MinIO Bucket

    1# 创建一个演示用Bucket,命名为`demo`
    2mc mb choral-local/demo
    3
    4# 设置Bucket的访问策略,允许匿名下载
    5mc anonymous set download choral-local/demo
    
  • 创建和获取对象

    1# 创建一个示例文件`hello.html`
    2echo "hello, world." > hello.html
    3
    4# 将示例文件复制到Bucket中
    5mc cp ./hello.html choral-local/demo/html/hello.html
    6
    7# 访问Bucket中的示例文件
    8curl https://minio.local.choral.io/demo/html/hello.html
    9# hello, world.
    

卸载和清理(可选)

  • 删除MinIO Bucket

    1# 列出演示用Bucket中的对象
    2mc ls choral-local/demo
    3# 删除Bucket中指定路径的单个对象
    4mc rm choral-local/demo/html/hello.html
    5# 删除Bucket中指定前缀的所有对象
    6mc rm choral-local/demo/html/ --recursive --force
    7# 删除Bucket,若Bucket不为空,默认禁止删除,可添加`--force`参数强制删除
    8mc rb choral-local/demo # --force
    
  • 删除MinIO Tenant

    1helm uninstall --namespace minio-tenants minio-default
    
  • 删除MinIO Operator

    1helm uninstall --namespace minio-operator minio-operator
    
  • 删除PVCs

    1# 删除关联的存储卷声明
    2kubectl delete pvc --namespace minio-tenants data{0,1,2}-minio-default-pool-0-{0,1,2}
    

参考资料