如何解决在 kubernetes 中手动将作业的状态更改为成功
对于某些故障排除,我需要手动将正在运行的作业的状态从 active
更改为 successful
以使其完成。作业本身是一个无法完成的无限循环。无法使用删除作业的选项,因为它会使作业处于失败状态。
更新:作业实际上并没有失败,而是卡住了,因此我将其删除,使其进入失败状态。此外,无法更改作业的代码(它不是 bash 脚本)。
谢谢
解决方法
在我看来,您对治疗问题的症状比解决问题背后的实际原因更感兴趣。
这是为了快速排除故障,我不想停止其余部分 添加绕过此作业的状态。
我认为更快的方法是确保您的其他作业不那么依赖这个作业,而不是试图强制 Kubernetes 将此作业/Pod 标记为成功。
我能达到的最接近您的目标是使用 curl
直接 kube-proxy
api-server。但该解决方案仅在作业先失败时才有效,不幸的是它不适用于正在运行的 Pod。
在这个例子中,我使用了以状态 1 退出的作业:
containers:
- name: job
image: busybox
args:
- /bin/sh
- -c
- date; echo sleeping....; sleep 5s; exit 1;
然后运行kubectl-proxy
:
➜ ~ kubectl proxy --port=8080 &
[1] 18372
➜ ~ Starting to serve on 127.0.0.1:8080
并将状态发布到 api-server:
curl localhost:8080/apis/batch/v1/namespaces/default/jobs/job3/status -XPATCH -H "Accept: application/json" -H "Content-Type: application/strategic-merge-patch+json" -d '{"status": {"succeeded": 1}}'
],"startTime": "2021-01-28T14:02:31Z","succeeded": 1,"failed": 1
}
}%
如果然后检查作业状态,我可以看到它被标记为已完成。
➜ ~ k get jobs
NAME COMPLETIONS DURATION AGE
job3 1/1 45s 45s
附注。我尝试通过这种方式将作业或 Pod 的状态设置为成功/完成,但这是不可能的。状态暂时改变了,然后 controller-manager
将状态恢复为 running。也许这个状态改变的小 window
可能是你想要的,它会让你的其他工作继续前进。我只是假设,因为我不知道细节。
有关如何以这种方式访问 API 的更多信息,请查看 using kubectl 文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。