讓 K8S 在國內愉快的航行
前言
K8S(kubernetes) 日漸火爆,但由於出自Google,對國內的用戶及其的不友好。
而之前的 *.azk8s.cn
全能鏡像站,也於 2020年4月2日限制了對 Azure China 之外的 IP訪問,無疑又是雪上加霜 (很多生產集群應該開始跳腳了)。
https://github.com/Azure/container-service-for-azure-china/issues/58
ps: 這么大的事件,居然沒有提前公告。。。
今天我們來梳理一下,K8S在國內如何愉快的航行。
首先梳理一下國內 K8S 需要翻越的幾座山。
Linux Source
用於安裝 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 Source
Linux的源鏡像比較簡單,這邊推薦阿里的鏡像源。
Docker CE: https://developer.aliyun.com/mirror/docker-ce
Kubernetes: https://developer.aliyun.com/mirror/kubernetes
容器鏡像庫
鏡像庫是一個比較難找的資源,由於 *.azk8s.cn
的關閉目前 gcr.io
還沒有可替代資源,如大家有相關資源可以聯系我,我會添加到文章上。
Docker Hub
關於 Docker Hub 國內有比較多的加速鏡像源。
例如:
- 阿里雲鏡像加速器 (推薦, 需要注冊用戶)
- DaoCloud鏡像加速器
- 七牛雲鏡像加速器
- 加速器地址: https://reg-mirror.qiniu.com
使用方式
修改Docker的配置,為其添加 registry-mirrors ,需要重啟docker。
配置文件路徑位於 /etc/docker/daemon.json
{
"registry-mirrors": ["https://f1361db2.m.daocloud.io"], }
# 重啟docker systemctl daemon-reload && systemctl restart docker
說明
如果大家在生產環境使用,推薦優先使用阿里雲的鏡像加速器,雖然注冊麻煩了一些。
這是我目前用下來較為穩定的加速器 (此處極度懷念 dockerhub.azk8s.cn )。
quay.io
關於 quay.io 可用源很少,目前有如下鏡像站
- quay-mirror.qiniu.com (七牛雲, 推薦, 但沒有找到長期支持的聲明)
- quay.mirrors.ustc.edu.cn (中科大, 經常不可用, 不推薦)
使用方式
將鏡像中的 quay.io
替換為 quay-mirror.qiniu.com
,例如:
quay.io/prometheus/node-exporter:v0.18.1
# 替換成如下格式 quay-mirror.qiniu.com/prometheus/node-exporter:v0.18.1
說明
這兩個源都不是長期穩定
七牛雲目前可用, 但沒有找到任何官方說明長期支持。
中科大聲明有維護, 但測試后基本呈現不可用狀態。
gcr.io 和 k8s.gcr.io
先說結果,我沒有找到這兩個源的通用鏡像站。
這是最難的一部分,也花費了我很多時間。
k8s.gcr.io 是 gcr.io/google-containers 的別名,所以
k8s.gcr.io/<image>:<tag> == gcr.io/google-containers/<image>:<tag>
目前只有折中方案可以曲線救國,但這在使用上還是造來的不變,沒有穩定的鏡像同步途徑,如果你能FQ那么還好一些,如果不行很多K8S生態中的新興技術你可能很難體驗了 (tekton、knative)等,這種情況下你只能去國內鏡像站找別人傳上來的副本,如:阿里雲第三方鏡像、dockerhub等。
目前我找到了如下鏡像庫:
- googlecontainersmirror (我自己從 gcr.io 同步到Docker Hub的鏡像, 只包含核心的幾個鏡像和版本, 能保障K8S正常運行)
- registry.aliyuncs.com/google_containers (阿里雲第三方用戶上傳的鏡像,鏡像比較多)
使用方式
將鏡像中的 k8s.gcr.io
或 gcr.io/google-containers
替換為 registry.aliyuncs.com/google_containers
或 googlecontainersmirror
,例如:
registry.aliyuncs.com/google_containers
gcr.io/google-containers/kube-proxy:v1.18.0
# 替換為 registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0 # 替換為 registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0
googlecontainersmirror
gcr.io/google-containers/kube-proxy:v1.18.0
# 替換為 googlecontainersmirror/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0 # 替換為 googlecontainersmirror/kube-proxy:v1.18.0
宣稱可以提供鏡像的站點 (經測試全部不可用):
- gcr.mirrors.ustc.edu.cn (經測試不可用)
- gcr-mirror.qiniu.com (經測試不可用)
說明
- 為什么要自己同步鏡像而不直接使用現有的鏡像庫?
因為現有的鏡像庫我沒找到任何官方認證,應該是個人傳上去的,我們擔心跑在生產的K8S集群遭遇到安全問題。
對於大家來說都是第三方同步的鏡像大家可以自行選擇,如果是生產用還是推薦推到自己的鏡像庫來保障鏡像安全。 - googlecontainersmirror 在Docker Hub上拉取速度會不會很慢?
這邊取巧的利用了DockerHub加速器,拉取速度取決於加速器的速度,一般情況下很快。
總結
Linux軟件鏡像源
Docker CE: https://developer.aliyun.com/mirror/docker-ce
Kubernetes: https://developer.aliyun.com/mirror/kubernetes
容器鏡像源 (刪除線為不可用)
源 | 鏡像 |
---|---|
Docker Hub | https://<user_code>.mirror.aliyuncs.com, https://f1361db2.m.daocloud.io, https://reg-mirror.qiniu.com, |
k8s.gcr.io | googlecontainersmirror, registry.aliyuncs.com/google_containers, |
quay.io | quay-mirror.qiniu.com, |