我正在使用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一起使用?
答案 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日创建。
这就是全部。您的版本可用,命名更容易为您理解 此图片的更多用户。