我有一个Django应用程序正在Kubernetes集群中运行,我想为它实现一个预停止钩子。这里的想法是,无论何时调用prestop钩子,pod/容器都将无法通过就绪探测检查,因此在被集群关闭之前,它不会收到任何新请求。在这种情况下,readiness probe和prestop钩子都是my app:/readiness和/prestop中的api端点
此外,为了使准备就绪探测失败,每当调用/ready时,我必须返回高于400的代码
所以我的问题是,我如何存储一个状态,该状态表示在调用prestop钩子之后,我应该在准备就绪探测中返回400?。请注意,我应该只为调用prestop hook的pod返回400,其他pod/容器应该继续正常工作。因此,我正在寻找一种跟踪单个吊舱/集装箱状态的方法
我做了一个非常愚蠢的测试,看看是否可以在请求之间保持计数器的状态:
class ReadinessProbeView(View):
def __init__(self):
self.count = 0
def get(self, request):
result = {}
self.count = self.count + 1
result["healthy"] = True
result["count"] = self.count
return JsonResponse(result, status=200)
但是,无论我调用这个函数多少次,count = 1
,因此请求之间的状态都不会被维护
有很多不同的解决方案。 根据您的数据大小,您可以将数据存储在sessions对象、apps对象中,甚至可以打开一个小数据库,如sqlite或内存结构,如redis,就像这些家伙所做的那样:
Django: how to store a lot of data between requests if I don't have a database
以下是访问会话数据的入门指南:
https://docs.djangoproject.com/en/3.0/topics/http/sessions/
我遵照@coderanger的建议,使用了一个全局变量。我的准备就绪探测器正在按预期工作
以下是我更新的示例:
相关问题 更多 >
编程相关推荐