首页 > 解决方案 > 在生产运行时运行 Django 检查

问题描述

我有一个部署在 kubernetes 上的 Django 应用程序。该容器还安装了一个持久卷,其中包含一些操作所需的文件。我想要进行检查,以检查文件是否存在并且在每次 pod 启动时在运行时可访问。Django 文档建议不要在生产环境中运行检查(应用程序在 uwsgi 中运行),并且由于文件仅在生产环境中可用,因此在单元测试时检查将失败。

在生产中执行检查的可接受流程是什么?

标签: djangokubernetes

解决方案


这是为更好的可见性而发布的社区 wiki 答案。随意扩展它。

您的用例可以从 Kubernetes 的角度来解决。您所要做的就是使用启动探针

kubelet 使用启动探针来了解容器应用程序何时启动。如果配置了这样的探针,它将禁用活动性和就绪性检查,直到成功,确保这些探针不会干扰应用程序启动。这可用于对启动缓慢的容器进行活性检查,避免它们在启动和运行之前被 kubelet 杀死。

有了它,您可以使用将在容器内执行指定命令的ExecAction 。如果命令以状态码 0 退出,则诊断将被视为成功。简单命令检查的示例可能是检查特定文件是否存在:

    exec:
      command:
        - stat
        - /file_directory/file_name.txt

您也可以使用 shell 脚本,但请记住:

命令是要在容器内执行的命令行,命令的工作目录是容器文件系统中的根目录('/')。该命令只是 exec'd,它不在 shell 内运行,因此传统的 shell 指令('|'等)将不起作用。要使用 shell,您需要显式调用该 shell。


推荐阅读