在生产运行时运行Django检查

在生产运行时运行Django检查,django,kubernetes,Django,Kubernetes,我有一个部署在kubernetes上的Django应用程序。容器还有一个到持久卷的挂载,该持久卷包含操作所需的一些文件。我想做一个检查,每次pod启动时,检查文件是否存在并可在运行时访问。Django文档建议不要在生产环境中运行检查(应用程序在uwsgi中运行),因为文件仅在生产环境中可用,所以在单元测试时检查将失败 在生产中执行检查的可接受流程是什么?这是一个社区wiki答案,旨在提高可视性。请随意扩展它 您的用例可以从Kubernetes的角度进行处理。您所要做的就是使用: kubelet使

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


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

这是一个社区wiki答案,旨在提高可视性。请随意扩展它

您的用例可以从Kubernetes的角度进行处理。您所要做的就是使用:

kubelet使用启动探测来了解容器应用程序何时启动 已经开始了。如果配置了这样的探测器,它将禁用活动性和 准备状态检查,直到成功,确保这些探测不会 干扰应用程序的启动。这可以用来采用 在缓慢启动的容器上进行活动性检查,避免它们 他们还没来得及行动就被kubelet杀死了

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

    exec:
      command:
        - stat
        - /file_directory/file_name.txt
您也可以使用shell脚本,但请记住:

命令是要在容器内执行的命令行 该命令的工作目录是容器的 文件系统。该命令只是简单地执行,而不是在 shell,因此传统的shell指令(“|”等)无法工作。使用 一个shell,您需要显式地调用该shell


您的wsgi是否不同于Dev-to-Prod-env,即在Prod和非Prod环境中运行的容器是否不同(不包括worker配置)?。是你的起点是的,pre-prod和prod有不同的环境。我更喜欢在应用程序级别而不是容器中执行。卷将作为容器进程的一部分进行装载,为了验证文件的存在,您可以在容器中运行command Through
exec
,也可以在应用程序中写入资源代码。这些通常是在实际开始处理任何请求之前验证应用程序状态的预检查。抱歉再次重申,但我建议您检查容器探测(如果您没有),这里的示例谢谢@Saurabh。我会调查这件事的probes@StuartBuckingham你成功了吗?