dxawnw / Ferryman

镜像同步工具,主要用于将K8s镜像同步到国内个人仓库

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ferryman

​  由于国内受GWF影响无法直接访问谷歌gcr.io导致无法直接获取K8s系列镜像,虽有部分国内云厂商提供K8s镜像,但可能不包含quay.io的系列镜像,且部分docker.io镜像即使配置国内镜像加速器地址还是速度缓慢。

​  基于以上背景,开发出该镜像同步工具,主要用于将K8s镜像同步到国内个人仓库,从而获取被墙的镜像并提高镜像拉取速度。


功能

  • 全量:同步仓库下所有Tag

  • 限量:同步当下最新指定数量的Tag


同步信息

支持同步源

  • gcr.io
  • quay.io
  • docker.io

同步源对应地址

目标
k8s.gcr.io registry.cn-shenzhen.aliyuncs.com/kubernetes_aliyun/{image}:{tag}
quay.io registry.cn-shenzhen.aliyuncs.com/quayio_aliyun/{image}:{tag}
docker.io registry.cn-shenzhen.aliyuncs.com/dockerio_aliyun/{image}:{tag}

镜像拉取示例

:docker pull k8s.gcr.io/pause:2.0

:docker pull registry.cn-shenzhen.aliyuncs.com/kubernetes_aliyun/pause:2.0


同步列表

本项目已托管到GitHub Actions,以下列表镜像每隔6小时自动同步更新一次;

已同步镜像的版本号列表可查看history目录下对应txt文件。

镜像源 镜像
k8s.gcr.io kube-proxy
k8s.gcr.io kube-scheduler
k8s.gcr.io kube-controller-manager
k8s.gcr.io kube-apiserver
k8s.gcr.io etcd
k8s.gcr.io coredns
k8s.gcr.io pause
k8s.gcr.io kubernetes-dashboard-amd64
k8s.gcr.io metrics-server-amd64
quay.io flannel
quay.io nginx-ingress-controller
docker.io dashboard
docker.io jenkins
docker.io nexus3
docker.io sonarqube
docker.io gitlab-ce
docker.io gitlab-runner
docker.io traefik

文件说明

  • ferryman.py

    • 主脚本
  • items.yml

    • 存放需要同步的镜像列表,可根据自身需求修改。
    • limit字段用于限制每次更新版本数量,默认为9999,可根据自身需求修改。
  • history(目录)

    • 存放每个镜像的同步记录,程序会跳过已同步记录,首次使用时请先删除整个目录。

使用说明

  • 环境要求:Python 3.7
  1. 配置私有镜像仓库账号密码

    编辑ferryman.py修改以下内容为你的个人镜像仓库账号密码

    target_auth = {'username': 'Your username', 'password': 'Your password'}

    使用临时环境变量配置你的个人镜像仓库账号密码

    export TARGET_USER='Your username'
    export TARGET_PASSWORD='Your password'
  2. 配置私有镜像仓库地址

    编辑items.yml修改每个项目target指向你的个人镜像仓库(尾部要以“/”结束)

    kube-apiserver:
      source: k8s.gcr.io/
      target: registry.cn-shenzhen.aliyuncs.com/kubernetes_aliyun/
  3. 运行程序python ferryman.py


更新记录

  • 2020/05/10 初始化

  • 2020/05/11 重新封装docker-py的push方法,增加登录仓库验证失败提示与显示推送进度

  • 2020/05/17 重写核心部分,不向后兼容

    ​     1、重写Tag获取方法,改用时间进行排序、哈希+Tag进行去重

    ​     2、增加镜像缓存,提高相似镜像拉取速度

    ​     3、增加限制更新Tag数量,通过编辑items.yml文件limit字段,默认为9999

    ​     4、本地同步历史文件增加前缀便于区分

    ​     5、只拉取Linux平台类型镜像,排除Windows平台类型镜像


待更新计划

  1. 因为存放更新项目的YAML是字典结构,不支持重复Key,所以不能存在相同项目名,待支持。

流程图

以下图片可能因GWF原因无法正常显示

流程图

About

镜像同步工具,主要用于将K8s镜像同步到国内个人仓库


Languages

Language:Python 100.0%