问题标签 [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 回答
1237 浏览

kubernetes - 使用不同的命令重新启动 Kubernetes 作业或 Pod

我正在寻找一种从命令行快速运行/重新启动 Job/Pod 并覆盖要在创建的容器中执行的命令的方法。

对于上下文,我有一个 Kubernetes 作业,它作为我们部署过程的一部分被执行。有时该作业会崩溃,我需要在作业创建的容器内运行某些命令来调试和修复问题(随后的作业会成功)。

到目前为止,我这样做的方式是:

  • 复制 Job 的 YAML,保存到文件中
  • 清理 YAML(删除 Kubernetes 管理的字段)
  • command:将字段更改为tail -f /dev/null(以便容器保持活动状态)
  • kubectl apply -f job.yaml && kubectl get all && kubectl exec -ti pod/foobar bash
  • 在容器内运行命令
  • kubectl delete job/foobar当我完成时

这是非常乏味的。我正在寻找一种方法来执行以下操作


我无法使用该run命令创建 Pod:

因为我尝试重新启动的作业具有volumeMounts我需要重用的某些和其他配置。所以我需要类似的东西kubectl run --from-config job/foobar


有没有办法实现这一点,还是我坚持使用 YAML 定义文件?


编辑:Job YAML 看起来大约。像这样:

0 投票
1 回答
164 浏览

kubernetes - 有没有办法为 helm post-install hook 启用 shareProcessNamespace?

我正在运行一个带有 3 个容器(telegraf、fluentd 和一个内部代理)的 pod,它使用shareProcessNamespace: true.

我编写了一个 python 脚本来从中央控制器 API 端点获取电报的初始配置和流利的。由于这是一次性操作,我计划使用 helm post-install hook。

在获取配置之前,python 脚本需要检查 telegraf/fluentd/agent 进程是否已启动。我打算等待(超时)直到pgrep <telegraf/fluentd/agent>返回 true,然后触发 API。有没有办法启用shareProcessNamespace安装后挂钩?谢谢。

PS:目前,代理调用python脚本及其自己的启动脚本。它有效,但它很笨拙。我想将其移出代理容器。

0 投票
0 回答
44 浏览

kubernetes - Kubernetes Job Informer 回调调用很晚

我们正在使用 kubernetes informer(源代码)从 kubernetes api 服务器接收作业更新事件,并且在我们收到这些事件后,我们通常会从集群中删除作业记录。

最近我们发现有很多作业记录留在集群中,因为客户端没有立即收到来自 kuberntes API Server 的 Kubernetes Job Update Event,而是一个多小时后才收到这些事件。

以下是一些信息:

  1. 工作通知回调

  2. 集群信息

    kubernetes 版本:v1.20
    client-go 版本:v0.19.6

  3. 其他信息
    那里有1000多个kubernetes Jobs,它们都处于Complete状态,我们不删除它们只是因为我们需要它们来调试其他业务逻辑。

    但是我们发现,去掉那些kubernetes作业,重启informer后,一切都恢复正常了。

如何解决通知延迟?反正有调试这种问题吗?

0 投票
0 回答
40 浏览

kubernetes-helm - 为什么 helm3 install tr​​igger pre-delete 而不是在 Helm2

我有一个项目需要使用mutating Webhook,基于namespaceselector,需要首先将特定标签添加到命名空间。

我使用了三个钩子,hook1(pre-install, pre-delete,etc)hook2(pre-install)创建RBAC以通过Jobhook3(pre-delete)为名称空间添加标签以删除Job Hook 内容的标签如下:

Hook1设置权限

hook2将标签添加到命名空间

hook3从 hook2 删除标签到命名空间

在图表部署期间,由于未找到服务帐户(ns-edit),hook2 和 hook3 作业都被触发并且未完成。

但是在helm2中可以正确执行,即触发hook1和hook2helm install添加命名空间标签,触发hook1和hook3helm delete --purge删除hook2添加的标签

为什么 helm2 和 helm3 在Hook上有如此巨大的差异。

请问如何修改才能实现两者的统一如果没有,在helm3中如何设计

我真的很感激这方面的任何帮助。

注:helm2 为 v2.17.0,helm3 为 v3.3.0

0 投票
0 回答
62 浏览

kubernetes - 为什么 Kubernetes 作业既没有运行,也没有成功或失败?

我有一份工作显示为不完整:

通常,这项工作将在约 35 秒内完成。这最后一个flight-supplier-cache-import-27304560已经不完整了 10 小时。

然后我看到了

这甚至意味着什么?不运行,成功还是失败?

请帮忙。

0 投票
1 回答
49 浏览

kubernetes - dockerfile 和 kubernetes 工作(需要帮助)

我有我的 dockerfile,我在其中使用了 postgres:12 映像,并使用一些 ddl 脚本对其进行了修改,然后我构建了这个映像,我可以通过 docker run 命令运行容器,但是我如何使用 Kubernetes 作业来运行构建映像,如我在k8s上没有很好的经验。

这是我的 dockerfile 在这里你可以看到它。

码头工人建造。-t dockerdb

我如何使用以下要求自定义以下代码

0 投票
0 回答
40 浏览

dockerfile - Terraform 和 k8s 作业

我需要一个帮助。

我在谷歌容器注册表中推送了我的 docker 映像,根据我的客户,我需要使用 terraform kubernetes 作业。

Dockerfile:

docker build --build-arg POSTGRES_PASSWORD=xyzw12345 。-t hello-world:postgres docker push hello-world:postgres

我可以运行 terraform kubernetest 作业以进入容器内部,但我看不到任何在 5432 上工作的东西,我可以从 telnet 看到,任何人都可以帮助我做错了什么。

我只想登录到容器中,可以在 pgAdmin 的帮助下查看数据库详细信息。我可以在本地执行相同的步骤而不会出现任何错误。

感谢开发

0 投票
0 回答
109 浏览

kubernetes - 如果达到内存或 CPU 限制,则垂直缩放作业

我有一个从 BigQuery 执行下载的作业(使用单个容器),下载数据的大小根据所选表的不同而变化很大。有时我的 pod 达到内存限制并重新启动,但由于数据大小相同,它会由于内存限制再次失败(退出代码 137 的 Oomkilled 错误)。

我正在使用谷歌 Kubernetes 引擎。

0 投票
1 回答
109 浏览

docker - 如何在 kubernetes 的每个节点而不是 daemonset 中运行作业

有一个 100 个节点的 kubernetes 集群,我必须手动清理特定的图像,我知道 kubelet 垃圾收集可能会有所帮助,但它不适用于我的案例。上网浏览后,我找到了一个解决方案——docker in docker,来解决我的问题。

我只想删除每个节点中的图像一次,有没有办法在每个节点中运行一次作业?

我检查了 kubernetes 标签和 podaffinity,但仍然没有任何想法,任何机构都可以提供帮助吗?

另外,我尝试使用 daemonset 来解决问题,但事实证明它只能删除部分节点而不是所有节点的图像,我不知道可能是什么问题......

这是守护程序集示例:

0 投票
1 回答
36 浏览

kubernetes - 使用 Helm 更新 Kubernetes 作业

我有一个包含 Kubernetes 作业的掌舵图,但不幸helm upgrade的是它无法工作,因为图像名称是不可变的,所以在逻辑上我需要做一个delete,但如果它们首先被定制,install我会失去我的集合。values.yaml

如何在删除图表之前保留这些值并将它们用于新安装以模拟升级?我在文档或此处找不到任何内容。

谢谢