【问题标题】:Running Django checks in production runtime在生产运行时运行 Django 检查
【发布时间】:2020-09-29 17:19:49
【问题描述】:

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

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

【问题讨论】:

  • 您的 wsgi 是否与 Dev 和 Prod 环境不同,即容器在 prod 和非 prod 环境中的运行方式不同(不包括工作人员配置)? Container probes 是你的起点。
  • 是的,pre-prod 和 prod 有不同的环境。我更愿意在应用程序级别而不是容器中进行。
  • 那么卷将作为容器进程的一部分挂载并验证文件的存在,您可以通过容器中的exec 运行命令或在应用程序代码中编写资源。这些通常是在应用程序实际开始处理任何请求之前验证应用程序状态的预检查。很抱歉重申,但我会建议检查容器探测器(如果你没有)和一个例子在这里Startup probes
  • 谢谢@Saurabh。我会调查探针
  • @StuartBuckingham 你成功了吗?

标签: django kubernetes


【解决方案1】:

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

您的用例可以从 Kubernetes 的角度来解决。您所要做的就是使用Startup probes

kubelet 使用启动探针来了解容器应用程序何时启动 开始了。如果配置了这样的探针,它会禁用活跃度并 准备检查直到成功,确保那些探测不会 干扰应用程序启动。这可以用来采用 对启动缓慢的容器进行活性检查,避免它们获取 在它们启动并运行之前被 kubelet 杀死。

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

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

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

Command 是在容器内执行的命令行, 该命令的工作目录是容器的根目录 ('/') 文件系统。该命令只是简单的执行,它不在一个内部运行 shell,因此传统的 shell 指令('|'等)将不起作用。使用 一个 shell,你需要显式调用那个 shell。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 2011-03-20
    • 2021-01-20
    • 1970-01-01
    • 2018-09-13
    • 2011-07-03
    • 1970-01-01
    • 2020-07-28
    相关资源
    最近更新 更多