Kubernetesでimage pullに失敗したときの対処法|事前にDockerイメージをロードする方法
KubernetesでPodを作成するときに、image pullで失敗してしまうことがあります。
特に、以下のような環境ではよく発生します。
- ネット回線が遅い
- 検証環境(minikube / ローカル環境)を使用している
- 大きいDockerイメージを使用している
今回は、事前にDockerイメージをダウンロードしてからKubernetesを作成する方法を解説します。
記事の目次
image pullで失敗する原因
今回の環境では、mysql:8.0 のイメージ取得に失敗していました。
MySQLのイメージはサイズが大きいため、ネット回線が遅い環境ではダウンロードに時間がかかり、Podの作成に失敗することがあります。
ローカルPCでDockerイメージを事前にダウンロードする
まずはローカルPCでDockerイメージをダウンロードします。
docker pull mysql:8.0
イメージのダウンロード完了
ようやくダウンロードが完了しました。
ネット回線が遅い環境だったため、20分弱ほどかかりました。
マニフェストファイルを修正する
次に、ローカルにあるイメージを使用する設定を追加します。
imagePullPolicy: IfNotPresent を指定することで、
イメージがローカルに存在する場合は、外部から取得しなくなります。
マニフェストファイルに以下を追記します。
spec:
containers:
- name: mysql
image: mysql:8.0
imagePullPolicy: IfNotPresentKubernetesを再作成する
修正したマニフェストファイルを再適用します。
kubectl replace --force -f wordpress-db-statefulset.yaml
image pullが一瞬で完了!
今までは20分以上かかっていたimage pullが、約3秒で完了しました。
ネット回線が遅い環境では、事前にDockerイメージをダウンロードしておくことで、
Kubernetesの構築時間を大幅に短縮できます。
注意点(minikube環境)
minikubeを削除すると、事前にロードしたイメージも一緒に削除されます。
そのため、以下のような対策をしておくのがおすすめです。
- イメージをtarで保存しておく
- 必要なイメージを一覧で管理しておく
- 検証用スクリプトを作成しておく
- タグ:
- Kubenetes