问题标签 [kubernetes-cronjob]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kubernetes - 如何在 kubernetes API(或 kubectl)中过滤给定 CronJob 拥有的作业?
我有几个 CronJobs,我希望能够查询特定作业的已完成作业列表。我试过--field-selector metadata.ownerReferences.uid
了,但这不是 batchv1.job 支持的字段选择器(看起来这个用例似乎没有有用的字段选择器)。
我不完全理解 DownwardAPI,但我想知道是否可以在引用 cronjobs uid 的 job_spec(在 cronjob 定义中)上设置标签,以便我可以使用标签选择器进行过滤。我不知道那是否可能。
按所有者过滤工作似乎是一件合理的事情,但在四处搜索时我似乎找不到任何有用的信息。
kubernetes - 如何在 Kubernetes 中使用 CronJobs 运行 shell 脚本?
我正在尝试使用 CronJob 以 1 分钟的定期间隔运行 shell 脚本。
我在我的 openshift 模板中创建了以下 Cron 作业:
以下是在此作业中作为卷插入的 configmap:
此 Cron 作业正在运行。正如我所看到的那样,工作名称每 1 分钟被替换一次(按照我的工作计划)。但它没有执行 shell 脚本 croyscript.sh 我在这里做错了吗?(可能是我插入了配置映射错误,所以 Job 无法访问 shell 脚本)
kubernetes - cronjob Kubernetes 使用应用程序和云代理容器的预期行为
我正在尝试在我的集群上设置一个 cron 作业,并且我有一个 cloudsql 代理和我的应用程序容器在 pod 中运行,cron 作业工作正常,但是当我执行时kubectl get pods --watch
,我看到在我的 cronjob pod 中,就绪列显示 1 /2,这是预期的行为吗
我不确定并试图了解这是否是预期的行为,或者我是否遗漏了某些东西并且没有正确配置它,任何帮助都会非常棒。
不确定它是否有帮助,但我的 cron 工作只是执行rake task
这是的输出kubectl get pods --watch
kubernetes - 具有 Kubernetes 持久卷的 SCDF 中的计划任务
我正在尝试在 minikube 上的 SCDF 中运行任务。此任务从数据库中提取数据并将其写入文件。所以我使用我在 Kubernetes Dashboard 中配置的本地持久卷来获取我的文件。当我使用部署器参数运行简单执行时,它工作正常:
deployer.my-task.kubernetes.volumes=[ { name: vol-data, persistentVolumeClaim: {claimName: 'pv-data-claim'}} ]
deployer.my-task.kubernetes.volumeMounts=[ { name: 'vol-数据', mountPath: '/data' } ]
当我查看 pod yaml 文件时,我看到了我的卷属性:
和
在执行结束时,我将文件放在本地目录中。
但是当我尝试创建具有相同参数的计划任务时,它不起作用。我没有在 cronjob yaml 或 cronjob 启动的 pod 中看到我的卷属性,当然我也没有得到我的文件。
我错过了什么吗?我在想从 SCDF 启动一个简单的任务或计划任务是一样的
谢谢你的帮助
kubernetes - Kubernetes Cronjobs 可以重用现有部署中的环境变量吗?
我正在使用 Kubernetes Cronjob 来运行周期数据库恢复和发布恢复脚本,这些脚本针对目标环境运行,其中包括使用数据库、redis 和文件系统等任务。
我面临的问题是我必须重新定义我在 Cronjob 中的部署中使用的所有环境变量(例如,、、DATABASE_NAME
等DATABASE_PASSWORD
)REDIS_HOST
。
虽然重复所有环境变量都有效,但很容易出错,因为我已经忘记更新作业,这导致我不得不重新运行整个过程,这需要 2-4 小时才能运行,具体取决于环境。
有没有办法在我的 Cronjob 中引用现有的Deployment
并重新使用定义的环境变量?
jobs - 有没有办法限制 Kubernetes 中作为 CronJob 实例的正在运行的 pod 的数量?
我在 K8S 中配置了一个 CronJon,它每 10 分钟创建一个 pod。运行中的容器可以在 5 分钟到 2 小时内完成,无法判断。
有时,当计算花费很长时间时,我最终会创建太多的 pod。
有没有办法限制正在运行的 Pod 的数量、特定 CronJob 的实例?
编辑
澄清一下,我想要并发运行,我想将正在运行的并发实例的数量限制为一定的大数 N。
kubernetes - 使用与 StatefulSet 中的其他 1 个 Pod 相同的 PVC 调度作业
在 Kubernetes 集群中,我希望能够安排一个作业(使用 CronJob),该作业将挂载与给定 StatefulSet 的 1 个 Pod 相同的卷。哪个 Pod 是运行时决定,取决于在调度 Job 时在 Pod 上设置的标签。
我想很多人会想知道为什么,因此描述一下我们正在做什么和试图做什么:
当前设置
我们有一个为 PostgreSQL 数据库提供服务的 StatefulSet。(一个主,多个副本)我们希望能够从 StatefulSet 的其中一个 pod 创建备份。
对于 PostgreSQL,我们已经可以使用 进行网络备份pg_basebackup
,但是我们正在运行多 TB 的 PostgreSQL 数据库,这意味着完全流式备份(使用pg_basebackup
)是不可行的。
我们目前使用pgBackRest
备份数据库,它允许增量备份。
由于增量备份pgBackRest
需要访问数据卷和 WAL 卷,因此我们需要在与 PostgreSQL 实例相同的 Kubernetes Node 上运行 Backup Container,我们目前甚至在单独的 Container 中的同一个 Pod 中运行它。
在容器内部,一个小 api 环绕pgBackRest
,可以通过向POST
api 发送请求来触发,目前这个触发是使用 CronJobs 完成的。
缺点
- 每个 PostgreSQL 实例在 Pod 中都有多个容器,1 个用于服务 Postgres,1 个用于服务于一个小包装器
pgBackRest
- 作业日志仅显示成功的备份触发器,实际的备份日志是备份容器的一部分
- 将运行备份的 Pod 可能在相对较旧的配置上运行,更改备份配置需要重新调度 Pod,这可能意味着 PostgreSQL 主节点的故障转移。
建议的设置
让 CronJob 调度一个与 StatefulSet 的 Pod 具有相同 Volume 的 Pod。这将允许备份使用这些卷。
但是,它需要哪些卷是一个运行时决定:我们可能希望在连接到主卷的卷上运行备份,或者我们可能希望使用副本的卷进行备份。主/副本可能随时更改,因为 PostgreSQL 主的自动故障转移是解决方案的一部分。
目前,这是不可能的,因为我无法在 CronJob 规范中找到任何方法来使用来自 k8s api 的信息。
什么有效,但不是很好:
- 使用调度作业的 CronJob
- 这个 Job 查询 k8s api 并调度另一个Job
例如,我们可以使用以下运行时信息让一个作业创建另一个作业:
以上可能最好由操作员提供,而不仅仅是使用 CronJob,但我想知道是否有人对上述问题有解决方案。
缺点
- 作业日志仅显示成功的备份触发器,实际的备份日志是另一个作业的一部分
- 作业需要权限来安排 Pod,需要另一个角色/角色绑定
- 在 Bash 中使用 heredocs 会使事情更难阅读/解析/理解
概括
长话短说,但这些是我们想要满足的约束:
- 运行 PostgreSQL 数据库的备份
- 这些是多 TB 数据库
- 所以需要增量备份
- 因此,我们需要挂载一个已经运行的 Pod 的同一个 PV
- 因此,我们需要在与 PV 相同的 K8s 节点上运行 Pod(或容器)
- 我们希望能够在 CronJob 规范中表达这一点,而不必进行运行时 kubernetes api 调用
kubernetes - 即使超过时间,Kubernetes Cronjob 也会立即触发 Job
我有 Kubernetes 工作,每天早上 5 点运行。今天我想把它改成早上 6 点。我现在的时间是上午 10 点。
将时间从早上 5 点修改为早上 6 点后,我注意到即使我当前的时间是上午 10 点,Kubernetes Cronjob 也会立即触发作业。
这是什么原因?是否有任何参数可用于启用/禁用此行为?
kubernetes - 由于记录的限制,我会在 Kubernetes 中同时运行我的 CronJob
根据K8S 中的这个页面,“......可能会创建两个工作......”。
如果我将我的设置concurrencyPolicy
为“禁止” - 由于调度程序,我是否仍会获得可选的并发运行,或者我是否会获得并发调用以运行但被阻止?
我还在文档站点中打开了一个问题: https ://github.com/kubernetes/website/issues/18655
cron - 如何在 hybris 中的特定时间触发 cronjob
我想每天 在美国东部标准时间上午 9 点、美国东部标准时间下午 1 点、美国东部标准时间晚上 10 点在以下时间触发一个 cronjob
除了 cron 表达式,我们还有其他选择,以便客户可以轻松更改此时间吗?
问候, 拉西卡