web-dev-qa-db-ja.com

Minikubeでローカルdocker画像を使用する方法

私はminikubeで使用したいいくつかのdocker画像を持っています。ローカルイメージを直接使用するのではなく、最初に同じイメージをアップロードしてからダウンロードする必要はありません。どうやってこれをするの?

私が試したもの:
1。私はこれらのコマンドを実行してみました(別々に、minikubeのインスタンスを何度も削除して新鮮に始めます)。

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never

出力:

NAME                    READY     STATUS              RESTARTS   AGE
hdfs-2425930030-q0sdl   0/1       ContainerCreating   0          10m

それはただ何らかの状態で立ち往生しますが、決して準備完了状態に到達しません。


2。私はレジストリを作成してからそれに画像を入れようとしましたが、それもうまくいきませんでした。私はそれを誤って行った可能性がありますが、このタスクを実行するための適切な手順が見つかりません。

ローカルkubernetesインスタンスでローカルdockerイメージを使用するための手順を入力してください。
OS:ubuntu 16.04
Docker:Dockerバージョン1.13.1、ビルド092cba3
クベルネテス:

Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-02-15T06:40:50Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/AMD64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"1970-01-01T00:00:00Z", GoVersion:"go1.7.1", Compiler:"gc", Platform:"linux/AMD64"}

誰かがこれを行うためにdocker-composeを使用する解決策を手助けすることができれば、それは素晴らしいことです。ありがとう。

編集する

eval $(minikube docker-envにロードされた画像:

REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
fluxcapacitor/jupyterhub                              latest              e5175fb26522        4 weeks ago         9.59 GB
fluxcapacitor/zeppelin                                latest              fe4bc823e57d        4 weeks ago         4.12 GB
fluxcapacitor/prediction-pmml                         latest              cae5b2d9835b        4 weeks ago         973 MB
fluxcapacitor/scheduler-airflow                       latest              95adfd56f656        4 weeks ago         8.89 GB
fluxcapacitor/loadtest                                latest              6a777ab6167c        5 weeks ago         899 MB
fluxcapacitor/hdfs                                    latest              00fa0ed0064b        6 weeks ago         1.16 GB
fluxcapacitor/sql-mysql                               latest              804137671a8c        7 weeks ago         679 MB
fluxcapacitor/metastore-1.2.1                         latest              ea7ce8c5048f        7 weeks ago         1.35 GB
fluxcapacitor/cassandra                               latest              3cb5ff117283        7 weeks ago         953 MB
fluxcapacitor/apachespark-worker-2.0.1                latest              14ee3e4e337c        7 weeks ago         3.74 GB
fluxcapacitor/apachespark-master-2.0.1                latest              fe60b42d54e5        7 weeks ago         3.72 GB
fluxcapacitor/package-Java-openjdk-1.8                latest              1db08965289d        7 weeks ago         841 MB
gcr.io/google_containers/kubernetes-dashboard-AMD64   v1.5.1              1180413103fd        7 weeks ago         104 MB
fluxcapacitor/stream-kafka-0.10                       latest              f67750239f4d        2 months ago        1.14 GB
fluxcapacitor/pipeline                                latest              f6afd6c5745b        2 months ago        11.2 GB
gcr.io/google-containers/kube-addon-manager           v6.1                59e1315aa5ff        3 months ago        59.4 MB
gcr.io/google_containers/kubedns-AMD64                1.9                 26cf1ed9b144        3 months ago        47 MB
gcr.io/google_containers/kube-dnsmasq-AMD64           1.4                 3ec65756a89b        5 months ago        5.13 MB
gcr.io/google_containers/exechealthz-AMD64            1.2                 93a43bfb39bf        5 months ago        8.37 MB
gcr.io/google_containers/pause-AMD64           
151
Kapil Gupta

_ readme _ で説明されているように、MinikubeからのDockerデーモンをeval $(minikube docker-env)で再利用できます。

アップロードせずに画像を使用するには、次の手順に従います。

  1. eval $(minikube docker-env)で環境変数を設定します
  2. MinikubeのDockerデーモン(例えばdocker build -t my-image .)で画像を構築してください。
  3. BuildタグのようにPod仕様に画像を設定します(例:my-image
  4. imagePullPolicyNeverに設定すると、Kubernetesは画像のダウンロードを試みます。

重要な注意: 現在のシェルセッションの環境変数を設定するだけなので、使用する各端末でeval $(minikube docker-env)を実行する必要があります。

228
svenwltr

@ svenwltrによる解決策に基づいて、私にとってうまくいったこと:

# Start minikube
minikube start

# Set docker env
eval $(minikube docker-env)

# Build image
docker build -t foo:0.0.1 .

# Run in minikube
kubectl run hello-foo --image=foo:0.0.1 --image-pull-policy=Never

# Check that it's running
kubectl get pods
101
jjinking

この回答はミニキューブに限られたものではありません。

ローカルレジストリを使用します。

docker run -d -p 5000:5000 --restart=always --name registry registry:2

画像に正しくタグを付けます。

docker tag ubuntu localhost:5000/ubuntu

Localhostは、レジストリコンテナを実行しているマシンのdns名に変更する必要があります。

画像をローカルレジストリにプッシュします。

docker Push localhost:5000/ubuntu

あなたはそれを引き戻すことができるはずです:

docker pull localhost:5000/ubuntu

ローカルレジストリを使用するようにyamlファイルを変更してください。

適切な場所にボリュームをマウントして、イメージをレジストリに保存することを検討してください。

更新:

eliが述べたように、 http を使うためにはローカルレジストリを安全でないものとして追加する必要があります(localhostを使う場合は適用されないかもしれませんが、ローカルホスト名を使う場合は適用されます)

本番環境ではhttpを使用せず、安全を確保するための努力をします。

84
Farhad Farahi

受け入れられた回答に加えて、次のコマンドを使用してもともと望んでいたこと(runコマンドを使用してデプロイメントを作成する)を達成できます。

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 --generator=run-pod/v1 

私はKubernetes-devフォーラムでジェネレータに関する情報を見つけました:

kubectl runを使用している場合は、デフォルトでimagePullPolicyAlwaysに設定されているというマニフェストが生成されます。このコマンドを使用してimagePullPolicyIfNotPresentを取得できます。これはminikubeに対して機能します。

kubectl run --image=<container> --generator=run-pod/v1

ダンローレン

https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM

7
chrisjones

1つの方法は、イメージをローカルに構築してから実行することです。

docker save imageNameGoesHere | pv | (eval $(minikube docker-env) && docker load)

minikube docker-envは、異なるユーザー/ Sudoで実行されている正しい情報を返さない場合があります。代わりにSudo -u yourUsername minikube docker-envを実行することができます。

次のようになります。

export DOCKER_TLS_VERIFY="1"
export DOCKER_Host="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/chris/.minikube/certs"
export DOCKER_API_VERSION="1.23"
# Run this command to configure your Shell:
# eval $(minikube docker-env)
6

前の回答に追加するには、tarballイメージがある場合、イメージをローカルのdockerセットdocker image load -i /path/image.tarにロードするだけです。忘れずに実行してくださいaftereval $(minikube docker-env) 、minikubeはローカルにインストールされたドッカーエンジンと画像を共有しないため。

2
Julien Nyambal

Kubernetesのドキュメントから:

https://kubernetes.io/docs/concepts/containers/images/#updating-images

デフォルトのプルポリシーはIfNotPresentです。これにより、Kubeletはイメージが既に存在する場合、そのプルをスキップします。あなたがいつも引っ張ることを望むならば、あなたは以下のうちの1つをすることができます:

  • コンテナのimagePullPolicyをAlwaysに設定します。
  • use:使用する画像のタグとして最新のもの。
  • alwaysPullImagesアドミッションコントローラを有効にします。

または、別の言い方をすると、:latestタグを使用すると、画像は常に引っ張られます。上記のようにeval $(minikube docker-env)を使用する場合は、タグを使用しないか、ローカルイメージにタグを割り当てることで、Kubernetesがそれを強制的に引っ張らないようにすることができます。

2
Jason

ミニキューブ環境を設定した後で誰かがローカル環境に戻ってくることを考えている場合は、次のコマンドを使用します。

eval $(docker-machine env -u)

this answer に基づく@Farhadの回答に追加

これは、ローカルレジストリをセットアップする手順です。

ローカルマシンでのセットアップ

ローカルマシンでホスト名を設定:/etc/hostsを編集してこの行を追加します

docker.local 127.0.0.1

ローカルレジストリを起動します(非デーモンモードを実行するには-dを削除します)。

docker run -d -p 5000:5000 --restart=always --name registry registry:2

画像に適切にタグを付けます:

docker tag ubuntu docker.local:5000/ubuntu

次に、画像をローカルレジストリにプッシュします。

docker Push docker.local:5000/ubuntu

イメージがプッシュされたことを確認します。

curl -X GET http://docker.local:5000/v2/ubuntu/tags/list

minikubeでのセットアップ

minukube sshでminikubeにssh

/etc/hostsを編集してこの行を追加します

docker.local <your Host machine's ip>

アクセスを確認:

curl -X GET http://docker.local:5000/v2/ubuntu/tags/list

プルしようとすると、httpアクセスエラーが発生する可能性があります。

安全でないアクセスを有効にする

このローカル設定でminkubeを使用することを常に計画している場合は、デフォルトで安全でないレジストリを使用するためにminikubeを作成します(既存のクラスターでは機能しません)。

minikube start --insecure-registry="docker.local:5000"

その他の手順は次のとおりです。

systemctl stop docker

docker sericeファイルを編集します:systemctl status dockerからパスを取得します

それは可能性があります :

/etc/systemd/system/docker.service.d/10-machine.confまたは/usr/lib/systemd/system/docker.service

このテキストを追加します(192.168.1.4をIPに置き換えます)

--insecure-registry docker.local:5000 --insecure-registry 192.168.1.4:5000

この行に

ExecStart =/usr/bin/docker daemon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --tlsverify --tlscacert /etc/docker/ca.pem- tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider = virtualbox --insecure-registry 10.0.0.0/24

systemctl daemon-reload
systemctl start docker

引っ張ってみてください:

docker pull docker.local:5000/ubuntu

次に、ローカルレジストリを使用するようにyamlファイルを変更します。

  containers:
    - name: ampl-Django
      image: dockerhub/ubuntu

  containers:
    - name: ampl-Django
      image: docker.local:5000/nymbleup

実稼働環境ではhttpを使用しないでください。物事を保護するための努力をしてください。

0
nithin