首页 > 解决方案 > Asp.net 核心 Kubernetes 作业设置为异常失败状态

问题描述

我有一个在 Asp.net Core 中运行 BackgroundService 的 Kubernetes 作业。

在进行一些处理后,BackgroundService 通过调用 StopApplication 启动关闭。

当 BackgroundService 出现异常时,有没有办法关闭应用程序并将 Kubernetes 作业设置为失败状态?

标签: asp.net-corekubernetes

解决方案


“有没有办法关闭应用程序并将 Kubernetes 作业设置为失败状态......?”

是的,通过预期您的应用程序在遇到异常时将以非零退出代码退出。Kubernetes Job 的最终状态就是这样确定的。

换句话说,如果容器的进程以非零代码结束,它会导致 Pod 终止,最终 Job 状态变为'Failed'.

如果以编程方式停止 ASP.NET Core 应用程序,使用'StopApplication()'方法,它会以退出代码退出(此处'0'的示例用法)。

可能的解决方案:

StopApplication()您的程序需要通过事先将退出代码显式设置为非零值 ( )来处理异常,甚至像正常关闭 = 一样[1,250]

伪代码:

        catch (Exception ex)
        {
            _logger.LogError(ex, "Worker process caught exception");

            Environment.ExitCode = 1;
        }
        finally
        {
            applicationLifetime.StopApplication();
        }

基于此处的示例。


推荐阅读