Tenho várias imagens do Docker com as quais quero usar minikube
. Não quero primeiro fazer o upload e fazer o download da mesma imagem, em vez de apenas usar a imagem local diretamente. Como eu faço isso?
O que eu tentei:
1. Tentei executar esses comandos (separadamente, excluindo as instâncias do minikube duas vezes e começando do zero)
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never
Resultado :
NAME READY STATUS RESTARTS AGE
hdfs-2425930030-q0sdl 0/1 ContainerCreating 0 10m
Apenas fica preso em algum status, mas nunca atinge o estado pronto.
2. Tentei criar um registro e depois colocar imagens nele, mas isso também não funcionou. Talvez eu tenha feito isso incorretamente, mas não consigo encontrar instruções adequadas para executar esta tarefa.
Forneça instruções para usar imagens de janela de encaixe local na instância local do kubernetes.
OS: ubuntu 16.04
Docker: Docker versão 1.13.1, construção 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"}
Se alguém pudesse me ajudar a obter uma solução que usa o docker-composite para fazer isso, isso seria incrível. Obrigado.
Editar:
Imagens carregadas em 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
fonte
minikube start --disk-size 100g
. Outra solução seria excluir imagens antigas comdocker images
edocker rmi
.eval $(minikube docker-env)
depois de fechar o terminal em que você está trabalhando ANTES de tentar reconstruir imagens ... queimou 6 horas lutando com uma imagem que não estava atualizando no minikube ... parecia que um pacote não estava atualizando .. realmente não atualizando a imagem que o minikube estava fazendo referência.IfNotPresent
que significa que tudo o que precisamos fazer é definir as variáveis de ambiente.eval $(minikube docker-env -u)
O que funcionou para mim, com base na solução de @svenwltr:
fonte
Esta resposta não está limitada ao minikube!
Use um registro local:
Agora marque sua imagem corretamente:
Observe que o host local deve ser alterado para o nome DNS da máquina que está executando o contêiner do registro.
Agora envie sua imagem para o registro local:
Você deve poder recuar:
Agora mude seu arquivo yaml para usar o registro local.
Pense em montar o volume no local apropriado para manter as imagens no registro.
atualizar:
como Eli afirmou, você precisará adicionar o registro local como inseguro para usar o http (pode não se aplicar ao usar o host local, mas se aplica ao usar o nome do host local)
Não use http na produção, faça um esforço para proteger as coisas.
fonte
<registryIP>:5000/ubuntu
Adicionando à resposta do @Farhad com base nessa resposta ,
Estas são as etapas para configurar um registro local.
Configuração na máquina local
Configurar nome do host na máquina local: edite
/etc/hosts
para adicionar esta linhaAgora inicie um registro local (remova -d para executar o modo não daemon):
Agora marque sua imagem corretamente:
Agora envie sua imagem para o registro local:
Verifique se a imagem foi enviada por push:
Instalação no minikube
ssh no minikube com:
minukube ssh
edite
/etc/hosts
para adicionar esta linhaVerifique o acesso:
Agora, se você tentar puxar, poderá receber um erro de acesso http.
Ativar acesso não seguro :
Se você sempre planeja usar o minkube com essa configuração local, crie um minikube para usar o registro inseguro por padrão (não funcionará no cluster existente).
caso contrário, siga as etapas abaixo:
edite o arquivo serice do docker: obtenha o caminho de
systemctl status docker
pode ser :
acrescente este texto (substitua 192.168.1.4 pelo seu ip)
para esta linha
tente puxar:
Agora mude seu arquivo yaml para usar o registro local.
para
Não use http na produção, faça um esforço para proteger as coisas.
fonte
Além da resposta aceita, você também pode obter o que queria originalmente (criando uma implantação usando o
run
comando) com o seguinte comando:Encontrei as informações sobre o gerador no fórum Kubernetes-dev:
https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM
fonte
Uma abordagem é criar a imagem localmente e depois:
minikube docker-env
pode não retornar as informações corretas em execução em um usuário / sudo diferente. Em vez disso, você pode executarsudo -u yourUsername minikube docker-env
.Deve retornar algo como:
fonte
docker save imageNameGoesHere > pv | (eval $(minikube docker-env) && docker load)
docker save imageNameGoesHere | (eval $(minikube docker-env) && docker load)
trabalhou para mimSe alguém estiver olhando para retornar ao ambiente local após definir o ambiente do minikube, use o seguinte comando.
fonte
Nos documentos do kubernetes:
https://kubernetes.io/docs/concepts/containers/images/#updating-images
Ou leia de outra maneira: Usar a tag: latest faz com que as imagens sejam sempre puxadas. Se você usar o
eval $(minikube docker-env)
mencionado acima, não use nenhuma marca ou atribua uma marca à sua imagem local, para evitar que o Kubernetes tente puxá-la à força.fonte
Agora existe um complemento do Minikube Registry, essa é provavelmente a maneira mais fácil. Aqui está como usá-lo: https://minikube.sigs.k8s.io/docs/tasks/registry/insecure/
Observe que eu tinha problemas de DNS, pode ser um bug.
fonte
Um método mais simples que responde à pergunta original "Como usar imagens de janela de encaixe local com o Minikube?" É salvar a imagem em um arquivo tar e carregá-la no minikube:
A execução da imagem envolve um comando como o seguinte. Certifique-se de incluir o parâmetro "--image-pull-policy = Never".
fonte
docker save
comsudo
, e em seguida, definasudo chmod 664 my-image.tar
para torná-lo disponível para o meu usuário atual.Para adicionar às respostas anteriores, se você tiver uma imagem tarball, basta carregá-la no conjunto de imagens do docker local
docker image load -i /path/image.tar
. Lembre-se de executá-lo depoiseval $(minikube docker-env)
, pois o minikube não compartilha imagens com o mecanismo do docker instalado localmente.fonte
Outras respostas supõem que você use o minikube com VM, para que suas imagens locais não sejam acessíveis a partir da minikube VM.
Caso você use o minikube
--vm-driver=none
, poderá reutilizar facilmente imagens locais configurandoimage_pull_policy
para Nunca:ou
imagePullPolicy
campo de configuração para cotainers nos.yaml
manifestos correspondentes .fonte
Uma idéia seria salvar a imagem do docker localmente e carregá-la no minikube da seguinte maneira:
Digamos, por exemplo, que você já tenha uma imagem de puckel / docker-airflow.
Salve essa imagem no disco local -
docker save puckel/docker-airflow > puckel_docker_airflow.tar
Agora entre no minikube docker env -
eval $(minikube docker-env)
Carregue a imagem salva localmente -
docker load < puckel_docker_airflow.tar
É simples assim e funciona como um encanto.
fonte
Set the imagePullPolicy to Never
. Se sua imagem estiver marcada com um endereço, por exemplous.icr.io/mydiv/my-service:v0.0.1
, uma implantação tentará puxar remotamente essa imagem. Como você já copiou a imagem manualmente, é necessário suprimir o k8s de extrair a imagem de um endereço (registro de contêiner) que não pode acessar.e se você pudesse executar o k8s no vm do docker? há suporte nativo para isso nas versões mais recentes da área de trabalho do docker ... você só precisa ativar esse suporte.
https://www.docker.com/blog/kubernetes-is-now-available-in-docker-desktop-stable-channel/ https://www.docker.com/blog/docker-windows-desktop-now- kubernetes /
como eu descobri isso:
ao ler os documentos do helm, eles fornecem um breve tutorial sobre como instalar o minikube. esse tutorial instala o minikube em uma VM diferente / separada da janela de encaixe.
portanto, quando chegou a hora de instalar meus gráficos de leme, não consegui que o leme / k8s puxasse as imagens que eu havia construído usando o docker. foi assim que cheguei aqui a esta pergunta.
então ... se você pode viver com qualquer versão do k8s que vem com a área de trabalho do docker, e pode ser executado com qualquer que seja o vm docker, talvez essa solução seja um pouco mais fácil do que outras.
isenção de responsabilidade: não tenho certeza de como a alternância entre os contêineres Windows / Linux afetaria qualquer coisa.
fonte
Existe um ensaio e uma maneira eficaz de enviar sua imagem do Docker local diretamente para o minikube, o que economizará tempo ao criar as imagens no minikube novamente.
Mais detalhes aqui
Todos os métodos possíveis para enviar imagens ao minikube são mencionados aqui: https://minikube.sigs.k8s.io/docs/handbook/pushing/
fonte
você pode reutilizar o shell da janela de encaixe e
eval $(minikube docker-env)
, alternativamente, pode aproveitardocker save | docker load
as conchas.fonte
Na verdade, o que acontece aqui, o Minikube não consegue reconhecer o daemon do docker, pois é um serviço independente.
Se você executar o comando abaixo, ele mostrará onde o seu minikube procura a janela de encaixe.
Você precisa criar imagens novamente depois de configurar o minikube docker-env, caso contrário, ela falhará.
fonte
Eu encontro esse método no ClickHouse Operator Build From Sources e isso ajuda e salva minha vida!
fonte
etapas para executar imagens do docker local no kubernetes
1. eval $ (minikube -p minikube docker-env)
2. no arquivo de artefato, na seção de especificações -> containers
add imagePullPolicy: IfNotPresent
ou imagePullPolicy: Never
3. depois corra
kubectl create -f <filename>
fonte