部署K8S最大的難題是鏡像下載,在國內無FQ環境情況下很難從k8s.gcr.io等鏡像源里下載鏡像。
這種情況下正確做法是:
- 直接指定國內鏡像代理倉庫(如阿里雲代理倉庫)進行鏡像拉取下載。
- 成功拉取代理倉庫中的鏡像后,再將其tag打標簽成為k8s.gcr.io對應鏡像。
- 最后再刪除從代理倉庫中拉取下來的鏡像。
- 要確保imagePullPolicy策略是IfNotPresent,即本地有鏡像則使用本地鏡像,不拉取!
或者將下載的鏡像放到harbor私有倉庫里,然后將image下載源指向harbor私倉地址。
# 阿里雲代理倉庫地址為:registry.aliyuncs.com/google_containers
# 比如下載
k8s.gcr.io/coredns:1.6.5
# 可以代理為:
registry.aliyuncs.com/google_containers/coredns:1.6.5
下面以阿里雲代理倉庫為例進行說明:
# 比如下載k8s.gcr.io/coredns:1.6.5鏡像,在國內默認是下載失敗的!
[root@k8s-vm01 coredns]# pwd
/opt/k8s/work/kubernetes/cluster/addons/dns/coredns
[root@k8s-vm01 coredns]# fgrep "image" ./*
./coredns.yaml: image: k8s.gcr.io/coredns:1.6.5
./coredns.yaml: imagePullPolicy: IfNotPresent
[root@k8s-vm03 ~]# docker pull k8s.gcr.io/coredns:1.6.5
Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
# 這時候去指定國內的阿里雲鏡像代理倉庫進行下載
[root@k8s-vm03 ~]# docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5
1.6.5: Pulling from google_containers/coredns
c6568d217a00: Pull complete
fc6a9081f665: Pull complete
Digest: sha256:608ac7ccba5ce41c6941fca13bc67059c1eef927fd968b554b790e21cc92543c
Status: Downloaded newer image for registry.aliyuncs.com/google_containers/coredns:1.6.5
registry.aliyuncs.com/google_containers/coredns:1.6.5
# 然后打tag,並刪除之前從代理倉庫下載的鏡像
[root@k8s-vm03 ~]# docker tag registry.aliyuncs.com/google_containers/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5
[root@k8s-vm03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/coredns 1.6.5 70f311871ae1 5 months ago 41.6MB
registry.aliyuncs.com/google_containers/coredns 1.6.5 70f311871ae1 5 months ago 41.6MB
[root@k8s-vm03 ~]# docker rmi registry.aliyuncs.com/google_containers/coredns:1.6.5
Untagged: registry.aliyuncs.com/google_containers/coredns:1.6.5
Untagged: registry.aliyuncs.com/google_containers/coredns@sha256:608ac7ccba5ce41c6941fca13bc67059c1eef927fd968b554b790e21cc92543c
[root@k8s-vm03 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/coredns 1.6.5 70f311871ae1 5 months ago 41.6MB
# 最終發現我們想要的k8s.gcr.io/coredns:1.6.5鏡像被成功下載下來了!
# 最后要記得:
# 確定imagePullPolicy鏡像下載策略是IfNotPresent,即本地有鏡像則使用本地鏡像,不拉取!
# 或者將下載好的鏡像放到harbor私有倉庫里,然后將image下載地址指向harbor倉庫地址。
以上總結三個步驟:
docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5
docker tag registry.aliyuncs.com/google_containers/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5
docker rmi registry.aliyuncs.com/google_containers/coredns:1.6.5