Kubernetes环境MinIO部署与应用

发布于2022-09-03,最后编辑于2024-10-25,全文约2547字,阅读时间约6分钟。

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

概述

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

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

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

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

组件版本

配置过程

安装MinIO Operator

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

  • 安装MinIO Operator

    kubectl-miniokubectl命令的插件,用于支持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
    

    需要记录上述输出结果中的UsernamePassword字段,用于验证访问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
    

参考资料