Mam kilka obrazów dokerów, z którymi chcę korzystać minikube
. Nie chcę najpierw przesyłać, a następnie pobierać tego samego obrazu, zamiast bezpośrednio używać lokalnego obrazu. Jak mam to zrobic?
Rzeczy, które próbowałem:
1. Próbowałem uruchomić te polecenia (osobno, usuwając instancje minikube za każdym razem i zaczynając od nowa)
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never
Wynik :
NAME READY STATUS RESTARTS AGE
hdfs-2425930030-q0sdl 0/1 ContainerCreating 0 10m
Po prostu blokuje się na jakimś statusie, ale nigdy nie osiąga stanu gotowości.
2. Próbowałem utworzyć rejestr, a następnie umieścić w nim obrazy, ale to też nie zadziałało. Mogłem to zrobić niepoprawnie, ale nie mogę znaleźć odpowiednich instrukcji, aby wykonać to zadanie.
Podaj instrukcje dotyczące używania lokalnych obrazów dokerów w lokalnej instancji kubernetes.
System operacyjny: ubuntu 16.04
Docker: Docker wersja 1.13.1, kompilacja 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"}
Gdyby ktoś mógł mi pomóc w uzyskaniu rozwiązania wykorzystującego kompozycję dokującą, byłoby to niesamowite. Dzięki.
Edytować :
Obrazy załadowane 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
źródło
minikube start --disk-size 100g
. Innym rozwiązaniem byłoby usunięcie starych obrazów za pomocądocker images
idocker rmi
.eval $(minikube docker-env)
po zamknięciu terminalu, w którym pracujesz PRZED próbą odbudowania zdjęć ... po prostu spaliłem 6 godzin walki z obrazem, który nie aktualizował się w minikube ... wyglądał, jakby pakiet się nie aktualizował ... , naprawdę nie aktualizuję obrazu, do którego odnosi się minikube.IfNotPresent
oznacza, że wszystko co musimy zrobić, to ustawić zmienne środowiskowe.eval $(minikube docker-env -u)
Co dla mnie zadziałało, w oparciu o rozwiązanie @svenwltr:
źródło
Ta odpowiedź nie jest ograniczona do minikube!
Użyj rejestru lokalnego:
Teraz poprawnie oznacz swoje zdjęcie:
Zauważ, że localhost powinien zostać zmieniony na nazwę dns komputera z uruchomionym kontenerem rejestru.
Teraz wypchnij obraz do lokalnego rejestru:
Powinieneś być w stanie to cofnąć:
Teraz zmień plik yaml, aby korzystać z rejestru lokalnego.
Pomyśl o zamontowaniu woluminu w odpowiedniej lokalizacji, aby zachować obrazy w rejestrze.
aktualizacja:
jak stwierdził Eli, musisz dodać rejestr lokalny jako niezabezpieczony, aby używać http (może nie mieć zastosowania, gdy używasz localhost, ale dotyczy, jeśli używasz lokalnej nazwy hosta)
Nie używaj http w produkcji, staraj się zabezpieczyć wszystko.
źródło
<registryIP>:5000/ubuntu
Dodając do odpowiedzi @Farhad na podstawie tej odpowiedzi ,
Oto kroki, aby skonfigurować rejestr lokalny.
Konfiguracja na komputerze lokalnym
Ustaw nazwę hosta na komputerze lokalnym: edytuj,
/etc/hosts
aby dodać ten wierszTeraz uruchom rejestr lokalny (usuń -d, aby uruchomić tryb inny niż demon):
Teraz poprawnie oznacz swoje zdjęcie:
Teraz wypchnij obraz do lokalnego rejestru:
Sprawdź, czy obraz został wypchnięty:
Konfiguracja w minikube
ssh do minikube z:
minukube ssh
edytuj,
/etc/hosts
aby dodać ten wierszSprawdź dostęp:
Teraz, jeśli spróbujesz wyciągnąć, możesz dostać błąd dostępu http.
Włącz niepewny dostęp :
Jeśli zawsze planujesz używać Minkube z tą lokalną konfiguracją, utwórz minikube, aby domyślnie używać niezabezpieczonego rejestru (nie będzie działać na istniejącym klastrze).
w przeciwnym razie wykonaj poniższe kroki:
edytuj plik usługi dokera: pobierz ścieżkę z
systemctl status docker
może być :
dołącz ten tekst (zamień 192.168.1.4 na ip)
do tej linii
spróbuj pociągnąć:
Teraz zmień plik yaml, aby korzystać z rejestru lokalnego.
do
Nie używaj http w produkcji, staraj się zabezpieczyć wszystko.
źródło
Oprócz zaakceptowanej odpowiedzi możesz również osiągnąć to, czego pierwotnie chciałeś (tworzenie wdrożenia za pomocą
run
polecenia) za pomocą następującego polecenia:Informacje o generatorze znalazłem na forum Kubernetes-dev:
https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM
źródło
Jednym podejściem jest zbudowanie obrazu lokalnie, a następnie:
minikube docker-env
może nie zwrócić poprawnych informacji działających pod innym użytkownikiem / sudo. Zamiast tego możesz biegaćsudo -u yourUsername minikube docker-env
.Powinien zwrócić coś takiego:
źródło
docker save imageNameGoesHere > pv | (eval $(minikube docker-env) && docker load)
docker save imageNameGoesHere | (eval $(minikube docker-env) && docker load)
pracował dla mnieJeśli ktoś chce wrócić do środowiska lokalnego po ustawieniu env minikube, użyj następującego polecenia.
źródło
Z dokumentów kubernetes:
https://kubernetes.io/docs/concepts/containers/images/#updating-images
Lub przeczytaj inaczej: użycie: najnowszego znacznika zmusza obrazy do ciągnięcia. Jeśli użyjesz
eval $(minikube docker-env)
powyższego, to albo nie używaj żadnego znacznika, albo przypisaj znacznik do swojego lokalnego obrazu, możesz uniknąć Kubernetes próbującego go wymusić.źródło
Jest teraz dodatek do rejestru Minikube, jest to prawdopodobnie najłatwiejszy sposób. Oto jak z niego korzystać: https://minikube.sigs.k8s.io/docs/tasks/registry/insecure/
Pamiętaj, że miałem problemy z DNS, może to być błąd.
źródło
Prostszą metodą, która odpowiada na pierwotne pytanie „Jak korzystać z lokalnych obrazów dokerów w Minikube?”, Jest zapisanie obrazu w pliku tar i załadowanie go do minikube:
Następnie uruchomienie obrazu wiąże się z następującą komendą. Pamiętaj, aby dołączyć parametr „--image-pull-policy = Never”.
źródło
docker save
zsudo
, a następnie ustawićsudo chmod 664 my-image.tar
, aby była dostępna dla mojego bieżącego użytkownika.Aby dodać do poprzednich odpowiedzi, jeśli masz obraz tarballa, możesz po prostu załadować go do lokalnego zestawu dokerów obrazów.
docker image load -i /path/image.tar
Pamiętaj, aby go uruchomić późniejeval $(minikube docker-env)
, ponieważ minikube nie udostępnia zdjęć lokalnie zainstalowanemu silnikowi dokera.źródło
Inne odpowiedzi przypuszczają, że używasz minikube z VM, więc twoje lokalne obrazy nie są dostępne z minikube VM.
Jeśli używasz Minikube z
--vm-driver=none
, możesz łatwo ponownie użyć lokalnych obrazów, ustawiającimage_pull_policy
Nigdy:lub ustawienie
imagePullPolicy
pola dla cotainerów w odpowiednich.yaml
manifestach.źródło
Jednym z pomysłów byłoby lokalne zapisanie obrazu dokera, a następnie załadowanie go do minikube w następujący sposób:
Załóżmy na przykład, że masz już obraz puckel / docker-airflow.
Zapisz ten obraz na dysku lokalnym -
docker save puckel/docker-airflow > puckel_docker_airflow.tar
Teraz wejdź do minikube docker env -
eval $(minikube docker-env)
Załaduj ten lokalnie zapisany obraz -
docker load < puckel_docker_airflow.tar
To takie proste i działa jak urok.
źródło
Set the imagePullPolicy to Never
. Jeśli twój obraz jest oznaczony adresem np.us.icr.io/mydiv/my-service:v0.0.1
Wtedy wdrożenie spróbuje zdalnie pobrać ten obraz. Ponieważ już ręcznie skopiowałeś obraz, musisz powstrzymać k8s przed wyciągnięciem obrazu z adresu (rejestru kontenera), do którego nie ma dostępu.co jeśli możesz po prostu uruchomić K8 w vm dockera? istnieje natywna obsługa tego z nowszymi wersjami pulpitu dokującego ... wystarczy włączyć tę obsługę.
https://www.docker.com/blog/kubernetes-is-now-available-in-docker-desktop-stable-channel/ https://www.docker.com/blog/docker-windows-desktop-now- kubernetes /
jak się tego dowiedziałem:
podczas czytania dokumentacji dla sternika, dają ci krótki tutorial jak zainstalować minikube. ten samouczek instaluje minikube w vm, który jest inny / niezależny od dokera.
więc kiedy nadszedł czas, aby zainstalować moje tabele sterów, nie mogłem zmusić steru / k8 do ściągnięcia obrazów, które zbudowałem przy użyciu Dockera. tak doszedłem do tego pytania.
więc ... jeśli możesz żyć z dowolną wersją K8s dostarczaną z pulpitem dokera, i możesz żyć z nią, działając w dowolnym oknie dokera vm, to może to rozwiązanie jest nieco łatwiejsze niż niektóre inne.
zrzeczenie się odpowiedzialności: nie jestem pewien, w jaki sposób przełączanie między kontenerami Windows / Linux może mieć wpływ na cokolwiek.
źródło
Jest jeden esej i skuteczny sposób na przesłanie lokalnego obrazu Dockera bezpośrednio do minikube, który pozwoli zaoszczędzić czas na ponownym budowaniu obrazów w minikube.
Więcej informacji tutaj
Wszystkie możliwe metody przesyłania obrazów do minikube są wymienione tutaj: https://minikube.sigs.k8s.io/docs/handbook/pushing/
źródło
możesz albo ponownie użyć powłoki dokera, albo
eval $(minikube docker-env)
możesz użyć dźwigni wdocker save | docker load
poprzek powłok.źródło
tak naprawdę to, co się tutaj dzieje, twój Minikube nie może rozpoznać twojego demona dokera, ponieważ jest to niezależna usługa. Musisz najpierw ustawić środowisko minikube-dokera, używając poniższego polecenia, aby sprawdzić
Jeśli uruchomisz poniżej polecenia, pokaże, gdzie twój minikube szuka dokera.
Musisz ponownie zbudować obrazy po skonfigurowaniu Minikube docker-env, inaczej to się nie powiedzie.
źródło
znajduję tę metodę od ClickHouse Operator Build From Sources i pomaga i ratuje mi życie!
źródło
kroki do uruchomienia lokalnych obrazów dokera w kubernetes
1. eval $ (minikube -p minikube docker-env)
2. w pliku artefaktu, w sekcji specyfikacji -> pojemniki
dodaj imagePullPolicy: IfNotPresent
lub imagePullPolicy: Nigdy
3. następnie uruchom
kubectl create -f <filename>
źródło