天天看點

讓 K8S 在國内愉快的航行

K8S(kubernetes) 日漸火爆,但由于出自Google,對國内的使用者及其的不友好。

而之前的 <code>*.azk8s.cn</code> 全能鏡像站,也于 2020年4月2日限制了對 Azure China 之外的 IP通路,無疑又是雪上加霜 (很多生産叢集應該開始跳腳了)。

https://github.com/Azure/container-service-for-azure-china/issues/58 ps: 這麼大的事件,居然沒有提前公告。。。

今天我們來梳理一下,K8S在國内如何愉快的航行。

首先梳理一下國内 K8S 需要翻越的幾座山。

用于安裝 docker、kubelet、kubectl、kubeadm 等軟體。

目前常用的K8S鏡像庫有

docker.io (docker hub公共鏡像庫)

gcr.io (Google container registry)

k8s.gcr.io (等同于 gcr.io/google-containers)

quay.io (Red Hat營運的鏡像庫)

Linux的源鏡像比較簡單,這邊推薦阿裡的鏡像源。

Docker CE: https://developer.aliyun.com/mirror/docker-ce

Kubernetes: https://developer.aliyun.com/mirror/kubernetes

鏡像庫是一個比較難找的資源,由于 <code>*.azk8s.cn</code> 的關閉目前 <code>gcr.io</code> 還沒有可替代資源,如大家有相關資源可以聯系我,我會添加到文章上。

關于 Docker Hub 國内有比較多的加速鏡像源。

例如:

阿裡雲鏡像加速器 (推薦, 需要注冊使用者)

注冊位址: https://cr.console.aliyun.com/cn/instances/mirrors

DaoCloud鏡像加速器

加速器位址: https://f1361db2.m.daocloud.io

七牛雲鏡像加速器

加速器位址: https://reg-mirror.qiniu.com

修改Docker的配置,為其添加 registry-mirrors ,需要重新開機docker。

配置檔案路徑位于 <code>/etc/docker/daemon.json</code>

官方文檔: https://docs.docker.com/registry/recipes/mirror/

如果大家在生産環境使用,推薦優先使用阿裡雲的鏡像加速器,雖然注冊麻煩了一些。

這是我目前用下來較為穩定的加速器 (此處極度懷念 dockerhub.azk8s.cn )。

關于 quay.io 可用源很少,目前有如下鏡像站

quay-mirror.qiniu.com (七牛雲, 推薦, 但沒有找到長期支援的聲明)

quay.mirrors.ustc.edu.cn (中科大, 經常不可用, 不推薦)

将鏡像中的 <code>quay.io</code> 替換為 <code>quay-mirror.qiniu.com</code>,例如:

這兩個源都不是長期穩定

七牛雲目前可用, 但沒有找到任何官方說明長期支援。

中科大聲明有維護, 但測試後基本呈現不可用狀态。

先說結果,我沒有找到這兩個源的通用鏡像站。

這是最難的一部分,也花費了我很多時間。

k8s.gcr.io 是 gcr.io/google-containers 的别名,是以 k8s.gcr.io/&lt;image&gt;:&lt;tag&gt; == gcr.io/google-containers/&lt;image&gt;:&lt;tag&gt;

目前隻有折中方案可以曲線救國,但這在使用上還是造來的不變,沒有穩定的鏡像同步途徑,如果你能FQ那麼還好一些,如果不行很多K8S生态中的新興技術你可能很難體驗了 (tekton、knative)等,這種情況下你隻能去國内鏡像站找别人傳上來的副本,如:阿裡雲第三方鏡像、dockerhub等。

目前我找到了如下鏡像庫:

googlecontainersmirror (我自己從 gcr.io 同步到Docker Hub的鏡像, 隻包含核心的幾個鏡像和版本, 能保障K8S正常運作)

鏡像内容: https://hub.docker.com/u/googlecontainersmirror

registry.aliyuncs.com/google_containers (阿裡雲第三方使用者上傳的鏡像,鏡像比較多)

将鏡像中的 <code>k8s.gcr.io</code> 或 <code>gcr.io/google-containers</code> 替換為 <code>registry.aliyuncs.com/google_containers</code> 或 <code>googlecontainersmirror</code>,例如:

宣稱可以提供鏡像的站點 (經測試全部不可用):

gcr.mirrors.ustc.edu.cn (經測試不可用)

gcr-mirror.qiniu.com (經測試不可用)

為什麼要自己同步鏡像而不直接使用現有的鏡像庫?

因為現有的鏡像庫我沒找到任何官方認證,應該是個人傳上去的,我們擔心跑在生産的K8S叢集遭遇到安全問題。 對于大家來說都是第三方同步的鏡像大家可以自行選擇,如果是生産用還是推薦推到自己的鏡像庫來保障鏡像安全。

googlecontainersmirror 在Docker Hub上拉取速度會不會很慢?

這邊取巧的利用了DockerHub加速器,拉取速度取決于加速器的速度,一般情況下很快。

鏡像

Docker Hub

https://&lt;user_code&gt;.mirror.aliyuncs.com, https://f1361db2.m.daocloud.io, https://reg-mirror.qiniu.com, dockerhub.azk8s.cn

gcr.io

gcr.azk8s.cn

k8s.gcr.io

googlecontainersmirror, registry.aliyuncs.com/google_containers, gcr.azk8s.cn/google-containers

quay.io

quay-mirror.qiniu.com, quay.mirrors.ustc.edu.cn, quay.azk8s.cn

mcr.microsoft.com

mcr.azk8s.cn