0
点赞
收藏
分享

微信扫一扫

minio桶自动挂载

前言

  • minio单节点容器部署
  • s3fs本地挂载minio桶(单个)
  • linux环境 ubuntu or debain
  • python3.8.10

中间耦合过多。但是,linux开机自启(systemctl外还有别的实现方式)通过python脚本运行linux命令。在以后可能是一个不错的选择。 实现 通过s3fs将minio桶上存储的路径挂载到某个路径下。linux重启在minio启动后自动挂载。

minio

docker-compose

容器部署

version: '3'

services:
 minio:
    image: 'minio/minio:latest'
    container_name: minio
    restart: always
    command: server /data --console-address ":9001"
    environment:
      - MINIO_ROOT_USER=minioadmin
      - MINIO_ROOT_PASSWORD=minioadmin
    ports:
      - "9001:9001"
      - "9000:9000"

s3fs

安装

sudo apt install s3fs

配置

配置minio账号密码

echo AccessKey:SecretKey > xx/passwd-s3fs
chmod 600 xx/.passwd-s3fs

手动挂载

s3fs -o passwd_file=/xx/.passwd-s3fs -o url=http://ip:9000 -o allow_other -o no_check_certificate -o use_path_request_style -o umask=000 minio桶名称 挂载路径

linux服务器重启自动挂载minio桶

ubuntu/debian 适用

方法

systemctl开机自启,运行python脚本。

在路径**/usr/lib/systemd/system** or /etc/systemd/system 配置minio.service文件。

[Unit]
Description=minio
Documentation=empty

[Service]
Type=oneshot
PIDFile=/run/minio.pid
ExecStartPre=
# python脚本
ExecStart=/usr/bin/python3 xx/minio_bucket_monut.py.py
ExecReload=
ExecStop=
PrivateTmp=true

[Install]
WantedBy=multi-user.target

设置开启自启动

systemctl enable minio.service

python脚本

  • 监测minio容器状态为运行
  • 挂载minio桶
  • 可以重启部分容器
  • 脚本默认循环 600 次 每次等待1s

minio_bucket_monut.py

import subprocess
from time import sleep


def execute(command):
    """执行"""
    try:
        return subprocess.getoutput(command)
    except Exception as e:
        print(e)


def run_linux(
        minio_container_name,
        minio_pw_path,
        minio_url,
        bucket_name,
        mount_path,
        containers: [list, tuple] = None,
        sleep_num=1,
        count=600
):
    """
    linux 开机启动 python 脚本 监控 docker容器状态
    :param minio_container_name: minio 容器名称
    :param minio_pw_path:  minio 用户名密码和账号文件路径
    :param minio_url: minio服务url
    :param bucket_name: 挂载minio桶名称
    :param mount_path: 挂载地址
    :param containers: 重启容器名称
    :param sleep_num: 循环一次睡眠时间
    :param count: 循环次数

    sleep_num * count = 监听最长时间 s
    :return:
    """
    # sudo docker inspect --format '{{.Name}} {{.State.Running}} 容器名称' -> '/minio true'

    c1 = "sudo docker inspect --format '{{.State.Running}}' %s" % minio_container_name
    c2 = f"s3fs -o passwd_file={minio_pw_path} -o url={minio_url} -o allow_other -o no_check_certificate " \
         f"-o use_path_request_style -o umask=000 {bucket_name} {mount_path}"
    i = 0
    while i < count:
        res = execute(c1)
        if not res:
            break
        if res == 'true':
            # 挂载 s3fs
            execute(c2)
            # 重启 容器
            if containers is not None:
                for ite in containers:
                    execute(
                        'sudo docker restart %s' % ite
                    )
            break

    sleep(sleep_num)
    i += 1


if __name__ == '__main__':
    conf = {
        'minio_container_name': 'minio',
        'minio_pw_path': '/xx/.passwd-s3fs',
        'minio_url': 'http://ip:9000',
        'bucket_name': 'bucket_name',
        'mount_path': 'mount_path',
        'containers': ['容器名称1', '容器名称2'],
    }
    run_linux(**conf)
举报

相关推荐

0 条评论