私は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
_ readme _ で説明されているように、MinikubeからのDockerデーモンをeval $(minikube docker-env)
で再利用できます。
アップロードせずに画像を使用するには、次の手順に従います。
eval $(minikube docker-env)
で環境変数を設定しますdocker build -t my-image .
)で画像を構築してください。my-image
)imagePullPolicy
をNever
に設定すると、Kubernetesは画像のダウンロードを試みます。 重要な注意: 現在のシェルセッションの環境変数を設定するだけなので、使用する各端末でeval $(minikube docker-env)
を実行する必要があります。
@ 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
この回答はミニキューブに限られたものではありません。
ローカルレジストリを使用します。
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を使用せず、安全を確保するための努力をします。
受け入れられた回答に加えて、次のコマンドを使用してもともと望んでいたこと(run
コマンドを使用してデプロイメントを作成する)を達成できます。
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 --generator=run-pod/v1
私はKubernetes-devフォーラムでジェネレータに関する情報を見つけました:
kubectl run
を使用している場合は、デフォルトでimagePullPolicy
がAlways
に設定されているというマニフェストが生成されます。このコマンドを使用してimagePullPolicy
のIfNotPresent
を取得できます。これはminikube
に対して機能します。
kubectl run --image=<container> --generator=run-pod/v1
ダンローレン
https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM
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)
前の回答に追加するには、tarballイメージがある場合、イメージをローカルのdockerセットdocker image load -i /path/image.tar
にロードするだけです。忘れずに実行してくださいaftereval $(minikube docker-env)
、minikubeはローカルにインストールされたドッカーエンジンと画像を共有しないため。
Kubernetesのドキュメントから:
https://kubernetes.io/docs/concepts/containers/images/#updating-images
デフォルトのプルポリシーはIfNotPresentです。これにより、Kubeletはイメージが既に存在する場合、そのプルをスキップします。あなたがいつも引っ張ることを望むならば、あなたは以下のうちの1つをすることができます:
- コンテナのimagePullPolicyをAlwaysに設定します。
- use:使用する画像のタグとして最新のもの。
- alwaysPullImagesアドミッションコントローラを有効にします。
または、別の言い方をすると、:latestタグを使用すると、画像は常に引っ張られます。上記のようにeval $(minikube docker-env)
を使用する場合は、タグを使用しないか、ローカルイメージにタグを割り当てることで、Kubernetesがそれを強制的に引っ張らないようにすることができます。
ミニキューブ環境を設定した後で誰かがローカル環境に戻ってくることを考えている場合は、次のコマンドを使用します。
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を使用しないでください。物事を保護するための努力をしてください。