我有一个在Kubernetes集群中运行的Django应用,我想为其实现一个prestop挂钩。这里的想法是,每当调用prestop挂钩时,pod /容器将通过就绪探针检查失败,因此在被集群关闭之前不会接收任何新请求。在这种情况下,就绪探针和prestop钩子(Hook)都是我应用程序中的api端点:/ readiness和/ prestop。
另外,要使准备就绪测试失败,无论何时调用/ readiness,我都必须返回高于400的代码。
所以我的问题是,如何存储一个状态,该状态表示在调用prestop钩子(Hook)后应该在就绪探针中返回400?请注意,我只应为调用了prestop挂钩的 pods 返回400,其他 pods /容器应继续正常运行。因此,我正在寻找一种跟踪单个 pods /容器状态的方法。
我做了一个非常愚蠢的测试,看看是否可以保持请求之间的计数器状态:
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
多少次,都不会在请求之间保持状态。 最佳答案
有很多不同的解决方案。
根据您的数据大小,您可以将数据存储在session对象,apps对象中,甚至可以打开小型数据库(例如sqlite或内存结构),例如像这些家伙一样做redis:
Django: how to store a lot of data between requests if I don't have a database
这是访问 session 数据的入门:
https://docs.djangoproject.com/en/3.0/topics/http/sessions/