2

对于一些故障排除,我需要手动将正在运行的作业的状态从active更改successful为 以使其完成。作业本身就是一个没有完成的无限循环。无法使用删除作业的选项,因为它将作业置于失败状态。

更新:该作业实际上并没有失败,而是卡住了,因此我将其删除,使其进入失败状态。此外,无法更改作业的代码(它不是 bash 脚本)。

谢谢

4

1 回答 1

2

在我看来,你对治疗问题的症状比治疗问题背后的实际原因更感兴趣。

这是为了快速排除故障,我不想停止其余的工作来为该作业的状态添加旁路。

我认为更快的方法是真正确保您的其他作业对这个作业的依赖程度较低,而不是试图强制 Kubernetes 将此作业/Pod 标记为成功。

我能达到你目标的最接近的事情是curl直接使用kube-proxy. 但是该解决方案仅在作业首先失败并且不幸的是它不适用于正在运行的 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

PS。我尝试通过这种方式将作业或 pod 的状态设置为成功/完成,但这是不可能的。状态改变了一会儿,然后controller-manager又恢复到运行状态。也许这个window状态改变的小可能是你想要的,它会让你的其他工作继续前进。我只是假设这一点,因为我不知道细节。

有关如何以这种方式访问​​ API 的更多信息,请查看using kubectl文档。

于 2021-01-28T14:17:39.367 回答