查看原文
其他

国内拉取google Kubernetes镜像

willblog K8S中文社区 2019-12-18

前言
国内可访问的镜像仓库
Docker Hub镜像仓库
https://hub.docker.com/
阿里云镜像仓库:
https://cr.console.aliyun.com
RedHat镜像仓库:
https://access.redhat.com/containers


国内无法访问的镜像仓库
google镜像仓库:
https://console.cloud.google.com/gcr/images/google-containers/GLOBAL
coreos镜像仓库:
https://quay.io/repository/


临时解决方法:


  • 在部署kubernetes集群时,需要从google镜像仓库获取kubernetes组件相关镜像,以及从coreos仓库获取flannel网络插件等镜像,但dockerhub或阿里云仓库基本能够搜索到他人上传的包含这2个仓库中的镜像,我们只需要拉取到本地以后改回默认的镜像tag即可。

  • 另外dockerhub对google仓库做了镜像mirror,因此可以在google镜像名称前加mirrorgooglecontainers,即可直接在dockerhub拉取google镜像,拉取到本地后同样改回google仓库默认tag即可。


例如拉取kube-apiserver-amd64:v1.13.2镜像使用如下格式即可:


# google镜像默认格式k8s.gcr.io/kube-apiserver:v1.13.2# dockerhub拉取镜像$ docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.13.2# 修改tag$ docker tag mirrorgooglecontainers/kube-apiserver-amd64:v1.13.2 k8s.gcr.io/kube-apiserver-amd64:v1.13.2# 成功拉取的镜像$ docker images | grep kube-apiservermirrorgooglecontainers/kube-apiserver-amd64 v1.13.2 177db4b8e93a 2 months ago 181MBk8s.gcr.io/kube-apiserver-amd64 v1.13.2 177db4b8e93a 2 months ago 181MB


从阿里云镜像仓库搜索并拉取


# 从阿里云镜像仓库拉取镜像$ docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.13.0# 修改镜像tag$ docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver-amd64:v1.13.0 k8s.gcr.io/kube-apiserver:v1.13.0


创建个人仓库
我们也可以在dockerhub或阿里云创建个人仓库,把需要的最新版本镜像从google仓库push到个人仓库,一般有几下几种方法:

1.购买云服务器
最简单的方法就是,购买1台能同时访问国外和国内网络的云服务器,使用docker login登录dockerhub或阿里云仓库,docker push命令推送上去然后再拉取到本地即可。
如果不想购买服务器又能够访问国外网络,建议使用google提供的cloud shell:
https://console.cloud.google.com/cloudshell
它类似一个永久免费的拥有5G存储空间的linux服务器,能够执行所有docker命令和bash命令,能够访问全球网络。


2.Travis CI推送镜像
使用travis CI+GitHub将镜像docker push到国内镜像仓库。


3.Github镜像构建
使用github的dockerfile构建功能,将镜像构建到国内仓库。
参考:https://blog.csdn.net/networken/article/details/85215714


Travis CI推送dokcer镜像
下面介绍第2种方法,使用travis CI+GitHub的方法将镜像拉取到阿里云或者dockehub。


创建github仓库
首先登录github创建一个仓库,名称自定义,仓库包含如下3个文件:


  • push-images.sh 脚本文件

  • imagepath.txt 镜像列表文件

  • .travis.yaml 自动构建文件


示例仓库:https://github.com/willzhang/DockerImages


push-images.sh脚本内容如下,主要从国外镜像仓库pull镜像,打tag,并push到阿里云或dockerhub.


#!/bin/bash
for imagepath in $(cat ./imagepath.txt)doimagename=$(echo $imagepath | awk -F '/' '{print $NF}')docker pull $imagepath
# push到阿里云仓库docker tag $imagepath registry.cn-hangzhou.aliyuncs.com/aliwill/$imagenamedocker push registry.cn-hangzhou.aliyuncs.com/aliwill/$imagename
# push到dockerhubdocker tag $imagepath willdockerhub/$imagenamedocker push willdockerhub/$imagenamedone

imagepath.txt主要包含国内无法拉取的镜像列表,注意必须为完整镜像路径和名称,示例如下:
gcr.io/google-containers/kube-apiserver-amd64:v1.12.0quay.io/external_storage/nfs-client-provisioner:latest


.travis.yaml文件主要监控github仓库的代码变动,当有代码变动时比如imagepath.txt写入新的镜像列表时将触发tarvis的自动构建,.travis.yaml文件内容如下:


language: bash
services:- docker
script:- docker login -u $ALI_USERNAME registry.cn-hangzhou.aliyuncs.com -p $ALI_PASSWORD- docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD- bash push-images.sh


这里需要登录阿里云或dockerhub才能执行docker push操作,其中$ALI_USERNAME这类变量在TravisCI管理界面定义好即可。


TravisCI配置


访问travis官网:https://www.travis-ci.org/, 使用github账号登录。


开启需要进行自动化构建的仓库即可:



另外需要点击右上角的more options —》settings选项,定义写在.travis.yaml中的账号密码等敏感参数。



当对github仓库执行git commit、git push操作时将自动触发构建,执行仓库中的脚本,这里的构建结果如下:


登录阿里云或dockerhub查看,imagepath.txt 列表中的镜像已经成功被push上来:
注意:push到阿里云的镜像默认为私有的,可以手动改为公开的。



日常拉取镜像方法:
修改imagepath.txt,写入需要拉取的镜像完整路径,保存后travis-CI监测到仓库代码变动,自动触发构建,几分钟后镜像就会被自动拉取到个人仓库。


参考:
https://blog.csdn.net/nklinsirui/article/details/80581286


作者:willblog
原文:https://blog.csdn.net/networken/article/details/84571373



--end--

K8S培训推荐

Kubernetes线下实战培训,采用3+1+1新的培训模式(3天线下实战培训,1年内可免费再次参加,每期前10名报名,可免费参加价值3600元的线上直播班;),资深一线讲师,实操环境实践,现场答疑互动,培训内容覆盖:Kubernetes集群搭建、Kubernetes设计、Pod、常用对象操作,Kuberentes调度系统、QoS、Helm、网络、存储、CI/CD、日志监控等。点击查看更多课程信息!成都:8月16-18日


推荐阅读

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存