如何配置Openshift在从外部Docker Hub提取图像时不使用缓存?

ar5n3qh5  于 2023-03-01  发布在  Docker
关注(0)|答案(2)|浏览(112)

我创建了一个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仍然会从其内部缓存的某个地方加载图像,因此,应用程序不会更新。
有什么建议吗?谢谢。

ktecyv1j

ktecyv1j1#

设置imagePullPolicy: Always属性是正确的方法。但是,请注意,默认情况下,您无法禁用OpenShift上的ImageStreams(内部缓存)。第一次kubernetes从DockerHub拉取图像时,带有精确摘要的图像将被缓存。因此,下次尝试拉取时,kubelet将在本地查询精确摘要,并使用解析后的摘要进行拉取。
一直

  • 每当Kubelet启动容器时,Kubelet查询容器映像注册表以将名称解析为映像摘要。如果Kubelet具有本地缓存的具有精确摘要的容器映像,则Kubelet使用其缓存的映像;否则,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

fwzugrvs

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启用自动更新:配置定期导入图像流标记

相关问题