一、概述

MinIO 作为高性能对象存储,是与 Amazon S3 云存储服务兼容的 API,使用 MinIO 为机器学习、分析 和应用程序数据工作负载构建高性能基础架构。

对于 Kubernetes 环境,使用 MinIO Operator 实现 MinIO 部署和租户的创建。

MinIO Operator 是一个工具,该工具扩展了 k8s 的 api,可以通过 minio operator 在公有云或私有云 上来部署 MinIO Tenants。

二、组件版本

  • Kubernetes : v1.27.4
  • MinIO : RELEASE.2023-08-31T15-31-16Z
  • MinIO Operator : v5.0.7
  • MinIO Client : RELEASE.2023-08-30T08-02-26Z
  • v5.0.0 兼容性:Kubernetes Version 1.21.0 or later.

三、安装MinIO Operator

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

3.1 安装MinIO Operator

kubectl-minio 是 kubectl 命令的插件,用于支持 kubectl minio 子命令。

MinIO官方文档首选使用 krew 安装 kubectl-minio 。为简化演练环境配置,我们选择直接下载方式安装。

#https://docs.min.io/minio/k8s/deployment/deploy-minio-operator.html#install-the-minio-kubernetes-operator
#可根据需要在 https://github.com/minio/operator/releases 找到可执行文件文件地址,直接下载到本地$PATH目录中

#虚机为x86_64架构Linux操作系统
[root@master01 ~]# mkdir 15
[root@master01 ~]# cd 15
[root@master01 15]# 
sudo curl -L https://github.com/minio/operator/releases/download/v5.0.7/kubectl-minio_5.0.7_linux_amd64 -o /usr/local/bin/kubectl-minio

# 设置可执行文件的所有者和权限
[root@master01 15]# sudo chown root:root /usr/local/bin/kubectl-minio
[root@master01 15]# sudo chmod 755 /usr/local/bin/kubectl-minio

# 验证是否可以正常运行,观察到运行正常
[root@master01 15]# kubectl-minio version
v5.0.7

3.2 初始化安装MinIO Operator

更多有关初始化的参数,参考:https://min.io/docs/minio/kubernetes/upstream/reference/kubectl- minio-plugin/kubectl-minio-init.html

# --namespace minio-operator 安装MinIO Operator组件的命名空间,默认值为minio-operator
[root@master01 15]# kubectl minio init --namespace minio-operator

# 执行完上面指令后,如果在国内环境,可能因为镜像原因启动不起来,手动修改镜像为国内镜像
[root@master01 15]# kubectl edit deploy  console  -n minio-operator -oyaml
...
        image: registry.cn-hangzhou.aliyuncs.com/github_images1024/operator:v5.0.7
...

[root@master01 15]# kubectl edit deploy  minio-operator   -n minio-operator -oyaml
...
        image: registry.cn-hangzhou.aliyuncs.com/github_images1024/operator:v5.0.7
...

等待服务启动

[root@master01 15]# kubectl get all -n minio-operator
NAME                                  READY   STATUS    RESTARTS   AGE
pod/console-8679b8fbdd-9799m          1/1     Running   0          3m29s
pod/minio-operator-57567695f5-h86m9   1/1     Running   0          2m27s
pod/minio-operator-57567695f5-z2hm6   1/1     Running   0          2m27s

NAME               TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)             AGE
service/console    ClusterIP   192.168.195.125   <none>        9090/TCP,9443/TCP   14m
service/operator   ClusterIP   192.168.167.112   <none>        4221/TCP            14m
service/sts        ClusterIP   192.168.14.27     <none>        4223/TCP            14m

NAME                             READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/console          1/1     1            1           14m
deployment.apps/minio-operator   2/2     2            2           14m

NAME                                        DESIRED   CURRENT   READY   AGE
replicaset.apps/console-686884ff5b          0         0         0       14m
replicaset.apps/console-8679b8fbdd          1         1         1       3m29s
replicaset.apps/minio-operator-57567695f5   2         2         2       2m27s
replicaset.apps/minio-operator-599d6c9bbc   0         0         0       14m

访问 MinIO Operator Console 2 种方式(任选一种即可)

1)可以通过设置本地代理的方式访问访问MinIO Operator Console。

# --namespace minio-operator 安装MinIO Operator组件的命名空间
[root@master01 15]# kubectl minio proxy --namespace minio-operator

# 访问MinIO Operator Console,获取MinIO最新版本
[root@master01 15]# curl http://localhost:9090/api/v1/check-version
# {"latest_version":"minio/minio:RELEASE.2023-08-31T15-31-16Z"}

2)通过配置 Ingress 访问 MinIO Operator Console。(生产推荐)

[root@master01 15]# vim minio-ing.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
  name: minio-console-ing
  namespace: minio-operator
spec:
  ingressClassName: nginx
  rules:
  - host: minio.zhang-qing.com
    http:
      paths:
      - backend:
          service:
            name: console
            port:
              number: 9090
        path: /
        pathType: Prefix

# 应用
[root@master01 15]# kaf minio-ing.yaml

# 验证
[root@master01 15]# kgi -n minio-operator
NAME                CLASS   HOSTS                  ADDRESS     PORTS   AGE
minio-console-ing   nginx   minio.zhang-qing.com   10.0.0.11   80      4m31s

image-20250419162808868

获取访问 MinIO Operator 的 Token

# 获取访问所需的Token
[root@master01 15]# kubectl --namespace minio-operator get secret console-sa-secret -o jsonpath="{.data.token}" | base64 --decode

# 回显内容
eyJhbGciOiJSUzI1NiIsImtpZCI6InBremRseXZEOEJGVUNvem1GZ1p0cHJOSWNxVmRkNHVsa2JwVXR2Q3ltMDAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJtaW5pby1vcGVyYXRvciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJjb25zb2xlLXNhLXNlY3JldCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJjb25zb2xlLXNhIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMmY1OWY3YjEtN2JhZC00MzM5LThmYjYtNjI1YWEzNDY4NjkyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Om1pbmlvLW9wZXJhdG9yOmNvbnNvbGUtc2EifQ.SLJhsdp9m3Hg35LIV2DPViLU7TUsS7u9glVZa34gh8W8EsduGvsezrSbrs4eYHyJAgJMaz6JkHMrmCEWBJBGX9LS4LO3xWnU5NVpq35z9bKunnYcN_JNNg7D5XLBNlL0TISRBpoY-pM8-PIrBPU0owSDLYNRk-BBQ7pIoi0lUll5pDddezljfHu9VkR78X2Xh_-LKQTl_3cLE8xDlagpx1BUp8oMUJu-0hY4zYgampbW-8nhA370gIE7BX2WhugJQrU4M4vbocYwAvgLFIGcJBmvFlJ2KdGGvhAx18dv3mpTBUD_pCIgQ_p7UdNruodzONgyMfGVZeOfDj_-48Z_Eg

Day15-Minio存储-图8

升级 MinIO Operator(可选)

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

官方地址:https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/upg rade-minio-operator.html

# 1. 使用默认容器镜像仓库
kubectl apply -k github.com/minio/operator/\?ref\=v5.0.7

# 2. 使用指定容器镜像仓库
kubectl kustomize github.com/minio/operator/\?ref\=v5.0.7 \
| sed -e 's|image: minio/operator|image: quay.io/choral-k8s/minio-operator|g' \
| kubectl apply -f -

四、安装MinIO Tenant

用于在多租户环境中实现数据隔离、资源管理和安全性。

4.1 创建 StorageClass

[root@master01 15]# 
kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: minio-local-storage
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
EOF

注意:volumeBindingMode: WaitForFirstConsumer 必须要设置为 WaitForFirstConsumer 。

随机的绑定有可能导致,一个pod关联了不同主机的pv导致启动失败!!

[root@master01 15]# kubectl get sc | grep minio
minio-local-storage     kubernetes.io/no-provisioner   Retain          WaitForFirstConsumer   false                  8s

4.2 创建pv

对 MiniO 来说,使用 Local 类型的 pv 进行数据的持久化的存储。

在每个节点创建不同的目录,用于 local 类型的本地存储目录

# master01、master02、master03节点上创建目录
mkdir -p /data/minio/{pv1,pv2,pv3,pv4}

# master01、master02、master03节点上进行验证
tree /data/minio/

/data/minio/
├── pv1
├── pv2
├── pv3
└── pv4

我这里 3 个节点,一共 12 个 volume,每个节点 4 个pv;

路径 容量 PV名称 所在节点
/data/minio/pv1 10G master01-01 master01
/data/minio/pv2 10G master01-02 master01
/data/minio/pv3 10G master01-03 master01
/data/minio/pv4 10G master01-04 master01
/data/minio/pv1 10G master02-01 master02
/data/minio/pv2 10G master02-02 master02
/data/minio/pv3 10G master02-03 master02
/data/minio/pv4 10G master02-04 master02
/data/minio/pv1 10G master03-01 master03
/data/minio/pv2 10G master03-02 master03
/data/minio/pv3 10G master03-03 master03
/data/minio/pv4 10G master03-04 master03

通过以下的命令创建 Local 类型的 pv;

注意: storageClassName: minio-local-storage ,必须使用第一个步骤中的 storageclass,否则在创建集群的时候,pv和pvc的绑定就会有问题!

# values的值可以通过kubectl get node --show-labels |grep kubernetes.io/hostname进行查看
[root@master01 15]# kubectl get node --show-labels |grep kubernetes.io/hostname

# 应用
[root@master01 15]# 
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master01-01
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv1
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master01           

---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master01-02
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv2
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master01
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master01-03
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv3
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master01
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master01-04
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv4
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master01
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master02-01
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv1
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master02

---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master02-02
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv2
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master02
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master02-03
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv3
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master02
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master02-04
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv4
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master02
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master03-01
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv1
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master03

---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master03-02
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv2
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master03
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master03-03
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv3
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master03
---
apiVersion: v1
kind: PersistentVolume
metadata:
   name: master03-04
spec:
   capacity:
      storage: 10Gi
   volumeMode: Filesystem
   accessModes:
   - ReadWriteOnce
   persistentVolumeReclaimPolicy: Retain
   storageClassName: minio-local-storage
   local:
      path: /data/minio/pv4
   nodeAffinity:
      required:
         nodeSelectorTerms:
         - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
              - master03
EOF

每个pv都是使用local类型,节点亲和的方式和具体的节点进行绑定

[root@master01 15]# kubectl get pv,pvc |grep minio
persistentvolume/master01-01                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master01-02                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master01-03                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master01-04                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master02-01                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master02-02                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master02-03                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master02-04                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master03-01                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master03-02                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master03-03                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s
persistentvolume/master03-04                                10Gi       RWO            Retain           Available                                                         minio-local-storage            2m9s

4.3 创建命名空间

本次实战中将 MinIO Tenant 安装至 minio-tenant-1 命名空间,可根据需要替换。

[root@master01 15]# kubectl create ns minio-tenant-1

4.4 创建minio tenant集群

# --namespace data-minio 安装MinIO Tenant组件的命名空间
# --servers 3 MinIO服务副本数量
# --volumes 12 存储卷数量
# --capacity 20Gi 存储池容量
# --storage-class minio-local-storage 存储类名称
# --disable-tls 禁用TLS
# --image minio/minio:RELEASE.2023-08-31T15-31-16Z 指定MinIO组件版本

[root@master01 15]# 
kubectl minio tenant create minio-1 \
  --namespace minio-tenant-1 \
  --servers 3 \
  --volumes 12 \
  --capacity 120Gi \
  --storage-class minio-local-storage \
  --image registry.cn-hangzhou.aliyuncs.com/github_images1024/minio:RELEASE.2023-08-31T15-31-16Z \
  --disable-tls
  • 这里我们的集群有3个节点,--servers 3, 12个卷,每个pv 10g,就是120Gi的容器(capacity);
  • 注意:这里的 storageclass 这要指定 minio-local-storage。

创建后验证:

Tenant 'minio-1' created in 'minio-tenant-1' Namespace

  Username: <your-access-key> 
  Password: <your-secret-key> 
  Note: Copy the credentials to a secure location. MinIO will not display these again.

APPLICATION SERVICE NAME    NAMESPACE       SERVICE TYPE    SERVICE PORT 
MinIO       minio           minio-tenant-1  ClusterIP       80              
Console     minio-1-console minio-tenant-1  ClusterIP       9090  
  • 需要记录上述输出结果中的 Username 和 Password 字段,用于验证访问 MinIO 服务。

查看pod的状态:

[root@master01 15]# kubectl get all -nminio-tenant-1
NAME                 READY   STATUS    RESTARTS   AGE
pod/minio-1-ss-0-0   2/2     Running   0          38s
pod/minio-1-ss-0-1   2/2     Running   0          38s
pod/minio-1-ss-0-2   2/2     Running   0          38s

NAME                      TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)    AGE
service/minio             ClusterIP   192.168.181.149   <none>        80/TCP     39s
service/minio-1-console   ClusterIP   192.168.219.30    <none>        9090/TCP   39s
service/minio-1-hl        ClusterIP   None              <none>        9000/TCP   39s

NAME                            READY   AGE
statefulset.apps/minio-1-ss-0   3/3     38s

web 端查看 operator 中的集群状态信息

Day15-Minio存储-图9

当为health的时候,说明集群已经初始化

Day15-Minio存储-图10

通过命令端查看集群状态:

[root@master01 15]# kubectl minio tenant info minio-1
Tenant 'minio-1', Namespace 'minio-tenant-1', Total capacity 120 GiB

Current status: Initialized
MinIO version: registry.cn-hangzhou.aliyuncs.com/github_images1024/minio:RELEASE.2023-08-31T15-31-16Z
MinIO service: minio/ClusterIP (port 80)
Console service: minio-1-console/ClusterIP (port 9090)

POOL    SERVERS VOLUMES(SERVER) CAPACITY(VOLUME) 
0       3       4               10 GiB              

MinIO Root User Credentials:
MINIO_ROOT_USER="PXXA60NWAQER75517TPP"
MINIO_ROOT_PASSWORD="ianfx835THjSJB7cQGBBPNDfEwbxsf9G6Gwge7uW"

升级MinIO Tenant(可选)

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

# --image minio/minio:RELEASE.2023-08-31T15-31-16Z 指定MinIO组件版本
[root@master01 15]#
kubectl minio tenant upgrade minio \
  --namespace data-minio \
  --image minio/minio:RELEASE.2023-08-31T15-31-16Z

五、实战验证

5.1 开启 opsdata tenant 访问

  • 配置s3 Ingress入口规则:
# 定义资源
[root@master01 15]# vim s3-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
  name: minio-s3-ing
  namespace: minio-tenant-1
spec:
  ingressClassName: nginx
  rules:
  - host: s3.zhang-qing.com
    http:
      paths:
      - backend:
          service:
            name: minio
            port:
              number: 80
        path: /
        pathType: Prefix

# 应用
[root@master01 15]# kaf s3-ingress.yaml

# 验证
[root@master01 15]# kgi -n minio-tenant-1
NAME           CLASS   HOSTS               ADDRESS     PORTS   AGE
minio-s3-ing   nginx   s3.zhang-qing.com   10.0.0.11   80      25s

5.2 安装 MinIO Client

MinIO Client (mc) 是 Minio 提供访问和操作服务端的客户端工具。

它可以使用 ls,cat,cp,mirror,diff,find 等UNIX命令提供了一种替代方案, 它支持文件系统和兼 容Amazon S3 的云存储服务(AWS Signature v2和v4)。

官方地址:https://min.io/docs/minio/linux/reference/minio-mc.html

#可根据需要在https://dl.min.io/client/mc/release 找到可执行文件文件地址,直接下载到本地$PATH目录中
#虚机环境为x86_64架构Linux操作系统

[root@master01 15]# 
sudo curl -L https://dl.min.io/client/mc/release/linux-amd64/mc -o /usr/local/bin/mc

# 设置可执行文件的所有者和权限
[root@master01 15]# sudo chown root:root /usr/local/bin/mc
[root@master01 15]# sudo chmod 755 /usr/local/bin/mc

# 验证是否可以正常运行
[root@master01 15]# mc --version | head -1
mc version RELEASE.2025-04-08T15-39-49Z (commit-id=e929f89ceeedc48a45611382be9882db0bf1921d)

5.3 Bucket 配置与应用

  • 添加 minio cluster 别名信息(集群内 endpoint 为 svc 的地址、集群外 endpoint 则为 ingress 的域名)
[root@master01 15]#
mc alias set k8s-s3 http://<minio-endpoint> \
   <your-access-key> \
   <your-secret-key>

[root@master01 15]#
mc alias set k8s-s3-internal http://minio.minio-tenant-1.svc \
   <your-access-key> \
   <your-secret-key>
  • 创建MinIO Bucket
# 创建一个演示用Bucket,命名为`demo`
[root@master01 15]# mc mb k8s-s3/demo
Bucket created successfully `k8s-s3/demo`.

# 设置Bucket的访问策略,允许匿名下载
[root@master01 15]# mc anonymous set download k8s-s3/demo
Access permission for `k8s-s3/demo` is set to `download`
  • 创建和获取对象
# 创建一个示例文件`hello.html`
[root@master01 15]# echo "hello, world." > hello.html

# 将示例文件复制到Bucket中
[root@master01 15]# mc cp ./hello.html k8s-s3/demo/html/hello.html
/root/15/hello.html: 14 B / 14 B ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 57 B/s 0s

# 访问Bucket中的示例文件
[root@master01 15]# curl http://<minio-endpoint>/demo/html/hello.html
hello, world.

六、MinIO卸载和清理(谨慎操作!)

6.1 删除MinIO Bucket

# 列出演示用Bucket中的对象
mc ls k8s-s3/demo

# 删除Bucket中指定路径的单个对象
mc rm k8s-s3/demo/html/hello.html

# 删除Bucket中指定前缀的所有对象
mc rm k8s-s3/demo/html/ --recursive --force

# 删除Bucket,若Bucket不为空,默认禁止删除,可添加`--force`参数强制删除
mc rb k8s-s3/demo # --force

# 删除关联的所有存储卷
kubectl delete pvc --all -n minio-tenant-1
kubectl delete pv --all -n minio-tenant-1

6.2 删除MinIO Tenant

# --namespace minio-tenant-1 安装MinIO Tenant组件的命名空间
kubectl minio tenant delete minio-1 - namespace minio-tenant-1

6.3 删除MinIO Operator

# --namespace minio-operator 安装MinIO Operator组件的命名空间
kubectl minio delete --namespace minio-operator

七、问题汇总

在部署的过程中,启动 tenant 集群无法启动,经常报错:

  • reblance data...
  • 数据不同步...
  • 通讯异常等...

正常修复步骤:

  • 1)web 界面删除 Tenant,勾选删除PVC;
  • 2)删除这两个secret (minio-1-user-1, minio-1-env-configuration);
  • 3)删除所有的pv;
  • 4)删除底层创建的数据目录(/data/minio/pv{1,2,3,4});
  • 5)重新从创建 PV 步骤开始修复;