问题标签 [kubernetes-jobs]

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.

0 投票
1 回答
129 浏览

kubernetes - Kubernetes Jobs 是否有助于在后台执行耗时的微服务?

在我的 Web 应用程序中,我有某些任务,例如上传文件,这会耗费大量时间,那么将其作为 Kubernetes 作业运行是不是更好?

我没有找到任何合适的用例来执行这样的任务

我的服务器在 Kubernetes pod 中运行,对于一些耗时的任务,我只想在单独的作业上执行它以平衡负载并异步运行它

0 投票
2 回答
879 浏览

kubernetes - 作业完成后,K8s 作业(容器)中指定的内存请求/限制会发生什么情况?

我有多环境 k8s 集群 ( EKS ),我正在尝试为 ResourceQuotas 设置准确的值。

我注意到的一件有趣的事情是,当作业成功完成并有效地释放它正在使用的 cpu/内存资源时,指定的 CPU/内存请求/限制在 k8s 集群中保持“占用” 。

由于我希望在环境中执行很多作业,这给我带来了问题。当然,我已经为成功执行的作业添加了对运行 cleanup cronjob 的支持,但这只是解决方案的一部分。

我知道k8s 上的 TTL 功能https ://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#ttl-mechanism-for-finished-jobs 仍处于 alpha阶段状态,因此在 EKS k8s 集群上不可用。

我希望在该特定 pod(容器/s)上指定的请求/限制也被“释放”,但是在查看 Grafana 上的 k8s 指标时,我发现这不是真的。

这是一个示例(绿线标记当前资源使用情况,黄色标记资源请求,而蓝色标记资源限制): 在此处输入图像描述

我的问题是:

  • 这是预期的行为吗?
  • 如果是,在作业(pod)执行完成后请求/限制没有释放的技术原因是什么?
0 投票
0 回答
119 浏览

kubernetes - 并行运行多个作业时 Kubernetes 作业状态更新延迟

我有一个独特的用例,我想一次运行大量(数千到数万个)Kubernetes 作业。每个作业由一个容器、Parallelism 1 和 Completions 1 组成,没有边车或代理。我的集群有足够的容量来满足我请求的资源。

我的问题是当我同时运行许多作业时,作业状态在很长一段时间内都没有转换为完成。

我的应用程序提交作业并在命名空间上有一个观察者 - 一旦作业的状态转换为“成功 1”,我们就会删除该作业并将信息发送回应用程序。应用程序需要尽快执行此操作,以便定义和提交后续作业。

我能够以我想要的最快速度提交新的作业请求,并且 Pod 调度不会延迟,但是在大约一两百个并发作业之外,我在作业的 Pod 完成和作业的状态更新到完成之间会出现明显的延迟。集群中只有大约 1,000 个作业,更新作业状态可能需要 5-10 分钟。

这告诉我 Kubernetes 控制平面中的某些进程需要更多资源来更快地处理 Pod 完成事件,或者需要一个配置选项使其能够并行处理更多任务。但是,我的系统监控工具尚未能够识别任何控制平面服务,这些服务在集群处理积压工作时会耗尽其可用资源,并且集群上的所有其他操作似乎都正常。

我的问题是 - 我应该在哪里寻找系统资源或配置瓶颈?我对 Kubernetes 的了解还不够,无法确切知道哪些组件负责更新 Job 的状态。

0 投票
0 回答
77 浏览

docker - Docker Swarm 中的“Kubernetes 作业”

与 Kubernetes 相比,Docker Swarm 相对更容易维护,所以我正在考虑从 Kubernetes 集群迁移到 Docker Swarm 集群。

在我的 Kubernetes 集群中,我广泛使用Jobs来启动临时工作人员,这对整个基础设施的主要功能非常重要。Kubernetes Jobs 最好的一点是,它们会在 Job 完成后经过一定的时间限制后关闭并回收资源。

我想问一下Docker Swarm 中是否有等效的 Kubernetes Jobs?到目前为止,我在 Docker 网站上找不到支持此功能的官方文档。

0 投票
2 回答
257 浏览

kubernetes - kubernetes 如何从现有的 pod 创建新的 pod

我有以下疑问,假设我有一个 n=1 副本的 kubernetes pod A,我希望它每 x 分钟创建一个类型为“Job”的新 pod B,我可以从 kubectl 创建一个作业 pod 而不会出现问题,但是如何让一个 pod 从另一个 pod 实例化?

我可以尝试在父 pod 上使用 kubectl,但我认为这不是最优雅的方式。

0 投票
2 回答
395 浏览

kubernetes - Kubernetes 延迟部署

我有一个应用程序 A 和应用程序 B

应用程序 B 并不总是需要并且运行起来可能很繁重。所以我们通常希望让应用程序 B 保持关闭

那么有没有办法延迟应用程序 B 的部署,等到收到应用程序 A 的请求以启动应用程序 B

我最初正在查看 kubernetes 作业,但它似乎总是在任务完成后打开并重新启动。任何想法?

0 投票
1 回答
214 浏览

kubernetes - 清理 Kubernetes 工作

我有一个将 db-job 部署到 k8s 的大三角帆管道。我希望能够在部署另一个作业之前删除该作业,即添加一个大三角帆舞台或以某种方式配置作业,以便它自行删除。我知道 cronjob 会非常适合它,但它处于测试阶段并且不够稳定,无法用于数据库操作。我试图像这样向大三角帆添加一个舞台:

但它不会工作。我也不想使用 ttl,因为在创建新工作之前,我不希望有最新的工作。还有其他选择吗?对此的最佳做法是什么?

0 投票
1 回答
1617 浏览

kubernetes - 单个 kubernetes 作业是否可以包含具有不同并行度定义的多个 pod?

我有一个批处理作业,它分解为 3 个任务,每个任务都依赖于之前的完成,然后才能开始:

  1. 运行单个 pod
  2. 并行运行 N 个 pod ( .spec.completions= .spec.parallelism= N)
  3. 并行运行 M 个 pod ( .spec.completions= .spec.parallelism= M)

每个任务都有不同的资源需求(CPU/MEM/STORAGE)。目前,我开始作业#1,当它完成时,它运行一个kubectl命令来启动作业#2,依此类推到作业#3。我有 3 份不同的工作。

我可以为这 3 个任务定义一个工作吗?

也许是这样的:

  1. 为任务 #1 运行单个 pod
  2. 在任务 #2 上定义初始化容器以等待任务 #1 完成
  3. 使用 N 为任务 #2 运行 N 个 pod.spec.completions
  4. 在任务 # 上定义初始化容器以等待任务 #2 完成
  5. .spec.completions使用适用于任务 #3的不同方式为任务 #3 运行 M 个 pod

我不清楚我是否可以在同一个工作下为不同的 pod定义单独的.spec.parallelism和不同的 pod。.spec.completions如果我可以定义单独的初始化容器来延迟后续任务的启动。

这可能都需要一个更完整的工作流引擎,比如 Argo(我们还没有)。

0 投票
1 回答
37 浏览

python-3.x - 有没有办法仅在 Kubernetes 作业失败时自动启动后续(不同)作业?

语境:

我目前有一个 Python Flask 应用程序,当收到请求时,它会自动创建一个 Kubernetes 作业来运行一个进程。作业完成后,它将结果回传到特定端点(永不更改)。根据请求的具体情况,此过程的长度(时间)和资源需求可能会有很大差异。我为此使用 Jobs 的原因是它们能够在失败时重新启动。

问题:

即使允许最大重新启动,有时该过程也会出错。我想按照以下方式实现一些东西:

  • 如果作业成功完成,则什么也不做。
  • 如果在达到最大重试次数后作业失败,则运行foo()

foo()是一个非常简单的 Python 函数,它将发送带有导致作业未成功完成的请求参数的 HTTP 请求。它不一定是 Python 函数,但它是首选。

注意:我将作业需要执行的 python 函数中的所有内容都包装在一个广泛的错误异常中,但是,有时作业可能会由于内存不足而失败。

0 投票
1 回答
118 浏览

kubernetes - 如何检查 K8s 卷是否安装正确?

我正在测试是否可以使用 initContainer 从 S3 挂载数据。我的意图和期望是将相同的卷安装到 initContainer 和 Container 上。使用 InitContainer 将来自 S3 的数据下载到名为 /s3-data 的 mountPath 中,并且由于容器在 initContainer 之后运行,因此它可以从卷安装到的路径中读取。

但是,容器没有显示任何日志,只是说“流已关闭”。initContainer 显示从 S3 成功下载数据的日志。

我究竟做错了什么?提前致谢。