在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 文档。