我有几个docker映像,我想使用minikube。我不想先上传然后再下载相同的图像,而不是直接使用本地图像。我怎么做呢?

我尝试过的东西: 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映像的说明。 操作系统:ubuntu 16.04 Docker: Docker版本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"}

如果有人能帮我找到一个解决方案,使用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           

当前回答

在之前的答案的基础上,使用eval $(minikube docker-env)来加载minikube的docker环境,为了更容易切换,在你的shell rc文件中添加以下函数:

dockube() {
  if [[ $1 = 'which' ]]; then
    if [[ $MINIKUBE_ACTIVE_DOCKERD = 'minikube' ]]; then
      echo $MINIKUBE_ACTIVE_DOCKERD
    else
      echo 'system'
    fi
    return
  fi

  if [[ $MINIKUBE_ACTIVE_DOCKERD = 'minikube' ]]; then
    eval $(minikube docker-env -u)
    echo "now using system docker"
  else
    eval $(minikube -p minikube docker-env)
    echo "now using minikube docker"
  fi
}

没有参数的Dockube将在系统和minikube docker环境之间切换,哪个Dockube将返回哪个Dockube正在使用。

其他回答

kubernetes文档:

https://kubernetes.io/docs/concepts/containers/images/#updating-images

默认的拉取策略是IfNotPresent,它会导致Kubelet跳过已经存在的图像的拉取。如果你想一直用力拉,你可以做以下其中一种: 将容器的imagePullPolicy设置为Always; 使用:最新作为标签的图像使用; 启用AlwaysPullImages准入控制器。

或者换一种方式阅读:使用:latest标记强制始终拉取图像。如果你像上面提到的那样使用eval $(minikube docker-env),那么要么不使用任何标签,要么给你的本地映像分配一个标签,你可以避免Kubernetes试图强制拉出它。

对于Windows用户来说,我是这么做的。

我使用docker桌面托管MiniKube映像,并使用PowerShell作为控制台。

首先,我创建我的MiniKube集群:

minikube start --bootstrapper=kubeadm --vm-driver=docker --profile "cluster1"

例如,假设我有一个Dockerfile包含:

FROM nginx

2步方法,建立一个图像,并上传图像到minikube

docker build -t mynginximage .
minikube image load mynginximage

或1步的方式,构建直接在MiniKube

minikube image build -t mynginximage .

在MiniKube中运行我的图像

kubectl run myweb --image=mynginximage --image-pull-policy=Never

或者通过mynginxpod。yaml文件:

apiVersion: v1
kind: Pod
metadata:
  name: myweb
spec:
  containers:
    - name: myweb
      image: mynginximage
      imagePullPolicy: Never
      ports:
        - containerPort: 80

kubectl应用-f .\mynginxpod.yaml

现在要测试它,运行:

kubectl get pods myweb
NAME    READY   STATUS    RESTARTS   AGE
myweb   1/1     Running   0          25s

要访问它:

kubectl exec --stdin --tty myweb -- /bin/bash

暴露它:

kubectl port-forward nginx 3333:80

在kubernetes中运行本地docker映像的步骤 1. Eval $(minikube -p minikube docker-env) 2. 在工件文件中,在规范部分->容器添加 imagePullPolicy: IfNotPresent或imagePullPolicy: Never

apiVersion: "v1"
kind: Pod
metadata:
    name: web
    labels:
        name: web
        app: demo
spec:
    containers:
        - name: web
          image: web:latest
          imagePullPolicy: IfNotPresent
          ports:
              - containerPort: 5000
                name: http
                protocol: TCP

3.然后执行kubectl create -f <filename>

除了minikube图像加载<图像名称>之外,还可以查看minikube的最新版本(撰写本文时为2021年11月)。

v1.24.0

添加——no-kubernetes标志来启动没有Kubernetes的minikube 参见PR 12848

这就得到了:

mk start --no-kubernetes
minikube v1.24.0-beta.0 on Darwin 11.6 (arm64)
Automatically selected the docker driver
Starting minikube without Kubernetes minikube in cluster minikube
Pulling base image ...
Creating docker container (CPUs=2, Memory=1988MB) ...
Done! minikube is ready without Kubernetes!

没有Kubernetes可以尝试的事情 “minikube ssh”,ssh到minikube的节点。 "minikube docker-env"通过指向minikube内部的docker来构建映像 “minikube image”构建图像没有docker

除了接受的答案之外,您还可以使用以下命令实现您最初想要的(使用run命令创建部署):

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 --generator=run-pod/v1 

我在Kubernetes-dev论坛上找到了关于生成器的信息:

如果您正在使用kubectl运行,它会为您生成一个清单,其中imagePullPolicy默认设置为Always。你可以使用这个命令来获取IfNotPresent的imagePullPolicy,这将适用于minikube: Kubectl run——image=<容器>——generator=run-pod/v1 丹Lorenc

https://groups.google.com/forum/ !主题/ kubernetes-dev / YfvWuFr_XOM