5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ホストOS上に作成したDockerイメージからminikubeのpodリソース生成時に発生したエラーについて

Last updated at Posted at 2020-04-22

ホストOS上にDockerイメージを作成し、minikube仮想環境上にPodを作成しようとした際に ErrImageNeverPull が発生した問題の原因と解決方法をまとめました。

環境/再現方法

macOS上にDocker,minikubeをインストール

アプリケーション バージョン
Docker(Client,Server) 19.03.8
minikube v1.9.2
kubectl(Client) v1.18.2
kubectl(Server) v1.18.2
  • ホストOS上にイメージを作成
$ docker image build -t test .
  • イメージ作成結果
docker image ls | grep -B1 test
REPOSITORY                           TAG                 IMAGE ID            CREATED             SIZE
test                                 latest              c73609119b74        55 minutes ago      282MB
  • 利用したマニュフェストファイル
pod.yml
---
apiVersion: v1
kind: Pod
metadata:
  name: testpod
  namespace: default
  labels:
    app: hoge
    env: fuga
spec:
  containers:
  - name: testpod
    image: test
    imagePullPolicy: Never # hostOS上のイメージを取得する
  • マニュフェストファイルの適用
$ kubectl apply -f pod.yml
pod/testpod created

現象

  • 作成したpodのlog確認
$ kubectl get po
NAME      READY   STATUS              RESTARTS   AGE
testpod   0/1     ErrImageNeverPull   0          2m43s

$ kubectl logs testpod
Error from server (BadRequest): container "test" in pod "testpod" is waiting to start: ErrImageNeverPull

イメージの取得に失敗している。

原因

ホストOS上にDockerイメージ作成したがマニュフェストファイルからはminikubeにて作成された仮想環境上に存在するDockerイメージを取得しようとしたためImagePullエラーが発生。

期待される状態

local上のDockerイメージからPodを作成する。

解決方法

  • 作成失敗したPodを削除
$ kubectl delete -f pod.yml
  • DockerHub上にlocalにて作成したイメージファイルをPush
$ docker login
$ docker push <user名>/<image名>:<tag名> 
  • マニュフェストファイル内のimagePullPolicyをAlwaysかIfNotPresentに修正

imagePullPolicyの各設定値の挙動は以下の通り

imagePullPolicy: Never
localからイメージを取得

imagePullPolicy: Always
Pod作成時常時イメージをPull

imagePullPolicy: IfNotPresent 
ローカルでイメージが見つからない場合にのみイメージをPull

  • 再度マニュフェストファイルを適用
$ kubectl apply -f pod.yml
pod/testpod created
$ kubectl get po
NAME      READY   STATUS    RESTARTS   AGE
testpod   1/1     Running   0          22s

STATUSがRunningとなり正常にPodが作成できました。
やや強引ではありますが擬似的にlocal上のイメージファイルから作成したPodと同等のPodをminikube上に作成することができました。

追記

Podのspec.volumeMountsもminikube上を見に行くので同様の原因でエラーとなりました。
こちらはminikube環境にssh接続して環境操作する方法にて解決できました。
(参考資料)
stackoverflow

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?