前言
因为众所周知的原因,在使用Kubernetes和docker的时候会出现一些镜像无法拉取或者速度较慢的情况,错误信息类似以下:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.17.3: output: Error response from daemon ...
Failed to pull image "quay.io/coreos/flannel:v0.11.0-amd64": rpc error: code = Unknown desc = net/http: request canceled ...
之前一直使用的是Azure中国的镜像,经读者提醒,该镜像站已经不能用了,中科大的也不是很稳定。
接下来记录下使用阿里云从海外构建镜像的过程,虽然麻烦点,是能解决问题。
在阿里云创建镜像仓库
首先进入阿里云的容器镜像服务
没有创建命名空间的就创建一个,创建好了之后点击“创建仓库镜像”。这里我们拿kube-apiserver做例子。
点击下一步,选择代码源,作者这里用的是GitHub,已经绑定好了。记得勾选“海外机器构建”
准备github仓库
这是我仓库的地址:https://github.com/orccn/kube-dockerfile
仓库的每个目录下都有一个Dockerfile
├── README.md
├── coredns
│ └── Dockerfile
├── etcd
│ └── Dockerfile
├── kube-apiserver
│ └── Dockerfile
├── kube-controller-manager
│ └── Dockerfile
├── kube-proxy
│ └── Dockerfile
├── kube-scheduler
│ └── Dockerfile
└── pause
└── Dockerfile
kube-apiserver/Dockerfile 的内容只有一句话。
FROM k8s.gcr.io/kube-apiserver:v1.17.5
添加规则、构建
仓库准备ok后,创建完成,然后点击进入刚创建的仓库,点击左侧“构建”,然后点击右侧“添加规则”
规则添加完后,点击“立即构建”,可以看到下方的构建日志
到此时为止,一个镜像就已经生成了。然后就是到你需要的地方 docker pull
,docker tag
。
$ docker pull registry.cn-hangzhou.aliyuncs.com/k6s/kube-apiserver:v1.17.5
v1.17.5: Pulling from k6s/kube-apiserver
597de8ba0c30: Pull complete
e13a88fa950c: Pull complete
Digest: sha256:5ddc5c77f52767f2f225a531a257259228d74b32d8aac9cfe087251f998c42f3
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/k6s/kube-apiserver:v1.17.5
registry.cn-hangzhou.aliyuncs.com/k6s/kube-apiserver:v1.17.5
$ docker tag registry.cn-hangzhou.aliyuncs.com/k6s/kube-apiserver:v1.17.5 k8s.gcr.io/kube-apiserver:v1.17.5
其他的镜像如法炮制。
在Docker配置文件中配置加速器
$ vi /etc/docker/daemon.json
//添加以下内容
{
"registry-mirrors": ["https://hub-mirror.c.163.com"]
}