我创建了一个Docker映像并将其上传到Docker Hub。
我的目标是每次创建一个pod时,Openshift都会从Docker Hub中提取图像,同时忽略它所拥有的任何缓存。
我使用以下命令创建了一个新应用程序:
oc new-app --docker-image=docker.io/barak1412/docker_test:v1 --name=docker-test-app
同时也改变了YAML发展中的形象拉动政策:
imagePullPolicy: Always
但Openshift仍然会从其内部缓存的某个地方加载图像,因此,应用程序不会更新。
有什么建议吗?谢谢。
2条答案
按热度按时间ktecyv1j1#
设置
imagePullPolicy: Always
属性是正确的方法。但是,请注意,默认情况下,您无法禁用OpenShift上的ImageStreams(内部缓存)。第一次kubernetes从DockerHub拉取图像时,带有精确摘要的图像将被缓存。因此,下次尝试拉取时,kubelet将在本地查询精确摘要,并使用解析后的摘要进行拉取。一直
如果您希望OpenShift从DockerHub提取新图像:
1.使用相同的标签
v1
将新图像推送到DockerHub。此新图像将具有DockerHub自身创建的新摘要。1.现在,删除集群上的Pod。
1.由于
ImagePullPolicy
设置为always
,kubelet将首先检查本地缓存的图像(ImageStreams),并尝试与新图像及其摘要值匹配。1.由于您在步骤1中推送的新映像具有不同的摘要,因此kubelet将从DockerHub中提取新映像,而不是从本地缓存中提取
参考:https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy
fwzugrvs2#
当您使用
oc new-app
创建应用程序时,不仅会创建Deployment
,还会在后台配置ImageStream
。然后部署中的应用程序将引用此ImageStream。因此,要更新您的
Deployment
,请执行以下操作之一:oc edit deployment <name>
编辑Deployment
并将Docker Hub容器映像设置为image
。oc get is
查找ImageStream的名称,然后使用oc import-image <name>
将其更新到最新版本。您可以使用--scheduled
启用自动更新:配置定期导入图像流标记