openshift - OpenShift CronJob 可以从 ImageStream 中受益吗?
问题描述
在不使用图像流的情况下,我的 CronJob 工作正常。
该作业每 15 分钟运行一次,并且始终拉取标记的图像,例如my-cron:stable
.
由于图像总是被拉取并且计划告诉集群何时运行我的工作,我从知道我的图像有更新版本中获得什么?
如果图像发生更改并且我的作业有一个正在运行的实例,我希望使用图像的当前版本来完成作业。
在下一次计划运行中,更新的图像被拉出 ( AlwaysPull
)。因此,对于 cron 作业的图像流,我似乎没有获得太多跟踪更改。
解决方案
根据https://docs.openshift.com/container-platform/4.7/openshift_images/image-streams-manage.html,ImageStream仅触发 BuildConfigs 和 DeploymentConfigs 。上游 kubernetes 没有 ImageStream 的概念,因此没有触发 'vanilla' 资源类型。CronJob 用于 openshift 和 kubernetes(apiVersion:batch/v1beta1),AFAIK 访问镜像流的唯一方法是使用内部注册表的完整路径,这不太方便。如果更新了镜像流,您的 cronjob 将不会重新启动或不会停止,因为从 kubernetes 的角度来看,只有在触发 cronjob 时才会拉取镜像,然后它只是等待作业完成。
正如我所看到的 - 你没有从使用图像流中获得太多,因为要点之一,使用触发器的能力,不能用于 cronjobs。在 CronJobs 中使用它的唯一原因是如果您出于某种原因直接推送到内部注册表,但这也是一种不好的做法。
请参阅以下链接以供参考:
在这里引用redhat解决方案:
解析度
在项目内部使用图像流运行 cronjob 时,指定图像的完整路径:
[...] spec: jobTemplate: spec: template: spec: containers: image: docker-registry.default.svc:5000/my-app-namespace/cronjob-image:latest name: cronjob-image [...]
请注意,您也可以在图像之后放置 ':latest'(或特定标签)。
在此示例中,cronjob 将使用来自项目 my-app-namespace 的图像流 cronjob-image:
$ oc get is -n my-app-namespace [...] imagestream.image.openshift.io/cronjob-image docker-registry.default.svc:5000/my-app-namespace/cronjob-image latest 27 minutes ago
根本原因
指定的图像没有内部 docker 注册表的完整路径。如果不使用完整路径(即只放置 cronjob-image,OpenShift 将无法找到它。[...]
推荐阅读
- c# - 带有 luis 结果的 C# Microsoft Bot Framework 指向 QNA Maker 和图形 api
- c# - 使用 MSBuild 时,Visual Studio Android 解决方案在遇到 C# 版本冲突时停止构建
- php - 如何使用 eventbrite wordpress api 过滤事件
- boto3 - Ceph,boto3:活动链接检查
- python - 初始化对象时传递方法的最佳方法是什么
- c# - C#,获取用户价值并重置它
- sql - SQL 计数唯一删除集
- java - 如何泛型调用泛型方法?
- angular - 将 mat-icons 放在 Angular 6 中的选择内
- php - SendGrid php 示例返回空且不发送电子邮件