Kubernetesでimage pullに失敗したときの対処法|事前にDockerイメージをロードする方法

kubenetesロゴ

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: IfNotPresent

Kubernetesを再作成する

修正したマニフェストファイルを再適用します。

kubectl replace --force -f wordpress-db-statefulset.yaml

image pullが一瞬で完了!

今までは20分以上かかっていたimage pullが、約3秒で完了しました。

ネット回線が遅い環境では、事前にDockerイメージをダウンロードしておくことで、
Kubernetesの構築時間を大幅に短縮できます。

注意点(minikube環境)

minikubeを削除すると、事前にロードしたイメージも一緒に削除されます。

そのため、以下のような対策をしておくのがおすすめです。

  • イメージをtarで保存しておく
  • 必要なイメージを一覧で管理しておく
  • 検証用スクリプトを作成しておく