livenessProbe
OpenShift Container Platform HAProxy 路由器可以进行扩展或配置以优化性能。
OpenShift Container Platform Ingress 控制器(或路由器)是使用路由和入口配置的应用程序和服务的入口流量入口点。
在评估单个 HAProxy 路由器的每秒处理的 HTTP 请求数的性能方面,性能会因许多因素而异。特别是
HTTP keep-alive/close 模式
路由类型
TLS 会话恢复客户端支持
每个目标路由的并发连接数
目标路由数
后端服务器页面大小
底层基础架构(网络、CPU 等)
虽然您特定环境中的性能会有所不同,但 Red Hat 实验室在大小为 4 vCPU/16GB RAM 的公共云实例上进行了测试。单个 HAProxy 路由器处理 100 个由后端终止的路由(提供 1kB 静态页面),能够处理每秒以下数量的事务。
在 HTTP keep-alive 模式场景中
加密 | LoadBalancerService | HostNetwork |
---|---|---|
无 |
21515 |
29622 |
边缘 |
16743 |
22913 |
直通 |
36786 |
53295 |
重新加密 |
21583 |
25198 |
在 HTTP close(无 keep-alive)场景中
加密 | LoadBalancerService | HostNetwork |
---|---|---|
无 |
5719 |
8273 |
边缘 |
2729 |
4069 |
直通 |
4121 |
5344 |
重新加密 |
2320 |
2941 |
使用默认的 Ingress 控制器配置,spec.tuningOptions.threadCount
字段设置为 4
。测试了两种不同的端点发布策略:负载均衡器服务和主机网络。加密路由使用了 TLS 会话恢复。使用 HTTP keep-alive,单个 HAProxy 路由器能够在页面大小小至 8 kB 时使 1 Gbit NIC 饱和。
在使用现代处理器的裸机上运行时,您可以预期性能大约是上述公共云实例的两倍。此开销是由公共云上的虚拟化层引入的,并且大部分也适用于基于私有云的虚拟化。下表是关于路由器后面应使用多少应用程序的指南
应用程序数量 | 应用程序类型 |
---|---|
5-10 |
静态文件/Web 服务器或缓存代理 |
100-1000 |
生成动态内容的应用程序 |
一般来说,HAProxy 可以支持多达 1000 个应用程序的路由,具体取决于所使用的技术。Ingress 控制器的性能可能受到其后端应用程序的功能和性能的限制,例如语言或静态与动态内容。
应使用 Ingress 或路由器分片来为应用程序提供更多路由,并帮助水平扩展路由层。
有关 Ingress 分片的更多信息,请参阅 使用路由标签配置 Ingress 控制器分片 和 使用命名空间标签配置 Ingress 控制器分片。
您可以使用设置 Ingress 控制器线程数(用于线程)和Ingress 控制器配置参数(用于超时和其他 Ingress 控制器规范中的调整配置)中提供的信息修改 Ingress 控制器部署。
集群管理员可以为由 OpenShift Container Platform Ingress 控制器(路由器)管理的路由器部署配置 kubelet 的存活性、就绪性和启动探针的超时值。路由器的存活性探针和就绪性探针使用默认超时值为 1 秒,当网络或运行时性能严重下降时,这太短了。探针超时可能会导致不需要的路由器重新启动,从而中断应用程序连接。设置更大的超时值可以降低不必要和意外重新启动的风险。
您可以更新路由器容器的livenessProbe
、readinessProbe
和startupProbe
参数中的timeoutSeconds
值。
参数 | 描述 |
---|---|
|
|
|
|
|
|
超时配置选项是一种高级调整技术,可用于解决问题。但是,最终应诊断这些问题,并可能针对任何导致探针超时的相关问题提交支持案例或Jira问题。 |
以下示例演示如何直接修补默认路由器部署以针对存活性和就绪性探针设置5秒的超时时间
$ oc -n openshift-ingress patch deploy/router-default --type=strategic --patch='{"spec":{"template":{"spec":{"containers":[{"name":"router","livenessProbe":{"timeoutSeconds":5},"readinessProbe":{"timeoutSeconds":5}}]}}}}'
$ oc -n openshift-ingress describe deploy/router-default | grep -e Liveness: -e Readiness:
Liveness: http-get http://:1936/healthz delay=0s timeout=5s period=10s #success=1 #failure=3
Readiness: http-get http://:1936/healthz/ready delay=0s timeout=5s period=10s #success=1 #failure=3
更新与路由关联的路由或端点时,OpenShift Container Platform路由器会更新HAProxy的配置。然后,HAProxy会重新加载更新后的配置以使这些更改生效。HAProxy重新加载时,它会生成一个新进程,该进程使用更新后的配置处理新连接。
HAProxy使旧进程继续运行以处理现有连接,直到所有这些连接都关闭。当旧进程具有长期存在的连接时,这些进程可能会累积并消耗资源。
默认最小HAProxy重载间隔为五秒。您可以使用其spec.tuningOptions.reloadInterval
字段配置Ingress Controller以设置更长的最小重载间隔。
设置较大的最小HAProxy重载间隔值可能会导致观察路由及其端点更新的延迟。为了降低风险,请避免设置大于更新可容忍延迟的值。 |
通过运行以下命令,将默认Ingress Controller的最小HAProxy重载间隔更改为15秒
$ oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"tuningOptions":{"reloadInterval":"15s"}}}'