Docker registry + minio

发布于:2024-05-06 ⋅ 阅读:(22) ⋅ 点赞:(0)

前言

此篇主要是记录测试Docker registry使用minio作为镜像存储的可用性,目的是一台节点掉线后,docker registry还能用,因为实际场景需要优先满足只有两台机器的场景,不足以以多节点多驱动的形式搭建minio,所以采用形式部署Minio。

思路:两个节点都配置VIP, 运行minio(站点复制), 配置docker resgistry(s3.regionendpoint http://vip:9000)

让节点掉线后,vip跳转,镜像仓库访问vip所在节点。

安装部署

minio安装(两个节点)

主要目的是测试Docker registry使用minio作为镜像存储的可用性,所以minio就简单运行

wget https: dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
mv minio /usr/local/bin/
  1. 运行Minio 单节点单驱动无需挂载目录,简易运行测试
groupadd -r minio-user
useradd -M -r -g minio-user minio-user
mkdir /data/minio
chown minio-user:minio-user /data/minio
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=adminadmin
minio server /data/minio
  1. 配置 Site Replication 我用的Console来配置

Keepalived配置vip(两个节点)

这里就不展开细讲,网上教程很多,这是我当时参考的博客

配置docker registry(两个节点)

docker load -i registry--2.8.3.tar.gz
mkdir /etc/docker/registry/
vim /etc/docker/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  delete:
    enabled: true  # 允许删除
  s3:
    #minio的用户名和密码
    accesskey: admin
    secretkey: adminadmin
    #region参数可随意
    region: us-east-1
    #对外访问地址,填写keepalived的vip地址
    regionendpoint: http://192.168.44.100: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

配置docker(两个节点)

  1. minio服务端创建Buckets: registry

  2. 修改/etc/docker/daemon.json

    {
      "insecure-registries": ["192.168.44.100:1080"],
      "exec-opts":["native.cgroupdriver=systemd"],
      "log-driver": "json-file",
      "log-opts": {
      "max-size": "100m"
      },
       "live-restore": true
    }
    

    加上了这句"insecure-registries": ["192.168.44.135:1080"],没有这句push时会出现下面提示

    The push refers to repository [192.168.44.135:1080/nginx]
    Get "https://192.168.44.135:1080/v2/": http: server gave HTTP response to HTTPS client
    
  3. 重启docker

    systemctl daemon-reload
    systemctl restart docker
    

运行

docker run -d -p 1080:5000 \
  -v /etc/docker/registry:/etc/docker/registry \
  --restart always \
  --name=registry registry:2.8.3

后记

站点复制有个缺陷,就是上传一个镜像到A后,在同步到B期间如果节点A宕机,此时docker pull就会出现问题,目前没有想到更好的解决办法,毕竟要优先保证两台机器下的镜像仓库的可用性,不满足多节点多驱动的节点数量。如果有大佬有好的解决方案,还望指点一二。