拉出本地图像以在Kubernetes中运行一个pod

CPB*_*CPB 46 docker kubernetes

我有一个Dockerfile创建的以下图像:

存储标签图像ID创建大小

ruby/lab最新的f1903b1508cb 2小时前729.6 MB

我有以下YML文件:

REPOSITORY   TAG      IMAGE ID       CREATED       SIZE 
ruby/lab     latest   f1903b1508cb   2 hours ago   729.6 MB
Run Code Online (Sandbox Code Playgroud)

当我创建部署时,我在pod中获得了以下信息:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ruby-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: ruby
    spec:
      containers:
      - name: ruby-app
        image: ruby/lab
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 4567
Run Code Online (Sandbox Code Playgroud)

和:

ruby-deployment-3830038651-sa4ii   0/1       ImagePullBackOff   0          7m
ruby-deployment-3830038651-u1tvc   0/1       ImagePullBackOff   0          7m
Run Code Online (Sandbox Code Playgroud)

是否真的有必要在docker中使用注册表?我只是想在本地进行测试并将我的代码/ repo传递给朋友进行测试

谢谢

小智 68

您可以通过运行将docker客户端指向VM的docker守护程序

eval $(minikube docker-env)
Run Code Online (Sandbox Code Playgroud)

然后,您可以正常构建图像并使用kubectl创建kubernetes资源.确保你有

imagePullPolicy: IfNotPresent
Run Code Online (Sandbox Code Playgroud)

在您的YAML或JSON规范中.

此外,还有一个标志可以将不安全的注册表传递给minikube VM.但是,必须在第一次创建机器时指定.

minikube start --insecure-registry
Run Code Online (Sandbox Code Playgroud)

您可能还想在使用私人注册表时阅读此内容 http://kubernetes.io/docs/user-guide/images/

  • `minikube start --insecure-registry true` (4认同)
  • @MattRickard:我不使用 minikube,我使用 kubectl、kubernetes 集群,我没有 docker 镜像注册表。我可以使用本地映像进行部署吗? (3认同)
  • 如果它能解决您的问题,@ CPB可以将此标记为答案吗? (2认同)

Rad*_*nka 22

AFAIR minikube在VM中运行,因此它不会在主机上看到您在本地构建的图像,但是......如https://github.com/kubernetes/minikube/blob/master/docs/reusing_the_docker_daemon中所述. md你可以eval $(minikube docker-env)用来实际使用在minikube上运行的docker守护进程,从而在minikubes docker上构建你的图像,因此期望它可用于minikubes k8s引擎而无需从外部注册表中提取

  • 我这样做了,但仍然找不到本地图像。 (3认同)
  • 我不使用 minikube,我使用 kubectl、kubernetes。我怎样才能解决这个问题 ? (2认同)

mil*_*nkb 9

要使用图像而不上传它,您可以按照以下步骤操作: 由于您正在设置环境变量,因此您必须在同一个 shell 中!

  1. 使用 eval $(minikube docker-env) 设置环境变量
  2. 构建镜像(例如 docker build -t my-image 。)
  3. 在 pod 规范中设置镜像,如构建标签(例如 my-image)
  4. 将 imagePullPolicy 设置为 Never,否则 Kubernetes 将尝试下载镜像。