文章

基于Kubernetes环境的minIO热备方案

1. 应用场景

该方案针对单节点minIO服务,如果已经部署了集群,已经实现了高可用和多副本,那么不需要该方案。

2. 方案原理

核心原理就是利用minIO客户端mc mirror命令把主节点的数据同步到备份节点。

大概有下面几个步骤:

2.1. 准备存储目录

在备份服务器上创建一个文件目录,用于存储minIO数据。例如:/var/opt/minio-bak。注意要修改一下这个目录的所有者,以确保minIO容器有权限访问。

chown -R 1001 /var/opt/minio-bak

2.2. 创建config map

创建一个config map,用于保存minio client的配置文件,该配置文件中设置了主备节点的连接信息,将其创建为别名,方便命令中使用。

apiVersion: v1
kind: ConfigMap
metadata:
  name: minio-client
  namespace: minio
data:
  config.json: |-
    {
            "version": "10",
            "aliases": {
                    "minio": {
                            "url": "http://minio:9000",
                            "accessKey": "user",
                            "secretKey": "password",
                            "api": "s3v4",
                            "path": "auto"
                    },
                    "minio-bak": {
                            "url": "http://minio-bak:9000",
                            "accessKey": "user",
                            "secretKey": "password",
                            "api": "s3v4",
                            "path": "auto"
                    }
            }
    }

注意:修改其中的user和password。

2.3. 创建deployment

deployment中重点是以下内容:

  • 绑定备份服务器节点

  • 绑定数据存储目录

  • Pod中添加两个容器,容器1采用minio镜像,如:bitnami/minio,容器2采用minio客户端镜像,如:bitnami/minio-client。

  • 容器2挂载配置文件,挂载位置为:/.mc/config.json

  • 容器2设置启动命令为:mc mirror --overwrite --remove --watch minio minio-bak

2.4. 创建ClusterIP service

主从节点都创建ClusterIP类型的service,端口包括9000/tcp和9001/tcp,名称与前面配置文件中URL一致。

License:  CC BY 4.0