uvicorn 启动期间,Kubernetes 集群中的子进程死亡

问题描述 投票:0回答:4

我们的应用程序使用 FastAPI 版本

0.111.0
uvicorn
服务器启动如下图:

  uvicorn.run(
                "main:app",
                host='0.0.0.0',
                port=8080,
                log_level="DEBUG",
                workers=3
            )

在我们的开发/测试环境中,这适用于 Windows 计算机。当我们将此代码部署到 Azure Kubernets 集群时,子进程在启动过程中会终止。

错误信息:

INFO:     Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
INFO:     Started parent process [1]
INFO:     Waiting for child process [12]
INFO:     Child process [12] died
INFO:     Waiting for child process [13]
INFO:     Child process [13] died
INFO:     Waiting for child process [14]
INFO:     Child process [14] died
INFO:     Waiting for child process [13]
INFO:     Child process [13] died
INFO:     Waiting for child process [15]

如果我们删除

workers
调用的
uvicoen.run
参数,应用程序将在 AKS 中启动。我想了解,为什么子进程会因
workers
参数而终止。

python-3.x kubernetes fastapi azure-aks uvicorn
4个回答
0
投票

0
投票

这里也一样。 回滚到旧版本的 fastapi。

pip install fastapi[all]==0.110.3

编辑:不起作用。

编辑2:将工人从4人改为2人,工作了

编辑3:又发生了。 将工人从 2 人改为 1 人,工作了


0
投票

我的 fastapi 应用程序的请求/限制 cpu 设置已过期,该应用程序在小型 AKS 节点上运行 5 个子线程。

我注意到,当 pod 的 cpu 限制值太低时,子进程在初始启动期间会崩溃。

在我们的例子中(非常简单的 API),我不得不将限制设置为 400mi(我的请求保持在 20mi)。 在 0.5 分钟左右的时间里,吊舱使用了 330 英里,一旦启动,它就会下降到 10 英里。

我看到的唯一一致的事情是第一个生成的子进程仍然崩溃。但那直接被另一个子进程替代了。

也许当您不指定任何限制并且 pod 部署在可用 cpu 不足的节点上时,它就无法正确启动。

我还想知道将代码预编译为 pyc 可能会减少对更高限制的需求。


-1
投票

提供您的 Dockerfile。

  1. 尝试使用 docker 在本地计算机上运行映像。
  2. 检查k8s中的资源限制
  3. 尝试在 minikube 或类似的东西上运行容器。检查它的行为是否相同
  4. 尝试将工人数量限制为 1,而不完全移除生产线
  5. 如果您找到原因,请不要分享
© www.soinside.com 2019 - 2024. All rights reserved.