适用于Mac的Docker(Edge) - Kubernetes - 参考本地图像

时间:2018-06-07 10:53:16

标签: kubernetes docker-for-mac

我正在使用docker for mac 18.05.0-ce-mac66(24545)(边缘)并支持Kubernetes,我正在努力创建引用本地构建图像的kubernetes部署。

docker images的输出: REPOSITORY TAG IMAGE test latest 2c3bdb36a5ed

我的部署.yaml: apiVersion: apps/v1 kind: Deployment metadata: name: helloworld-deployment spec: selector: matchLabels: app: helloworld replicas: 1 template: metadata: labels: app: helloworld spec: containers: - name: aaa image: test:latest ports: - containerPort: 8080

当我运行kubectl apply -f deplyment.yaml时,会创建pod:

helloworld-deployment-764b8b85d8-2c4kl 0/1 ImagePullBackOff 0
helloworld-deployment-764b8b85d8-rzq7l 0/1 ImagePullBackOff 0

描述其中一个豆荚给出: Normal Scheduled 20s default-scheduler Successfully assigned helloworld-deployment-79f66d97c6-7tj2x to docker-for-desktop Normal SuccessfulMountVolume 19s kubelet, docker-for-desktop MountVolume.SetUp succeeded for volume "default-token-72f44" Normal BackOff 16s kubelet, docker-for-desktop Back-off pulling image "test:latest" Warning Failed 16s kubelet, docker-for-desktop Error: ImagePullBackOff Normal Pulling 4s (x2 over 19s) kubelet, docker-for-desktop pulling image "test:latest" Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Failed to pull image "test:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for test, repository does not exist or may require 'docker login' Warning Failed 2s (x2 over 17s) kubelet, docker-for-desktop Error: ErrImagePull

有趣的是,如果我尝试运行dockerhub上托管的一些图像,那么一切都很好, 我也尝试使用skaffold,它也可以作为魅力......

我看到一些关于minikube的类似问题,其中解决方案是使用minikube docker deamon来构建图像,以便可以从kubernetes集群中引用它们。 我想避免设置本地回购,但我怎样才能使它与Docker Edge Kubernetes一起使用?

3 个答案:

答案 0 :(得分:17)

通过将imagePullPolicy设置为Never,我可以运行本地图像。

例如:

apiVersion: v1
kind: Pod
metadata:
  name: local-image-test
spec:
  containers:
  - name: local-image-container
    image: local-image:latest
    imagePullPolicy: Never

(此解决方案的信用额为https://github.com/kubernetes/kubernetes/issues/1293#issuecomment-357326426

答案 1 :(得分:4)

使用标记版本的图像而非最新版本因为如果要将Docker镜像发送到生产环境,则应忽略最新标记。不要使用它。不要被它诱惑。很容易看到它,并认为你的部署脚本应该只是“最新”,你的构建过程将确保它是有效的。

答案 2 :(得分:0)

techtrainer评论和回答外, 我想提供一些如何做的例子。

一般规则。您必须使用图像的标记版本而不是latest。 使用Docker标记,您可以获得的具体内容越多越好。具体到避免使用错误的图像。 如果您不希望您的同事或其他Docker用户提取图像并且不知道它们的最近状态,请考虑这一点。 具体到避免此类问题。

docker tag IMAGE ID image/TAG:version.d.m.y

为了更好地管理您的图像,您应该有一些智能的命名约定。 我更喜欢使用图像创建的阶段,版本和日期。例如:

docker tag 113a43faa138 ubuntu/prod:v1.8.6.2018

这意味着生产阶段,版本1,于2018年6月8日创建。

这就是全部。您的版本可用,命名更容易为您理解 此图片的更多用户。