Loading

使用image-syncer镜像同步工具将阿里云镜像仓库镜像迁移至私有Harbor

借助于阿里云开源的镜像同步工具image-syncer实现harbor及阿里云镜像仓库之间的镜像迁移

下载镜像同步工具

curl -fL "https://wiseo-generic.pkg.coding.net/wiseo/tools/image-syncer?version=latest" -o image-syncer && chmod 777 image-syncer 

编写配置文件auth.yaml,模板如下

<harbor地址>:
  username: <用户名>
  password: <密码>
<阿里云仓库地址>:
  username: <用户名>
  password: <密码>

获取当前集群所有使用的镜像

#获取命名空间,平台上运行的所有组件命名空间为随机字符串,
$  kubectl get ns
NAME                               STATUS   AGE
584226fbdeeb4ecea2d20abe40285467   Active   146d
90e1c7ecea554a418a6d22a7806fe7ef   Active   21d
arms-prom                          Active   277d
default                            Active   317d
kube-node-lease                    Active   317d
kube-public                        Active   317d
kube-system                        Active   317d
rainbond                           Active   317d
rbd-system                         Active   317d

#使用此命令分别指定不同的命名空间,将最终镜像输出至image.yaml文件中
kubectl get pods -n rbd-system -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c |awk  '{print $2}'|awk -F: '{print $1":"}' >> image.yaml

同步镜像

./image-syncer --proc=6 --auth=./auth.yaml --images=./images.yaml --namespace=boe --registry=<harbor仓库地址> --retries=3 --log=./log

参数说明

-h  --help       使用说明,会打印出一些启动参数的当前默认值
    --config     设置用户提供的配置文件所在路径,使用之前需要创建配置文件,默认为当前工作目录下的image-syncer.json文件
    --log        打印出来的log文件路径,默认打印到标准错误输出,如果将日志打印到文件将不会有命令行输出,此时需要通过cat对应的日志文件查看
    --namespace  设置默认的目标namespace,当配置文件内一条images规则的目标仓库为空,并且默认registry也不为空时有效,可以通过环境变量DEFAULT_NAMESPACE设置,同时传入命令行参数会优先使用命令行参数值
    --registry   设置默认的目标registry,当配置文件内一条images规则的目标仓库为空,并且默认namespace也不为空时有效,可以通过环境变量DEFAULT_REGISTRY设置,同时传入命令行参数会优先使用命令行参数值
    --proc       并发数,进行镜像同步的并发goroutine数量,默认为5
    --records    指定传输过程中保存已传输完成镜像信息(blob)的文件输出/读取路径,默认输出到当前工作目录,一个records记录了对应目标仓库的已迁移信息,可以用来进行连续的多次迁移(会节约大量时间,但不要把之前自己没执行过的records文件拿来用),如果有unknown blob之类的错误,可以删除该文件重新尝试
    --retries    失败同步任务的重试次数,默认为2,重试会在所有任务都被执行一遍之后开始,并且也会重新尝试对应次数生成失败任务的生成。一些偶尔出现的网络错误比如io timeout、TLS handshake timeout,都可以通过设置重试次数来减少失败的任务数量
posted @ 2021-01-26 15:19  亚里士多智  阅读(874)  评论(0编辑  收藏  举报