基于minio存储,容器化部署高可用docker-registry
minio部署
根据部署方式不同,支持几种方式,二进制文件部署,docker容器部署,kubenetes集群部署
根据集群规划,可以分为单节点,分布式
本文档主要介绍后两种部署方法,docker容器部署分布式minio集群和kubenetes集群部署minio分布式集群
docker容器部署分布式minio集群
部署需求
环境:四台x86服务器
minio镜像
mc镜像
keepalived镜像
docker-registry镜像
占用宿主机端口:9000
磁盘:/minio ,四节点都需要创建
! ! 以下所有命令均需要在四个节点执行 ! !
创建持久化目录
#四节点四个磁盘路径 /minio 作为minio容器集群的存储路径
#config作为minio的配置路径
启动minio容器
#容器使用宿主机网络,容器9000端口映射宿主机9000端口,容器名为minio,访问密码为admin/xxxxxxxx,将宿主机目录/minio挂载至容器的/data目录作为存储路径,使用s3兼容模式启动minio
docker run --network=host -d -p 9000:9000 --name minio \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=xxxxxxxx" \
-v /minio:/data \
-v /etc/config:/root/.minio \
minio/minio:1.0.0 server --compat \
http://10.x.x.1:9000/data \
http://10.x.x.2:9000/data \
http://10.x.x.3:9000/data \
http://10.x.x.4:9000/data
注:
# --network=host
docker参数,容器使用宿主机网络
# -d
docker参数,后台运行容器
# -p 9000:9000
docker参数,将容器9000端口映射至主机9000端口
# -e
docker参数,传入环境变量MINIO_ACCESS_KEY和MINIO_SECRET_KEY,为minio登录的用户名和密码
# -v
docker参数,将本机/minio挂载为容器内的/data
# --compat
minio参数,启动兼容s3模式
下图为启动命令及成功启动后返回
验证
页面打开minio登录网址 http://10.x.x.1:9000、http://10.x.x.2:9000、http://10.x.x.3:9000、http://10.x.x.4:9000
输入用户名密码
登录后可看到minio管理页面
点击右下角红色加号按钮,创建test buket测试
上传文件测试后,查看本地存储
对应路径下已产生test文件夹和上传测试文件,minio启动成功
docker-registry对接minio部署
在创建好容器化minio的分布式集群后,开始部署docker-registry并对接minio
安装keepalived
创建keepalived配置文件(所用minio容器节点都需要执行)
创建检测脚本
cat>> /etc/keepalived/check.sh <<EOF
#!/bin/bash
a=`cat /etc/keepalived/keepalived.conf | grep -A 1 virtual_ipaddress | sed -n '2p'| awk -F"." '{print$1}'`
b=`cat /etc/keepalived/keepalived.conf | grep -A 1 virtual_ipaddress | sed -n '2p'| awk -F"." '{print$2}'`
c=`cat /etc/keepalived/keepalived.conf | grep -A 1 virtual_ipaddress | sed -n '2p'| awk -F"." '{print$3}'`
checkip=`echo ${a}.${b}.${c}`
ip=`ip a| grep $checkip | grep inet |sed -n '1p' | awk -F" " '{print$2}' | awk -F"/" '{print$1}'`
result=`curl http://${ip}:9000 | grep "Access Denied"`
if [ "$result" != "" ];then
exit 0
exit 1
EOF
主节点配置文件(可任选minio其一容器节点为主节点)
cat>> /etc/keepalived/keepalived.conf <<EOF
vrrp_script chk_apiserver {
script "/etc/keepalived/check.sh"
interval 5
fall 2
vrrp_instance MAIN {
#state区分主从节点master为主节点,backup为从节点
state MASTER
#interfacec 为vip绑定的宿主机网卡
interface eth0
#virtual_router_id同keepalived集群保持一致
virtual_router_id 92
#集群节点间通信时间
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass xxxxxxxx
#绑定vip地址,应使用未被占用的ip地址
virtual_ipaddress {
10.x.x.x
track_script {
chk_apiserver
EOF
从节点配置文件(可任选minio其一容器节点为主节点)
cat>> /etc/keepalived/keepalived.conf <<EOF
vrrp_script chk_apiserver {
script "/etc/keepalived/check.sh"
interval 5
fall 2
vrrp_instance MAIN {
#state区分主从节点master为主节点,backup为从节点
state BACKUP
#interfacec 为vip绑定的宿主机网卡
interface eth0
#virtual_router_id同keepalived集群保持一致
virtual_router_id 92
#集群节点间通信时间
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass xxxxxxxx
#绑定vip地址,应使用未被占用的ip地址
virtual_ipaddress {
10.x.x.x
track_script {
chk_apiserver
EOF
启动keepalived(所有节点执行)
docker run -d --name keepalived-minio --net=host --cap-add NET_ADMIN -v /etc/keepalived/:/etc/keepalived/ keepalived/keepalived:v1.2
检测keepalived+minio
使用代理后的vip:9000登录minio
通过vip可正常访问minio,并进行文件的上传下载
部署minio客户端mc
MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。
安装mc
创建mc执行脚本
mkdir /etc/mc/
cat >> /etc/mc/mc-init.sh << EOF
mc config host add s3 http://minio地址:9000 用户名 密码 S3v4
mc mb s3/registry
EOF
启动mc
docker run -it -v /etc/mc/:/etc/mc/ --name minio-mc --entrypoint=/bin/sh ,mc/mc:1.0.0 -c 'sh /etc/mc/mc-init.sh'
对接registry
创建docker-registry目录
创建docker-registry配置文件
touch /etc/registry/config.yml
cat>> /etc/registry/config.yml <<EOF
version: 0.1
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
#minio的用户名和密码
accesskey: admin
secretkey: xxxxxxxx
#region参数可随意
region: us-east-1
#对外访问地址,填写keepalived中对外暴露vip地址
regionendpoint: http://10.x.x.x:9000
#minio中的bucket名称
bucket: registry
encrypt: false
secure: false
v4auth: true
chunksize: 5242880
rootdirectory: /
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
EOF
选择启动镜像并启动
docker run -d -v /etc/registry:/etc/registry -p 5000:5000 --restart=always --name registry {{registry_image}}
功能验证
镜像可以成功上传,并且minio界面也出现对应docker存储,本地目录下也出现对应路径,验证测试成功。