web-dev-qa-db-ja.com

ローカルレジストリ、minikubeを使用したKubernetesデプロイメントで「イメージをプルできませんでした」

同じイメージレジストリを使用する他のデプロイメントが期待どおりに機能しているにもかかわらず、ローカルレジストリを使用してdeploymentminikubeで「イメージのプルに失敗しました」エラーが発生します。

私のワークフローは、以下のようにdocker.collectionというDockerfileからイメージを構築することです。

$ minikube start --insecure-registry localhost:5000 --memory 4096
$ docker build . -f docker.collection -t localhost:5000/collection:latest -t localhost:5000/collection:dev
$ docker Push localhost:5000/collection
$ cat deployment.yaml | kubectl apply -f -

デプロイは必要に応じて作成されますが、ポッドは開始されず、minikubeダッシュボードに次のように表示されます。

イメージ「localhost:5000/collection:dev」のプルに失敗しました:rpcエラー:コード=不明desc =デーモンからのエラー応答:localhost:5000/collection:devのマニフェストが見つかりません

イメージの構築またはプッシュに問題があったと信じる理由はありません。ホストマシンでは、正常にプルできます...

$ docker pull localhost:5000/collection:dev
dev: Pulling from collection
Digest: sha256:8becfdd412f0b86ece8335aa5ee1aede75992d17f88739a28da5939eab28fde5
Status: Image is up to date for localhost:5000/collection:dev

他に何をチェックする必要がありますか?失敗の詳細を取得するにはどうすればよいですか?

さらなるデバッグ

私もチェックしました:

  • minikubeノードはlocalhost:5000に到達できます:
$ minikube ssh
$ ping localhost:5000
PING localhost:5000 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.126 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.041 ms
64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.058 ms
^C
--- localhost:5000 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.041/0.075/0.126 ms
$ 
  • イメージの最小限のrunは同じ方法で失敗します:kubectl run coll-test --image=localhost:5000/collection:devは同じイベントを生成します:
Events:
  Type     Reason     Age               From               Message
  ----     ------     ----              ----               -------
  Normal   Scheduled  24s               default-scheduler  Successfully assigned dev/coll-test-cf4467b8d-8vpdk to minikube
  Normal   BackOff    23s               kubelet, minikube  Back-off pulling image "localhost:5000/collection:dev"
  Warning  Failed     23s               kubelet, minikube  Error: ImagePullBackOff
  Normal   Pulling    7s (x2 over 23s)  kubelet, minikube  Pulling image "localhost:5000/collection:dev"
  Warning  Failed     7s (x2 over 23s)  kubelet, minikube  Failed to pull image "localhost:5000/collection:dev": rpc error: code = Unknown desc = Error response from daemon: manifest for localhost:5000/collection:dev not found
  Warning  Failed     7s (x2 over 23s)  kubelet, minikube  Error: ErrImagePull
  • イメージのエントリがリポジトリに存在します。
$ curl http://localhost:5000/v2/_catalog
{"repositories":["collection","foo","bar"]}

デプロイとDockerfile

# deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  namespace: dev
  name: collection
  labels:
    app: collection
spec:
  replicas: 1
  selector:
    matchLabels:
      app: collection
  template:
    metadata:
      labels:
        app: collection
    spec:
      containers:
      - name: collection
        image: "localhost:5000/collection:dev"
        command: ["bash", "./collection_entry.sh"]
        imagePullPolicy: Always
# docker.collection
FROM python:3

WORKDIR /code
COPY . /code/
RUN adduser --system --group --no-create-home celery
RUN mkdir /var/run/celery
RUN mkdir /var/log/celery
RUN chown celery:celery /var/run/celery
RUN chown celery:celery /var/log/celery
RUN chmod 755 /var/run/celery
RUN chmod 755 /var/log/celery

RUN pip3 -q install -r requirements.txt
USER celery

ENTRYPOINT ./collection_entry.sh
6
Ben

1)eval $(minikube docker-env)を実行する必要があります

2)MinikubeのDockerデーモンでイメージをビルドします

docker build -t collection .

3)ビルドタグのようにポッド仕様でイメージを設定します-collection

4)imagePullPolicyをNeverに設定します。それ以外の場合、Kubernetesはイメージをダウンロードしようとします。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  namespace: dev
  name: collection
  labels:
    app: collection
spec:
  replicas: 1
  selector:
    matchLabels:
      app: collection
  template:
    metadata:
      labels:
        app: collection
    spec:
      containers:
      - name: collection
        image: "collection"
        command: ["bash", "./collection_entry.sh"]
        imagePullPolicy: Never
6
A_Suh