讓 K8S 在國內愉快的航行

前言

K8S(kubernetes) 日漸火爆,但因爲出自Google,對國內的用戶及其的不友好。
而以前的 *.azk8s.cn 全能鏡像站,也於 2020年4月2日限制了對 Azure China 以外的 IP訪問,無疑又是雪上加霜 (不少生產集羣應該開始跳腳了)。node

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

今天咱們來梳理一下,K8S在國內如何愉快的航行。
首先梳理一下國內 K8S 須要翻越的幾座山。git

Linux Source

用於安裝 docker、kubelet、kubectl、kubeadm 等軟件。github

容器鏡像庫

目前經常使用的K8S鏡像庫有docker

  1. docker.io (docker hub公共鏡像庫)
  2. gcr.io (Google container registry)
  3. k8s.gcr.io (等同於 gcr.io/google-containers)
  4. quay.io (Red Hat運營的鏡像庫)

國內的應對之法

Linux Source

Linux的源鏡像比較簡單,這邊推薦阿里的鏡像源。
Docker CE: https://developer.aliyun.com/mirror/docker-ce
Kubernetes: https://developer.aliyun.com/mirror/kubernetesjson

容器鏡像庫

鏡像庫是一個比較難找的資源,因爲 *.azk8s.cn 的關閉目前 gcr.io 尚未可替代資源,如你們有相關資源能夠聯繫我,我會添加到文章上。安全

Docker Hub

關於 Docker Hub 國內有比較多的加速鏡像源。
例如:測試

  1. 阿里雲鏡像加速器 (推薦, 須要註冊用戶)
  2. DaoCloud鏡像加速器
  3. 七牛雲鏡像加速器

使用方式

修改Docker的配置,爲其添加 registry-mirrors ,須要重啓docker。
配置文件路徑位於 /etc/docker/daemon.jsongoogle

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

{
  "registry-mirrors": ["https://f1361db2.m.daocloud.io"],
}
# 重啓docker
systemctl daemon-reload && systemctl restart docker

說明

若是你們在生產環境使用,推薦優先使用阿里雲的鏡像加速器,雖然註冊麻煩了一些。
這是我目前用下來較爲穩定的加速器 (此處極度懷念 dockerhub.azk8s.cn )。

quay.io

關於 quay.io 可用源不多,目前有以下鏡像站

  1. quay-mirror.qiniu.com (七牛雲, 推薦, 但沒有找到長期支持的聲明)
  2. 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等。

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

  1. googlecontainersmirror (我本身從 gcr.io 同步到Docker Hub的鏡像, 只包含核心的幾個鏡像和版本, 能保障K8S正常運行)
  2. registry.aliyuncs.com/google_containers (阿里雲第三方用戶上傳的鏡像,鏡像比較多)

使用方式

將鏡像中的 k8s.gcr.iogcr.io/google-containers 替換爲 registry.aliyuncs.com/google_containersgooglecontainersmirror,例如:

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

宣稱能夠提供鏡像的站點 (經測試所有不可用):

  1. gcr.mirrors.ustc.edu.cn (經測試不可用)
  2. gcr-mirror.qiniu.com (經測試不可用)

說明

  1. 爲何要本身同步鏡像而不直接使用現有的鏡像庫?

    由於現有的鏡像庫我沒找到任何官方認證,應該是我的傳上去的,咱們擔憂跑在生產的K8S集羣遭遇到安全問題。
    對於你們來講都是第三方同步的鏡像你們能夠自行選擇,若是是生產用仍是推薦推到本身的鏡像庫來保障鏡像安全。

  2. 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, 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
相關文章
相關標籤/搜索