docker使用代理下载k8s官方镜像

How doses docker use proxy to download k8s official image

Posted by alovn on November 13, 2020

之前安装k8s版本是1.14.3,隔了一年左右新的版本号已经到了v1.19.4,今天打算把k8s升级到新版本,之前是用别人在docker hub中的镜像的image,也一年多没更新了,那么怎么能下载到官方的镜像呢?

k8s的镜像会从k8s.grc.io下载,可是由于某种不可明说的原因国内网络访问不到,那么只能用代理来下载到官方镜像了。我尝试了将HTTP_PROXY和HTTPS_PROXY设置到系统环境变量,可是并没有生效,网上搜索到的一些博客上的方法也都过时了,不过最终还是在官方文档中找到了解决方法。

文档上指出: Docker daemon 可以使用 HTTP_PROXY, HTTPS_PROXY, NO_PROXY 环境变量作为docker的代理参数,但是这些配置并不能配置到daemon.json中。如果需要使用 HTTP 或 HTTPS 代理,需要将参数配置到一个文件中。

创建配置文件

1
2
3
4
5
6
7
8
9
10
11
# 默认该文件夹并不存在,需要自己先创建

sudo mkdir -p /etc/systemd/system/docker.service.d

# 创建配置文件, 并加入以下配置(需要改成自己的配置)
sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com"

重新启动docker

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

重启后可以通过以下命令,查询环境变量是否生效:

1
2
3
sudo systemctl show --property=Environment docker
    
Environment=HTTP_PROXY=http://proxy.example.com:80 HTTPS_PROXY=https://proxy.example.com:443 NO_PROXY=localhost,127.0.0.1,docker-registry.example.com

下载k8s镜像

1
2
3
4
5
6
7
8
9
docker pull k8s.gcr.io/kube-apiserver:v1.19.4

v1.19.4: Pulling from kube-apiserver
b9cd0ea6c874: Pull complete 
4900e6b31207: Pull complete 
81975eb09f45: Pull complete 
Digest: sha256:1d42d9b81ee77529c96080a1bb96d16e1988076400d3cf9e03c1ab2ec3df3374
Status: Downloaded newer image for k8s.gcr.io/kube-apiserver:v1.19.4
k8s.gcr.io/kube-apiserver:v1.19.4

k8s的官方镜像下载成功了~,配置的代理生效了。可见最好的学习方式还是去阅读官方文档。就先这么记录一下,我要去升级我的环境去了~

Docker官网文档参考