在kubernetes中手动将作业状态更改为成功
Manually change the status of a job to successful in kubernetes
对于一些故障排除,我需要手动将 运行 作业的状态从 active
更改为 successful
以使其完成。作业本身是一个无法完成的无限循环。无法使用删除作业的选项,因为它会使作业处于失败状态。
更新:作业实际上并没有失败,而是卡住了,因此我删除了它,使其进入失败状态。此外,无法更改作业代码(它不是 bash 脚本)。
谢谢
在我看来,您对治疗问题的症状而不是背后的实际原因更感兴趣。
This is for quick troubleshooting where I do not want to stop the rest
to add a bypass for the status of this job.
我认为更快的方法是实际确保您的其他工作不太依赖于此工作,而不是试图强制 Kubernetes 将此 Job/Pod 标记为成功。
我最接近您的目标的是 curl
api-server 直接与 kube-proxy
。但是该解决方案仅在作业首先失败时才有效,不幸的是它不适用于 运行ning pods.
对于这个例子,我使用了以状态 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
和post状态到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
PS。我尝试通过这种方式将作业或 Pod 的状态设置为 successful/completed,但这是不可能的。状态暂时改变,然后 controller-manager
将状态恢复为 运行ning。也许这个状态改变的小 window
可能是你想要的,它会让你的其他工作继续进行。我只是假设这个,因为我不知道细节。
有关如何以这种方式访问 API 的更多信息,请查看 using kubectl 文档。
对于一些故障排除,我需要手动将 运行 作业的状态从 active
更改为 successful
以使其完成。作业本身是一个无法完成的无限循环。无法使用删除作业的选项,因为它会使作业处于失败状态。
更新:作业实际上并没有失败,而是卡住了,因此我删除了它,使其进入失败状态。此外,无法更改作业代码(它不是 bash 脚本)。
谢谢
在我看来,您对治疗问题的症状而不是背后的实际原因更感兴趣。
This is for quick troubleshooting where I do not want to stop the rest to add a bypass for the status of this job.
我认为更快的方法是实际确保您的其他工作不太依赖于此工作,而不是试图强制 Kubernetes 将此 Job/Pod 标记为成功。
我最接近您的目标的是 curl
api-server 直接与 kube-proxy
。但是该解决方案仅在作业首先失败时才有效,不幸的是它不适用于 运行ning pods.
对于这个例子,我使用了以状态 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
和post状态到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
PS。我尝试通过这种方式将作业或 Pod 的状态设置为 successful/completed,但这是不可能的。状态暂时改变,然后 controller-manager
将状态恢复为 运行ning。也许这个状态改变的小 window
可能是你想要的,它会让你的其他工作继续进行。我只是假设这个,因为我不知道细节。
有关如何以这种方式访问 API 的更多信息,请查看 using kubectl 文档。