Tengo varias imágenes acoplables con las que quiero usar minikube
. No quiero tener que cargar primero y luego descargar la misma imagen en lugar de usar la imagen local directamente. ¿Cómo hago esto?
Cosas que probé:
1. Intenté ejecutar estos comandos (por separado, eliminando las instancias de minikube en ambas ocasiones y comenzando de nuevo)
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never
Salida:
NAME READY STATUS RESTARTS AGE
hdfs-2425930030-q0sdl 0/1 ContainerCreating 0 10m
Simplemente se atasca en algún estado, pero nunca alcanza el estado listo.
2. Intenté crear un registro y luego poner imágenes en él, pero tampoco funcionó. Podría haberlo hecho incorrectamente, pero no puedo encontrar las instrucciones adecuadas para realizar esta tarea.
Proporcione instrucciones para usar imágenes locales de acoplador en la instancia local de kubernetes.
SO: ubuntu 16.04
Docker: Docker versión 1.13.1, compilación 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"}
Si alguien pudiera ayudarme a obtener una solución que use docker-compose para hacer esto, sería increíble. Gracias.
Editar:
Imágenes cargadas en 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
fuente
minikube start --disk-size 100g
. Otra solución sería eliminar imágenes antiguas condocker images
ydocker rmi
.eval $(minikube docker-env)
después de cerrar la terminal en la que está trabajando ANTES de intentar reconstruir imágenes ... solo quemé 6 horas peleando con una imagen que no se estaba actualizando en minikube ... parecía que un paquete no se estaba actualizando ... Realmente no estoy actualizando la imagen a la que Minikube hacía referencia.IfNotPresent
que significa que todo lo que tenemos que hacer es establecer las variables de entorno.eval $(minikube docker-env -u)
Lo que funcionó para mí, basado en la solución de @svenwltr:
fuente
¡Esta respuesta no se limita al minikube!
Use un registro local:
Ahora etiquete su imagen correctamente:
Tenga en cuenta que localhost debe cambiarse al nombre dns de la máquina que ejecuta el contenedor de registro.
Ahora empuje su imagen al registro local:
Debería poder retirarlo:
Ahora cambie su archivo yaml para usar el registro local.
Piense en el volumen de montaje en la ubicación adecuada para conservar las imágenes en el registro.
actualizar:
como dijo Eli, deberá agregar el registro local como inseguro para usar http (puede que no se aplique cuando se usa localhost pero se aplica si se usa el nombre de host local)
No use http en producción, haga el esfuerzo de asegurar las cosas.
fuente
<registryIP>:5000/ubuntu
Agregando a la respuesta de @Farhad basada en esta respuesta ,
Estos son los pasos para configurar un registro local.
Configuración en máquina local
Configurar el nombre de host en la máquina local: edite
/etc/hosts
para agregar esta líneaAhora inicie un registro local (elimine -d para ejecutar el modo no demonio):
Ahora etiquete su imagen correctamente:
Ahora empuje su imagen al registro local:
Verifique que se empuje la imagen:
Configuración en minikube
ssh en minikube con:
minukube ssh
editar
/etc/hosts
para agregar esta líneaVerificar acceso:
Ahora, si intenta tirar, es posible que obtenga un error de acceso http.
Habilitar acceso inseguro :
Si siempre planea usar minkube con esta configuración local, cree un minikube para usar el registro inseguro de forma predeterminada (no funcionará en el clúster existente).
de lo contrario, siga los pasos a continuación:
edite el archivo docker serice: obtenga la ruta de
systemctl status docker
puede ser :
agregue este texto (reemplace 192.168.1.4 con su ip)
a esta línea
intenta tirar:
Ahora cambie su archivo yaml para usar el registro local.
a
No use http en producción, haga el esfuerzo de asegurar las cosas.
fuente
Además de la respuesta aceptada, también puede lograr lo que deseaba originalmente (crear una implementación con el
run
comando) con el siguiente comando:Encontré la información sobre el generador en el foro Kubernetes-dev:
https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM
fuente
Un enfoque es construir la imagen localmente y luego hacer:
minikube docker-env
Es posible que no devuelva la información correcta que se ejecuta bajo un usuario / sudo diferente. En cambio, puedes corrersudo -u yourUsername minikube docker-env
.Debería devolver algo como:
fuente
docker save imageNameGoesHere > pv | (eval $(minikube docker-env) && docker load)
docker save imageNameGoesHere | (eval $(minikube docker-env) && docker load)
funcionó para míSi alguien está buscando regresar al entorno local después de configurar el minikube env, use el siguiente comando.
fuente
De los documentos de kubernetes:
https://kubernetes.io/docs/concepts/containers/images/#updating-images
O lea de la otra manera: el uso de: la última etiqueta obliga a las imágenes a extraerse siempre. Si usa lo
eval $(minikube docker-env)
que se mencionó anteriormente, entonces no use ninguna etiqueta o asigne una etiqueta a su imagen local, puede evitar que Kubernetes intente tirar de ella a la fuerza.fuente
Ahora hay un complemento de Registro Minikube, esta es probablemente la forma más fácil. Aquí está cómo usarlo: https://minikube.sigs.k8s.io/docs/tasks/registry/insecure/
Tenga en cuenta que tuve problemas de DNS, podría ser un error.
fuente
Un método más simple que responde a la pregunta original "¿Cómo usar imágenes locales de acoplador con Minikube?", Es guardar la imagen en un archivo tar y cargarla en minikube:
Luego, ejecutar la imagen implica un comando como el siguiente. Asegúrese de incluir el parámetro "--image-pull-policy = Never".
fuente
docker save
consudo
, y después fijarsudo chmod 664 my-image.tar
para que esté disponible para mi usuario actual.Para agregar a las respuestas anteriores, si tiene una imagen tarball, simplemente puede cargarla en su conjunto local de imágenes de docker
docker image load -i /path/image.tar
. Recuerde ejecutarla despuéseval $(minikube docker-env)
, ya que minikube no comparte imágenes con el motor de docker instalado localmente.fuente
Otras respuestas suponen que usa minikube con VM, por lo que sus imágenes locales no son accesibles desde minikube VM.
En caso de que use minikube con
--vm-driver=none
, puede reutilizar fácilmente las imágenes locales configurandoimage_pull_policy
Nunca:o establecer el
imagePullPolicy
campo para cotainers en los.yaml
manifiestos correspondientes .fuente
Una idea sería guardar la imagen del acoplador localmente y luego cargarla en minikube de la siguiente manera:
Digamos, por ejemplo, que ya tiene una imagen puckel / docker-airflow.
Guarde esa imagen en el disco local.
docker save puckel/docker-airflow > puckel_docker_airflow.tar
Ahora entra en minikube docker env -
eval $(minikube docker-env)
Cargue esa imagen guardada localmente
docker load < puckel_docker_airflow.tar
Es así de simple y funciona como un encanto.
fuente
Set the imagePullPolicy to Never
. Si su imagen está etiquetada con una dirección, por ejemplous.icr.io/mydiv/my-service:v0.0.1
, una implementación intentará extraer esta imagen de forma remota. Como ya ha copiado manualmente la imagen, debe evitar que k8s extraiga la imagen de una dirección (registro de contenedor) a la que no puede acceder.¿Qué pasaría si pudieras ejecutar k8s dentro de Docker's VM? Hay soporte nativo para esto con las versiones más recientes de Docker Desktop ... solo necesita habilitar ese soporte.
https://www.docker.com/blog/kubernetes-is-now-available-in-docker-desktop-stable-channel/ https://www.docker.com/blog/docker-windows-desktop-now- kubernetes /
cómo descubrí esto:
mientras lee los documentos de helm, le dan un breve tutorial sobre cómo instalar minikube. ese tutorial instala minikube en una máquina virtual que es diferente / separada de Docker.
así que cuando llegó el momento de instalar mis gráficos de timón, no pude hacer que helm / k8s extrajera las imágenes que había construido con Docker. así es como llegué aquí a esta pregunta.
entonces ... si puede vivir con cualquier versión de k8 que venga con el escritorio de Docker, y puede vivir con ella ejecutándose en cualquier Docker vm, entonces tal vez esta solución sea un poco más fácil que algunas de las otras.
Descargo de responsabilidad: no estoy seguro de cómo cambiar entre los contenedores de Windows / Linux afectaría algo.
fuente
Hay un ensayo y una forma efectiva de llevar su imagen local de Docker directamente al minikube, lo que le ahorrará tiempo al construir las imágenes en minikube nuevamente.
Más detalles aquí
Todos los métodos posibles para enviar imágenes a minikube se mencionan aquí: https://minikube.sigs.k8s.io/docs/handbook/pushing/
fuente
puede reutilizar la carcasa de la ventana acoplable y
eval $(minikube docker-env)
, alternativamente, puede aprovecharla adocker save | docker load
través de las carcasas.fuente
En realidad, lo que sucede aquí, su Minikube no puede reconocer su Docker Daemon, ya que es un servicio independiente. Primero debe configurar su entorno Minikube-Docker.
Si ejecuta el siguiente comando, mostrará dónde busca su minikube docker.
Debe volver a crear imágenes una vez que configure minikube docker-env, de lo contrario, fallará.
fuente
¡Encuentro este método de ClickHouse Operator Build From Sources y me ayuda a salvar mi vida!
fuente
pasos para ejecutar imágenes locales de acoplador en kubernetes
1. eval $ (minikube -p minikube docker-env)
2. en el archivo de artefactos, en la sección de especificaciones -> contenedores
agregue imagePullPolicy: IfNotPresent
o imagePullPolicy: Never
3. luego corre
kubectl create -f <filename>
fuente