Saya memiliki beberapa gambar buruh pelabuhan yang ingin saya gunakan minikube
. Saya tidak ingin terlebih dahulu harus mengunggah dan kemudian mengunduh gambar yang sama daripada hanya menggunakan gambar lokal secara langsung. Bagaimana saya melakukan ini?
Hal-hal yang saya coba:
1. Saya mencoba menjalankan perintah-perintah ini (secara terpisah, menghapus instance dari minikube dua kali dan mulai yang baru)
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never
Output:
NAME READY STATUS RESTARTS AGE
hdfs-2425930030-q0sdl 0/1 ContainerCreating 0 10m
Itu hanya terjebak pada beberapa status tetapi tidak pernah mencapai status siap.
2. Saya mencoba membuat registri dan kemudian memasukkan gambar ke dalamnya tetapi itu tidak berhasil. Saya mungkin telah melakukan itu secara tidak benar tetapi saya tidak dapat menemukan instruksi yang tepat untuk melakukan tugas ini.
Harap berikan instruksi untuk menggunakan gambar buruh pelabuhan lokal dalam contoh kubernet lokal.
OS: ubuntu 16.04
Docker: Docker versi 1.13.1, build 092cba3
Kubernetes:
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"}
Jika seseorang dapat membantu saya mendapatkan solusi yang menggunakan komposisi buruh pelabuhan untuk melakukan ini, itu akan luar biasa. Terima kasih.
Edit:
Gambar dimuat 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
sumber
minikube start --disk-size 100g
. Solusi lain adalah menghapus gambar lama dengandocker images
dandocker rmi
.eval $(minikube docker-env)
setelah menutup terminal Anda bekerja di SEBELUM Anda mencoba untuk membangun kembali gambar ... hanya membakar 6 jam berkelahi dengan gambar yang tidak memperbarui di minikube ... tampak seperti paket tidak memperbarui .. benar-benar tidak memperbarui gambar yang direferensikan minikube.IfNotPresent
yang berarti yang harus kita lakukan adalah mengatur variabel lingkungan.eval $(minikube docker-env -u)
Apa yang berhasil untuk saya, berdasarkan solusi oleh @svenwltr:
sumber
Jawaban ini tidak terbatas pada minikube!
Gunakan registri lokal:
Sekarang beri tag pada gambar Anda dengan benar:
Perhatikan bahwa localhost harus diubah menjadi nama mesin yang menjalankan register registri.
Sekarang dorong gambar Anda ke registri lokal:
Anda harus dapat menariknya kembali:
Sekarang ubah file yaml Anda untuk menggunakan registri lokal.
Pikirkan tentang pemasangan volume di lokasi yang sesuai untuk mempertahankan gambar pada registri.
memperbarui:
seperti yang dinyatakan Eli, Anda harus menambahkan registri lokal sebagai tidak aman untuk menggunakan http (mungkin tidak berlaku saat menggunakan localhost tetapi berlaku jika menggunakan nama host lokal)
Jangan gunakan http dalam produksi, berusahalah untuk mengamankan segalanya.
sumber
<registryIP>:5000/ubuntu
Menambahkan ke jawaban @ Farhad berdasarkan jawaban ini ,
Ini adalah langkah-langkah untuk mengatur registri lokal.
Pengaturan di mesin lokal
Atur nama host di mesin lokal: edit
/etc/hosts
untuk menambahkan baris iniSekarang mulai registry lokal (hapus -d untuk menjalankan mode non-daemon):
Sekarang beri tag pada gambar Anda dengan benar:
Sekarang dorong gambar Anda ke registri lokal:
Verifikasi bahwa gambar didorong:
Setup di minikube
ssh ke dalam minikube dengan:
minukube ssh
edit
/etc/hosts
untuk menambahkan baris iniVerifikasi akses:
Sekarang jika Anda mencoba menarik, Anda mungkin mendapatkan kesalahan akses http.
Aktifkan akses tidak aman :
Jika Anda selalu berencana untuk menggunakan minkube dengan pengaturan lokal ini maka buatlah minikube untuk menggunakan registri tidak aman secara default (tidak akan berfungsi pada kluster yang ada).
ikuti langkah-langkah di bawah ini:
edit file server buruh pelabuhan: dapatkan jalur dari
systemctl status docker
mungkin :
tambahkan teks ini (ganti 192.168.1.4 dengan ip Anda)
ke baris ini
coba tarik:
Sekarang ubah file yaml Anda untuk menggunakan registri lokal.
untuk
Jangan gunakan http dalam produksi, berusahalah untuk mengamankan segalanya.
sumber
Selain jawaban yang diterima, Anda juga dapat mencapai apa yang awalnya Anda inginkan (membuat penyebaran menggunakan
run
perintah) dengan perintah berikut:Saya menemukan informasi tentang generator di forum Kubernetes-dev:
https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM
sumber
Salah satu pendekatan adalah membangun gambar secara lokal dan kemudian melakukan:
minikube docker-env
mungkin tidak mengembalikan info yang benar yang berjalan di bawah pengguna / sudo yang berbeda. Sebaliknya Anda bisa larisudo -u yourUsername minikube docker-env
.Seharusnya mengembalikan sesuatu seperti:
sumber
docker save imageNameGoesHere > pv | (eval $(minikube docker-env) && docker load)
docker save imageNameGoesHere | (eval $(minikube docker-env) && docker load)
bekerja untuk sayaJika ada yang ingin kembali ke lingkungan lokal setelah mengatur minikube env, gunakan perintah berikut.
sumber
Dari kubernetes docs:
https://kubernetes.io/docs/concepts/containers/images/#updating-images
Atau baca cara lain: Menggunakan: tag terbaru memaksa gambar untuk selalu ditarik. Jika Anda menggunakan
eval $(minikube docker-env)
seperti yang disebutkan di atas, maka jangan gunakan tag apa pun, atau tetapkan tag ke gambar lokal Anda, Anda dapat menghindari Kubernetes yang mencoba menariknya dengan paksa.sumber
Sekarang ada addon Registry Minikube, ini mungkin cara termudah. Berikut ini cara menggunakannya: https://minikube.sigs.k8s.io/docs/tasks/registry/insecure/
Perhatikan bahwa saya memiliki masalah DNS, mungkin bug.
sumber
Metode sederhana yang menjawab pertanyaan asli "Bagaimana cara menggunakan gambar buruh pelabuhan lokal dengan Minikube?", Adalah menyimpan gambar ke file tar dan memuatnya ke dalam minikube:
Kemudian menjalankan gambar melibatkan perintah seperti berikut. Pastikan untuk memasukkan parameter "--image-pull-policy = Never".
sumber
docker save
dengansudo
, dan kemudian mengatursudo chmod 664 my-image.tar
untuk membuatnya tersedia untuk pengguna saya saat ini.Untuk menambah jawaban sebelumnya, jika Anda memiliki gambar tarball, Anda cukup memuatnya kepada Anda set buruh pelabuhan lokal gambar.
docker image load -i /path/image.tar
Harap ingat untuk menjalankannya setelaheval $(minikube docker-env)
, karena minikube tidak berbagi gambar dengan mesin docker yang dipasang secara lokal.sumber
Jawaban lain misalkan Anda menggunakan minikube dengan VM, sehingga gambar lokal Anda tidak dapat diakses dari minikube VM.
Jika Anda menggunakan minikube with
--vm-driver=none
, Anda dapat dengan mudah menggunakan kembali gambar lokal dengan mengaturimage_pull_policy
ke Never:atau mengatur
imagePullPolicy
bidang untuk cotainers dalam.yaml
manifes yang sesuai .sumber
Satu ide adalah menyimpan gambar buruh pelabuhan secara lokal dan kemudian memuatnya ke dalam minikube sebagai berikut:
Katakanlah, misalnya, Anda sudah memiliki gambar aliran udara puckel / buruh pelabuhan.
Simpan gambar itu ke disk lokal -
docker save puckel/docker-airflow > puckel_docker_airflow.tar
Sekarang masuk ke dalam minikube docker env -
eval $(minikube docker-env)
Muat gambar yang disimpan secara lokal -
docker load < puckel_docker_airflow.tar
Sederhana dan bekerja seperti pesona.
sumber
Set the imagePullPolicy to Never
. Jika gambar Anda ditandai dengan alamat misalnyaus.icr.io/mydiv/my-service:v0.0.1
maka penyebaran akan mencoba untuk menarik gambar ini dari jarak jauh. Karena Anda sudah menyalin gambar secara manual, Anda perlu menekan k8 agar tidak menarik gambar dari alamat (registry kontainer) yang tidak dapat diakses.bagaimana jika Anda bisa menjalankan k8 di dalam dock dock? ada dukungan asli untuk ini dengan versi desktop docker yang lebih baru ... Anda hanya perlu mengaktifkan dukungan itu.
https://www.docker.com/blog/kubernetes-is-now-available-in-docker-desktop-stable-channel/ https://www.docker.com/blog/docker-windows-desktop-now- kubernetes /
bagaimana saya menemukan ini:
saat membaca dokumen untuk helm, mereka memberi Anda tutorial singkat cara menginstal minikube. tutorial yang menginstal minikube di vm yang berbeda / terpisah dari buruh pelabuhan.
jadi ketika tiba saatnya untuk menginstal grafik helm saya, saya tidak bisa mendapatkan helm / k8 untuk menarik gambar yang saya buat menggunakan buruh pelabuhan. karena itulah saya tiba di sini untuk pertanyaan ini.
jadi ... jika Anda dapat hidup dengan versi k8 apa pun yang dilengkapi dengan desktop docker, dan Anda dapat menjalankannya dengan menjalankan apa pun yang dimiliki vm docker, maka mungkin solusi ini sedikit lebih mudah daripada yang lain.
disclaimer: tidak yakin bagaimana pergantian antar wadah windows / linux akan berdampak apa saja.
sumber
Ada satu esai dan cara efektif untuk mendorong gambar Docker lokal Anda langsung ke minikube, yang akan menghemat waktu dari membangun gambar di minikube lagi.
Lebih detail di sini
Semua metode yang memungkinkan untuk mendorong gambar ke minikube disebutkan di sini: https://minikube.sigs.k8s.io/docs/handbook/pushing/
sumber
Anda dapat menggunakan kembali shell docker, dengan
eval $(minikube docker-env)
, sebagai alternatif, Anda dapat memanfaatkandocker save | docker load
seluruh shell.sumber
sebenarnya apa yang terjadi di sini, Minikube Anda tidak dapat mengenali daemon buruh pelabuhan Anda karena ini adalah layanan independen. Anda harus terlebih dahulu mengatur lingkungan minikube-buruh pelabuhan menggunakan perintah di bawah ini untuk memeriksa
Jika Anda menjalankan perintah di bawah ini, itu akan menunjukkan di mana minikube Anda mencari buruh pelabuhan.
Anda harus membangun kembali gambar setelah Anda memasang minikube docker-env yang lain itu akan gagal.
sumber
saya menemukan metode ini dari ClickHouse Operator Build From Sources dan ini membantu dan menyelamatkan hidup saya!
sumber
langkah-langkah untuk menjalankan gambar buruh pelabuhan lokal di kubernetes
1. eval $ (minikube -p minikube docker-env)
2. di file artifact, di bawah bagian spesifikasi -> wadah
tambahkan imagePullPolicy: IfNotPresent
atau imagePullPolicy: Never
3. lalu jalankan
kubectl create -f <filename>
sumber