Docker / Kubernetes 鏡像源不可用,教你幾招搞定它!

運維之美2019-09-12 01:18:09


由於眾所周知的原因, Docker 官方鏡像倉庫和 Google 鏡像倉庫在國內訪問速度很慢或者不可用。這樣就給我們在部署和使用 Kubernetes 時帶來了極大的不便。今天我們就來介紹幾種方法,可以讓你愉快的解決該問題。

既然是網絡方面的問題,解決該問題的思路就很簡單了,當然是使用國內可用的鏡像源。這裏為大家推薦兩個好用的國內鏡像源:Azure 中國鏡像源和中科大鏡像源。

Azure 中國鏡像源

  • Azure 中國鏡像源地址:http://mirror.azure.cn/

  • Azure 中國鏡像源 Github 地址:https://github.com/Azure/container-service-for-azure-china

  • 鏡像源配置説明:http://mirror.azure.cn/help/gcr-proxy-cache.html

中科大鏡像源

  • 中科大鏡像源地址:http://mirrors.ustc.edu.cn/

  • 中科大鏡像源 Github 地址:https://github.com/ustclug/mirrorrequest

  • 鏡像源配置説明:https://github.com/ustclug/mirrorrequest/issues/187

使用鏡像源加速 Docker.io 鏡像倉庫

hub.docker.com 是 Docker 官方鏡像倉庫,也是我們平時在使用 Docker 過程使用最多的一個鏡像倉庫。該鏡像倉庫平時拉取速度通常就只有幾十 Kb,非常的慢,使用起來嚴重影響了工作效率。

既然現在國內有鏡像源可用,我們當然直接使國內鏡像源便可。下面分別對其使用方法進行介紹。

  • 如果在 Docker 官方倉庫拉取的是官方鏡像

拉取方法類似如下:

$ docker pull xxx:yyy

使用中科大鏡像源,應該類似這樣拉取:

$ docker pull docker.mirrors.ustc.edu.cn/library/xxx:yyy

使用 Azure 中國鏡像源,應該類似這樣拉取:

$ docker pull dockerhub.azk8s.cn/library/xxx:yyy
  • 如果在 Docker 官方倉庫拉取的鏡像是私有倉庫

拉取方法類似如下:

$ docker pull xxx/yyy:zz

使用中科大鏡像源,應該類似這樣拉取:

$ docker pull docker.mirrors.ustc.edu.cn/xxx/yyy:zz

使用 Azure 中國鏡像源,應該類似這樣拉取:

$ docker pull dockerhub.azk8s.cn/xxx/yyy:zz
  • 演示一個使用鏡像源拉取的實例

下面我們以拉取 mysql:5.7 和 360cloud/wayne 為例:

# 使用中科大鏡像源 $ docker pull docker.mirrors.ustc.edu.cn/library/mysql:5.7$ docker pull docker.mirrors.ustc.edu.cn/360cloud/wayne
# 使用 Azure 中國鏡像源$ docker pull dockerhub.azk8s.cn/library/mysql:5.7$ docker pull dockerhub.azk8s.cn/360cloud/wayne

注:首次拉取時可能會有 Error:image library/mysql:5.7 not found 類似報錯,這説明鏡像源中沒有緩存該鏡像。這個屬於正常現像,因為加速鏡像都是先從官方鏡像倉庫進行拉取的,然後緩存到本地。遇到這種情況,你可以嘗試多拉取幾次即可。

使用鏡像源加速 gcr.io 鏡像倉庫

  • 如果拉取的 Google 鏡像倉庫中容器鏡像類似如下:

$ docker pull gcr.io/xxx/yyy:zzz

使用中科大鏡像源,應該類似這樣拉取:

$ docker pull gcr.mirrors.ustc.edu.cn/xxx/yyy:zzz

使用 Azure 中國鏡像源,應該類似這樣拉取:

$ docker pull gcr.azk8s.cn/xxx/yyy:zzz
  • 演示一個使用鏡像源拉取的實例

下面我們以拉取 gcr.io/kubernetes-helm/tiller:v2.9.1 為例:

# 使用中科大鏡像源 $ docker pull gcr.mirrors.ustc.edu.cn/kubernetes-helm/tiller:v2.9.1
# 使用 Azure 中國鏡像源$ docker pull gcr.azk8s.cn/kubernetes-helm/tiller:v2.9.1

使用鏡像源加速 k8s.gcr.io 鏡像倉庫

部署或使用 Kubernetes 時我們會使用到很多相關的鏡像,而這些鏡像通常會使用 k8s.gcr.io 這個鏡像倉庫。

其實 k8s.gcr.io 就是 gcr.io/google-containers 下面的容器鏡像,這樣我們也可以使用中科大鏡像源或者 Azure 中國鏡像源來對此進行加速。

  • 如果我們拉取的 Kubernetes 所需容器鏡像類似以下形式:

$ docker pull k8s.gcr.io/xxx:yyy# 相當於$ docker pull gcr.io/google-containers/xxx:yyy

使用中科大鏡像源,應該類似這樣拉取:

$ docker pull gcr.mirrors.ustc.edu.cn/google-containers/xxx:yyy

使用 Azure 中國鏡像源,應該類似這樣拉取:

$ docker pull gcr.azk8s.cn/google-containers/xxx:yyy
  • 演示一個使用鏡像源拉取的實例

下面我們以拉取 k8s.gcr.io/addon-resizer:1.8.3 為例:

# 使用中科大鏡像源 $ docker pull gcr.mirrors.ustc.edu.cn/google-containers/addon-resizer:1.8.3
# 使用 Azure 中國鏡像源$ docker pull gcr.azk8s.cn/google-containers/addon-resizer:1.8.3

使用鏡像源加速 quay.io 鏡像倉庫

部署或使用 Kubernetes 相關周邊組件或生態時我們經常會從 quay.io 鏡像倉庫拉取鏡像。quay.io 默認情況下在國內也是不可用的,同樣我們也可以通過中科大鏡像源和 Azure 中國鏡像源進行加速訪問。

  • 如果我們拉取的 quay.io 下所需容器鏡像類似以下形式:

$ docker pull quay.io/xxx/yyy:zzz

使用中科大鏡像源,應該類似這樣拉取:

$ docker pull quay.mirrors.ustc.edu.cn/xxx/yyy:zzz

使用 Azure 中國鏡像源,應該類似這樣拉取:

$ docker pull quay.azk8s.cn/xxx/yyy:zzz
  • 演示一個使用鏡像源拉取的實例

下面我們以拉取 quay.io/coreos/kube-state-metrics:v1.5.0 為例:

# 使用中科大鏡像源 $ docker pull quay.mirrors.ustc.edu.cn/coreos/kube-state-metrics:v1.5.0
# 使用 Azure 中國鏡像源$ docker pull quay.azk8s.cn/coreos/kube-state-metrics:v1.5.0

一些自動化工具

上面我們講解和演示瞭如何使用中科大和 Azure 中國鏡像源加速拉取鏡像的方法。不過這些方法都是手動的,還不夠方便。下面將介紹兩個小工具,讓你可以更加方便和快速的使用這些鏡像源。

docker-wrapper

一個 Python 編寫的工具腳本,可以替代系統的 Docker 命令,自動從 Azure 中國拉取鏡像並自動 Tag 為目標鏡像和刪除 Azure 鏡像,一氣呵成。

項目地址:https://github.com/silenceshell/docker_wrapper

docker-wrapper 安裝

$ git clone https://github.com/silenceshell/docker-wrapper.git$ sudo cp docker-wrapper/docker-wrapper.py /usr/local/bin/

docker-wrapper 使用

$ docker-wrapper pull k8s.gcr.io/kube-apiserver:v1.14.1$ docker-wrapper pull gcr.io/google_containers/kube-apiserver:v1.14.1$ docker-wrapper pull nginx$ docker-wrapper pull silenceshell/godaddy:0.0.2

azk8spull

一個 Shell 編寫的腳本,這個腳本功能和 docker-wrapper 類似。同樣可以自動從 Azure 中國拉取鏡像並自動 Tag 為目標鏡像和刪除 Azure 鏡像。

項目地址:https://github.com/xuxinkun/littleTools#azk8spull

azk8spull 安裝

$ git clone https://github.com/xuxinkun/littleTools$ cd littleTools$ chmod +x install.sh$ ./install.sh

azk8spull 使用

$ azk8spull quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.24.1$ azk8spull k8s.gcr.io/pause-amd64:3.1

參考文檔

  1. https://www.google.com

  2. https://ieevee.com/tech/2019/03/02/azure-gcr-proxy.html

  3. https://www.cnblogs.com/xuxinkun/p/11025020.html

  4. https://www.ilanni.com/?p=14534


你可能還喜歡

點擊下方圖片即可閲讀


50 個你必須掌握的 Kubernetes 面試題


https://hk.wxwenku.com/d/201357868