#{ commentsCount } comment.
Kubernetes环境MinIO部署与应用
发布于2022-09-03
,最后编辑于2024-10-25
,全文约2547
字,阅读时间约6
分钟。
Kubernetes Kubernetes Operator MinIO S3 Storage Object Storage
更新记录
-
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
;
概述¶
本文用于整理基于Kubernetes环境的MinIO部署与应用,搭建S3兼容的分布式对象存储服务,作为后续演练项目的前置环境准备。
随着各相关组件版本的更新,笔者将在验证通过后对本文进行补充和更新,请参考更新记录。
本次演练环境为Kubernetes集群环境,环境配置可参考笔者另一篇笔记《Kubernetes集群部署笔记》。
本次演练使用Traefik作为Ingress Controller实现,环境配置可参考笔者另一篇笔记《Kubernetes环境Traefik部署与应用》。
组件版本¶
-
MinIO
RELEASE.2024-03-30T09-41-56Z
-
MinIO Operator
v5.0.14
-
MinIO Client
RELEASE.2024-03-30T15-29-52Z
配置过程¶
安装MinIO Operator¶
本次演练中将MinIO Tenant安装至minio-operator
命名空间,可根据需要替换。
-
安装MinIO Operator
kubectl-minio
是kubectl
命令的插件,用于支持kubectl minio
子命令。MinIO官方文档首选使用krew安装
kubectl-minio
。为简化演练环境配置,笔者选择直接下载方式安装。1# https://docs.min.io/minio/k8s/deployment/deploy-minio-operator.html#install-the-minio-kubernetes-operator 2# 可根据需要在 https://github.com/minio/operator/releases 找到可执行文件文件地址,直接下载到本地$PATH目录中 3# 笔者本地电脑为`x86_64`架构`Linux`操作系统 4sudo curl -L https://github.com/minio/operator/releases/download/v5.0.14/kubectl-minio_5.0.14_linux_amd64 -o /usr/local/bin/kubectl-minio 5 6# 设置可执行文件的所有者和权限 7sudo chown root:root /usr/local/bin/kubectl-minio 8sudo chmod 755 /usr/local/bin/kubectl-minio 9 10# 验证是否可以正常运行 11kubectl minio version 12# Kubectl-Plugin Version: v5.0.14
-
初始化安装MinIO Operator
有关Operator模式的概念,可阅读Kubernetes官方文档中的Operator pattern了解更多。
1# --namespace minio-operator 安装MinIO Operator组件的命名空间,默认值为`minio-operator` 2kubectl minio init --namespace minio-operator
-
获取访问MinIO Operator的Token
1# --namespace minio-operator 安装MinIO Operator组件的命名空间 2kubectl --namespace minio-operator get secret console-sa-secret -o jsonpath="{.data.token}" | base64 --decode
-
访问MinIO Operator Console
可以通过设置本地代理的方式访问访问MinIO Operator Console。
1# --namespace minio-operator 安装MinIO Operator组件的命名空间 2kubectl minio proxy --namespace minio-operator 3 4# 访问MinIO Operator Console,获取MinIO最新版本 5curl http://localhost:9090/api/v1/check-version 6# {"latest_version":"minio/minio:RELEASE.2024-03-30T09-41-56Z"}
或通过配置Ingress访问MinIO Operator Console,配置方式参见配置Ingress入口规则。
-
升级MinIO Operator(可选)
当MinIO Operator发布更新版本时,可通过如下命令升级MinIO Operator。
1# 1. 使用默认容器镜像仓库 2kubectl apply -k github.com/minio/operator/\?ref\=v5.0.14 3 4# 2. 使用指定容器镜像仓库 5kubectl kustomize github.com/minio/operator/\?ref\=v5.0.14 \ 6 | sed -e 's|image: minio/operator|image: quay.io/choral-k8s/minio-operator|g' \ 7 | kubectl apply -f -
安装MinIO Tenant¶
本次演练中将MinIO Tenant安装至data-minio
命名空间,可根据需要替换。
-
创建MinIO Tenant
1# --namespace data-minio 安装MinIO Tenant组件的命名空间 2# --servers 3 MinIO服务副本数量 3# --volumes 9 存储卷数量 4# --capacity 20Gi 存储池容量 5# --storage-class local-path 存储类名称 6# --enable-audit-logs=false 禁用审计日志 7# --enable-prometheus=false 禁用指标采集 8# --disable-tls 禁用TLS 9# --image minio/minio:RELEASE.2024-03-30T09-41-56Z 指定MinIO组件版本 10kubectl minio tenant create minio --namespace data-minio \ 11 --servers 3 --volumes 9 --capacity 20Gi --storage-class local-path \ 12 --image minio/minio:RELEASE.2024-03-30T09-41-56Z \ 13 --disable-tls
上面的命令会输出类似下面的内容。
1Tenant 'minio' created in 'data-minio' Namespace 2 3 Username: TL6JVVW85A9L4MFI4985 4 Password: ILnRAe8cuEJUmbCxTAPOodM3Rhu5gvD4ulZJskEL 5 Note: Copy the credentials to a secure location. MinIO will not display these again. 6 7APPLICATION SERVICE NAME NAMESPACE SERVICE TYPE SERVICE PORT 8MinIO minio data-minio ClusterIP 80 9Console minio-console data-minio ClusterIP 9090
需要记录上述输出结果中的
Username
和Password
字段,用于验证访问MinIO服务。 -
升级MinIO Tenant(可选)
当MinIO发布更新版本时,可通过如下命令升级MinIO Tenant。
1# --image minio/minio:RELEASE.2024-03-30T09-41-56Z 指定MinIO组件版本 2kubectl minio tenant upgrade minio --namespace data-minio \ 3 --image minio/minio:RELEASE.2024-03-30T09-41-56Z
安装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.2024-03-30T15-29-52Z (commit-id=9f8147bf0e037730077a1b3baef25e53181099b0)
配置Ingress入口规则¶
-
创建TLS证书Secret
从已准备好的证书
key
文件和crt
文件创建Secret
。1kubectl create secret tls local-choral-io-tls -n data-minio \ 2 --key=local.choral.io.key --cert=local.choral.io.crt 3 4kubectl create secret tls local-choral-io-tls -n minio-operator \ 5 --key=local.choral.io.key --cert=local.choral.io.crt
-
创建MinIO Endpoint的入口规则
至少需要配置一个Endpoint地址,用于从集群外部访问MinIO Tenant中的对象。
本次演练使用
https://minio.local.choral.io
访问MinIO Endpoint。1cat <<EOF | kubectl apply -f - > /dev/null 2apiVersion: networking.k8s.io/v1 3kind: Ingress 4metadata: 5 name: minio 6 namespace: data-minio 7 annotations: 8 traefik.ingress.kubernetes.io/router.entrypoints: websecure 9spec: 10 tls: 11 - secretName: local-choral-io-tls 12 rules: 13 - host: minio.local.choral.io 14 http: 15 paths: 16 - path: / 17 pathType: Prefix 18 backend: 19 service: 20 name: minio 21 port: 22 number: 80 23EOF
-
创建MinIO Console的入口规则(可选)
若仅通过命令行工具
mc
管理MinIO资源,可跳过此步。本次演练使用
https://minio-console.local.choral.io
访问MinIO Console。1cat <<EOF | kubectl apply -f - > /dev/null 2apiVersion: networking.k8s.io/v1 3kind: Ingress 4metadata: 5 name: minio-console 6 namespace: data-minio 7 annotations: 8 traefik.ingress.kubernetes.io/router.entrypoints: websecure 9spec: 10 tls: 11 - secretName: local-choral-io-tls 12 rules: 13 - host: minio-console.local.choral.io 14 http: 15 paths: 16 - path: / 17 pathType: Prefix 18 backend: 19 service: 20 name: minio-console 21 port: 22 number: 9090 23EOF
-
创建MinIO Operator的入口规则(可选)
若仅通过命令行工具
kubectl-minio
管理MinIO资源,可跳过此步。本次演练使用
https://minio-operator.local.choral.io
访问MinIO Operator。1cat <<EOF | kubectl apply -f - > /dev/null 2apiVersion: networking.k8s.io/v1 3kind: Ingress 4metadata: 5 name: minio-console 6 namespace: minio-operator 7 annotations: 8 traefik.ingress.kubernetes.io/router.entrypoints: websecure 9spec: 10 tls: 11 - secretName: local-choral-io-tls 12 rules: 13 - host: minio-operator.local.choral.io 14 http: 15 paths: 16 - path: / 17 pathType: Prefix 18 backend: 19 service: 20 name: console 21 port: 22 number: 9090 23EOF
Bucket配置与应用¶
-
设置服务别名
1mc alias set choral-local https://minio.local.choral.io \ 2 TL6JVVW85A9L4MFI4985 \ 3 ILnRAe8cuEJUmbCxTAPOodM3Rhu5gvD4ulZJskEL
-
创建MinIO Bucket
1# 创建一个演示用Bucket,命名为`demo` 2mc mb choral-local/demo 3 4# 设置Bucket的访问策略,允许匿名下载 5mc policy 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 4# 删除Bucket中指定路径的单个对象 5mc rm choral-local/demo/html/hello.html 6# 删除Bucket中指定前缀的所有对象 7mc rm choral-local/demo/html/ --recursive --force 8# 删除Bucket,若Bucket不为空,默认禁止删除,可添加`--force`参数强制删除 9mc rb choral-local/demo # --force 10# 删除关联的所有存储卷 11kubectl delete pvc --namespace data-minio {0,1,2}-minio-ss-0-{0,1,2}
-
删除MinIO Tenant
1# --namespace data-minio 安装MinIO Tenant组件的命名空间 2kubectl minio tenant delete minio --namespace data-minio
-
删除MinIO Operator
1# --namespace minio-operator 安装MinIO Operator组件的命名空间 2kubectl minio delete --namespace minio-operator