我有一个在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/

09-30 11:50