1 前言

在使用k8s的过程中,经常会遇到拉取k8s.gcr.io仓库的镜像,但这个仓库在国内是无法拉取相关镜像的。所以这里介绍使用阿里云结合github的方式进行镜像同步。

前提条件:

2 步骤

2.1 GitHub创建仓库

比如要这里要同步k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.1.1镜像。

在自己的GitHub账户上创建一个名为kube-state-metircs的项目,项目名称没什么影响。然后在项目中添加名为Dockerfile的文件,文件内容如下:

FROM k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.1.1

保存后提交。如下图所示

2.2 阿里云相关操作

登录阿里云容器镜像服务:https://cr.console.aliyun.com/

点击个人实例,进入下图

完成后点击下一步

关联完成后点击创建镜像仓库,然后跳到下一个页面,如下图

设置完成后点击确定,然后配置规则

构建规则添加完成后点击确定,在下图中点击立即构建

构建完成后在如下的位置可以找到镜像的使用方式

2.3 镜像使用指南

1 登录阿里云Docker Registry

$ docker login --username=your_login_username registry.cn-beijing.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

2 从Registry中拉取镜像

$ docker pull registry.cn-beijing.aliyuncs.com/vodaka_tux/kube-state-metrics-test:[镜像版本号]

3 将镜像推送到Registry

$ docker login --username=vodaka**** registry.cn-beijing.aliyuncs.com
$ docker tag [ImageId] registry.cn-beijing.aliyuncs.com/vodaka_tux/kube-state-metrics-test:[镜像版本号]
$ docker push registry.cn-beijing.aliyuncs.com/vodaka_tux/kube-state-metrics-test:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

4 选择合适的镜像仓库地址

从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。

如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-beijing.aliyuncs.com 作为Registry的域名登录。

5 示例

使用”docker tag”命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ docker images
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
$ docker tag 37bb9c63c8b2 registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816

使用 “docker push” 命令将该镜像推送至远程。

$ docker push registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816