Asp.net core 适用于Kestrel.NET核心Web API的Kubernetes就绪性和活跃性探测器
我们的目标是使用Kubernetes水平扩展.NETCore2.0WebAPI。Web API应用程序将由Kestrel提供服务 看起来我们可以通过配置Kestrel的关机超时来优雅地处理POD的终止,所以现在我们正在研究如何探测应用程序以确定就绪性和活跃性 仅仅用HTTP请求探测Web API就足够了吗?如果是这样的话,创建一个新的healthcheck控制器来处理这些探测请求是一个好主意,还是探测一个在正常使用中使用的实际端点更有意义 当区分活跃度和准备度时,我们应该考虑什么? 当活跃度与准备度之间的差异探测时,我们应该考虑什么? 我的建议是在应用程序中提供一个独立于应用程序端点的Asp.net core 适用于Kestrel.NET核心Web API的Kubernetes就绪性和活跃性探测器,asp.net-core,kubernetes,asp.net-core-webapi,kestrel-http-server,Asp.net Core,Kubernetes,Asp.net Core Webapi,Kestrel Http Server,我们的目标是使用Kubernetes水平扩展.NETCore2.0WebAPI。Web API应用程序将由Kestrel提供服务 看起来我们可以通过配置Kestrel的关机超时来优雅地处理POD的终止,所以现在我们正在研究如何探测应用程序以确定就绪性和活跃性 仅仅用HTTP请求探测Web API就足够了吗?如果是这样的话,创建一个新的healthcheck控制器来处理这些探测请求是一个好主意,还是探测一个在正常使用中使用的实际端点更有意义 当区分活跃度和准备度时,我们应该考虑什么? 当活跃度与准
/health
端点。如果您想阻止消费者调用内部健康端点,这非常有用。然后,您可以配置Kubernetes来查询HTTP/health
端点,如下面的示例所示
apiVersion: v1
kind: Pod
metadata:
name: goproxy
spec:
containers:
- name: goproxy
image: k8s.gcr.io/goproxy:0.1
ports:
- name: http
containerPort: 8080
readinessProbe:
httpGet:
port: http
path: /health
initialDelaySeconds: 60
livenessProbe:
httpGet:
port: http
path: /health
在/health
端点内,您应该检查应用程序的内部状态,如果一切正常,则返回状态代码200
,如果应用程序出现问题,则返回状态代码503
。请记住,对于每个实例,通常每15秒执行一次运行状况检查,如果要执行昂贵的操作来确定应用程序状态,则可能会降低应用程序的速度
当活跃度与准备度之间的差异探测时,我们应该考虑什么?
通常,活跃度和准备度探测之间的唯一区别是每个探测中的超时。也许您的应用程序需要60秒才能启动,那么您需要将就绪探测的初始超时设置为60秒,同时保持默认的活动超时 我建议通过单独的端点执行健康检查。 一般来说,这样做有很多好的理由,比如:
Startup.cs
和Program.cs
配置所有内容,并且不需要显式创建新端点,因为库已经为您处理了
我已经在一些项目中使用过它,我肯定会推荐它。
该存储库包含一个特定的ASP.NET核心项目,您可以使用它快速了解最新情况
活力与准备
在Kubernetes中,您可以通过HTTP设置活动性和就绪性探测:如中所述,虽然两者的设置几乎相同,但Kubernetes会根据探测采取不同的操作:
活性探针来自:
许多长时间运行的应用程序最终会转换为中断状态,除非重新启动,否则无法恢复。Kubernetes提供了活力探测器来检测和纠正这种情况
准备就绪探测来自:
有时,应用程序暂时无法为流量提供服务。例如,应用程序可能需要在启动期间加载大型数据或配置文件。在这种情况下,您不想终止应用程序,但也不想向其发送请求。Kubernetes提供准备就绪探测器来检测和缓解这些情况。容器报告未准备就绪的pod不会通过Kubernetes服务接收流量
因此,尽管对liveness探测器的不健康响应会导致Pod(以及应用程序)被终止,但对readiness探测器的不健康响应只会导致Pod在恢复正常状态之前不接收任何流量
<>强>区分活跃性和准备性时应考虑什么?< /强>
对于活性探针:
我建议您定义使应用程序健康的因素,即用户消费的最低要求,并在此基础上实施健康检查。
这通常涉及作为单独进程运行的外部资源或应用程序,例如数据库、web服务等。
您可以使用ASP.NET核心运行状况检查来定义运行状况检查