部署K8S最大的難題是鏡像下載,在國內無FQ環境情況下很難從k8s.gcr.io等鏡像源里下載鏡像。
這種情況下正確做法是:
1. 直接指定國內鏡像代理倉庫(如阿里雲代理倉庫)進行鏡像拉取下載。
2. 成功拉取代理倉庫中的鏡像后,再將其tag打標簽成為k8s.gcr.io對應鏡像。
3. 最后再刪除從代理倉庫中拉取下來的鏡像。
4. 要確保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