Kubernetes k 8 s引き抜きミラー失敗最も簡単で最も完璧な解決方法[ERROR ImagePull]:failed to pull image k 8 s.gcr.io/kube-apiserver


に質問
国内のネットの原因のため、kubeadm initは動かないことができて、1カードは30分で、それからこのような問題を報告します:[ERROR ImagePull]:failed to pull image k 8 s.gcr.io/kube-apiserver:v1.18.5: output: 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@ubuntu:/home/c# kubeadm init
W0709 04:14:45.954974   70230 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.5
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.18.5: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.18.5: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.18.5: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.18.5: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.4.3-0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
        [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:1.6.7: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

k 8 sをダウンロードするからだ.gcr.ioのdockerミラーですが、国内では繋がりませんhttps://k8s.gcr.io/v2/.
他にも、VMware仮想マシンを使用してKubernetesを構築したMasterとWorkerノードの最終チュートリアル(1)の準備作業を参照してください.詳細な解決手順があります.次に本題に入ります.
解決策
アリクラウドミラーの使用
kubeadm initを実行するときにアリクラウドミラーのパラメータ--image-repository=registry.aliyuncs.com/google_containersを加えると、以下のようになります:(バージョンは自分の必要なものに変更されます)
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.18.5

もし問題があれば、次の複雑な方法を使ってもいいです.
DockerHubの他の倉庫から引き出す
ネット上で半日捜索して、多くの人は他の倉庫から1つ1つ引き出して更に改名すると言って、しかしこれらの教程の倉庫の名称は異なって、ある教程はすでにとても古くて、倉庫は何年も更新していないで、ここは直接漁を教えて、自分でどのように倉庫を探すかを学びます.名前を変えるのに疲れたので、スクリプトを書くことができます.
プロセスは次のとおりです.
まず、次のコマンドを使用して、必要なdockerミラー名を取得します.
kubeadm config images list

結果は次のとおりです.
k8s.gcr.io/kube-apiserver:v1.18.5
k8s.gcr.io/kube-controller-manager:v1.18.5
k8s.gcr.io/kube-scheduler:v1.18.5
k8s.gcr.io/kube-proxy:v1.18.5
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

まず、どこで引き出すべきかを見て、docker hubに行って、どこにkube-proxyなどのコンポーネントがあるかを探してdockerhub検索に入ることができます.https://hub.docker.com/search?q=kube-proxy&type=imageは最近の更新順で、結果は以下のように、ダウンロード回数10 k+を発見することができ、更新も頻繁な倉庫:Kubernetes k8s拉取镜像失败最简单最快最完美解决方法 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver_第1张图片
次に、スクリプトの作成を開始します.
vim pull_k8s_images.sh
set -o errexit
set -o nounset
set -o pipefail
##      
KUBE_VERSION=v1.18.5
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.3-0
DNS_VERSION=1.6.7

GCR_URL=k8s.gcr.io
##            
DOCKERHUB_URL=gotok8s
##       
images=(
kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION}
)
##             
for imageName in ${images[@]} ; do
  docker pull $DOCKERHUB_URL/$imageName
  docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
  docker rmi $DOCKERHUB_URL/$imageName
done

そして実行権限を付与
chmod +x ./pull_k8s_images.sh

実行:
./pull_k8s_images.sh

実行中にミラーを引き出し、完了後、docker imagesコマンドを使用してすべてのミラーを表示します.以下のようにします.Kubernetes k8s拉取镜像失败最简单最快最完美解决方法 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver_第2张图片ミラーがまだ取り外していない場合、例えば私が最初に使ったのはgotok 8 s倉庫ではなく、別の倉庫ですが、最新のetcdとcorednsは入っていません.だから、この2つは取り外していません.では、倉庫を探します.直接etcdを検索して、倉庫に入ってからTagをクリックして、あなたの必要なバージョンがあるかどうかを見て、以下の図:Kubernetes k8s拉取镜像失败最简单最快最完美解决方法 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver_第3张图片
ある場合は、この倉庫がcorelabと呼ばれている場合、vimコマンドを使用して実行可能ファイルを新規作成します.
vim pull_k8s_images2.sh

コンテンツの追加:
set -o errexit
set -o nounset
set -o pipefail

##                    
ETCD_VERSION=3.4.3-0
DNS_VERSION=1.6.7

GCR_URL=k8s.gcr.io
##          
DOCKERHUB_URL=corelab

##              
images=(
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION}
)

for imageName in ${images[@]} ; do
  docker pull $DOCKERHUB_URL/$imageName
  docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
  docker rmi $DOCKERHUB_URL/$imageName
done

そして実行権限を付与
chmod +x ./pull_k8s_images2.sh

実行:
./pull_k8s_images2.sh

これで大丈夫だと思います
結果
さらにkubeadm initを行い、今回は何の問題もありません(他の問題があれば、VMware仮想マシンを使用してKubernetesを構築するMasterとWorkerノードの最も完全なチュートリアル(1)の準備作業を参照してください.詳細な解決手順があります.)Kubernetes k8s拉取镜像失败最简单最快最完美解决方法 [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver_第4张图片