带你读《企业级云原生白皮书项目实战》——3.2.9 nginx controller 最佳调度部署实践

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: 带你读《企业级云原生白皮书项目实战》——3.2.9 nginx controller 最佳调度部署实践

3.2.9 nginx controller 最佳调度部署实践


Nginx Ingress Controller的性能和稳定性

使用合适的副本数和资源限制


默认情况下,通过集群创建或从组件中心安装的Nginx Ingress Controller的副本数为2,您可以根据业务的实际需要进行调整。

在部署Nginx Ingress Controller时,请确保Nginx Ingress Controller分布在不同的节点上,避免不同Nginx Ingress Controller之间资源的抢占和单点故障。您也可以为其使用独占节点来保证性能与稳定性,具体操作,请参见使用独占节点保证Nginx Ingress性能与稳定性。同时建议您不要为Nginx Ingress Controller设定资源限制,避免OOM所带来的流量中断。如果确实有限制的需要,建议资源限制CPU不低于1000 Milicore(YAML配置里格式为1000m)和内存不低于2 GiB。

通过Nginx Ingress Controller代理非HTTP请求

Nginx Ingress Controller 默认使用HTTP协议连接到后端服务,但同时提供了对多种后端协议的支持,其中比较常用的协议有WebSocket、HTTPS和gRPC。关于支持的后端协议具体类型,请参见Backend Protocol。

WebSocket:Nginx Ingress Controller提供了对WebSocket的原生支持,您不需要进行任何配置即可转发WebSocket连接。如果您有持续较长的WebSocket连接,可以通过Annotation适当地调整后端连接的超时时间,防止业务因为超时而断连。关于调整的具体操作,请参见Custom timeouts。

HTTPS:针对使用HTTPS的后端服务,您可以在Ingress中添加nginx.ingress.kubernetes.io/backend-protocol:"HTTPS"的Annotation切换为HTTPS连接。

gRPC:gRPC仅支持通过TLS端口访问。因此,请确保您的业务通过Nginx Ingress Controller访问gRPC服务时,使用的是加密的TLS端口。关于配置gRPC的具体操作,请参见通过Ingress Controller实现gRPC服务访问。


部署高负载场景的Ingress Controller

•硬件选型在高并发场景下,Ingress对CPU资源和网络连接数占用都非常高,所以可选增强型ECS实例

系统选择Aliyun操作系统

阿里云上的操作系统已经默认优化了一些常见参数,其他还需要调优的系统参数主要包括系统最大Backlog数和可用端口的最大范围。系统参数调优后可以保证Nginx处理高并发请求的能力,以及在连接后端时不会因为端口耗尽而失败。

•K8s配置

•设置Ingress Pod独占节点资源

•设置CPU Policy为static。

•推荐调整ingress-controller 1 service对应的SLB规格为超强型(slb.s3.large)。

•推荐集群使用Terway网络插件及配置独占ENI。

•Ingress配置

•设置Ingress Pod为Guaranteed类型。

•设置nginx-ingress-controller1container的资源限制requests和limits:15 Core 20 GiB。

•设置initContainer init-sysctl的资源限制requests和limits:100 m 70 MiB。

•删除Ingress Pod中的podAntiAffiffiffinity,使一个节点上可调度两个Pod。

•调整Deployment Replicas数为新增节点数的2倍。

•设置ConfifigMap的worker-processes数为15(预留部分给系统使用)。

•调整ConfifigMap的keepalive链接最大请求数。

•关闭日志访问记录。

按照负载配置HPA进行自动扩容

一般情况下,Nginx Ingress Controller已经有足够的能力应对业务的突发流量。如果在高负载情况下仍不满足您的要求,也可以配置HPA对Ingress Controller进行扩容。具体操作,请参见容器水平伸缩(HPA)。

提升Nginx Ingress Controller的可观测性

使用SLS和ARMS Prometheus服务提升可观测性

Nginx Ingress Controller提供了基于SLS日志以及Prometheus的监控大盘,帮助您更好地了解您的业务的流量情况。

•SLS日志:

•创建集群时,如果您已经选中了启用日志组件及Ingress Dashboard,您就可以直接通过容器服务管理控制台网络 > 路由页面的Ingress概览中查看到基于SLS日志服务提供的大盘服务,您也可以直接在运维管理 > 日志中心查看到Nginx Ingress Controller产生的相关日志。具体操作,请参见Ingress访问日志分析与监控。

•如果您在创建时没有选中日志以及Ingress的相关选项,也可以手动配置日志收集组件和规则。具体操作,请参见Ingress访问日志分析与监控。关于监控的更多信息,请参见Ingress Dashboard监控。

•ARMS Prometheus监控:ARMS Prometheus监控可以在创建集群时选择安装,或者在创建集群后通过运维管理 > Prometheus监控安装或查看。具体操作,请参见ARMS Prometheus监控。说明 使用ARMS Prometheus监控时,请为集群中的Ingress资源添加host字段,否则在默认情况下,该Ingress的部分metrics将会缺失。您也可以通过在Nginx Ingress Controller的Deployment中修改controller启动参数,加入--metrics-per-host=false来解决该问题。

使用AHAS流量防护实现流控

Nginx Ingress Controller整合了阿里云AHAS流量防护的产品功能,可以实现更加精细的流量控制。当有请求流量时,您可以在AHAS控制台中查看Nginx网关请求的实时QPS和RT等数据。具体开启的操作步骤,请参见使用Ingress-sentinel实现流控

相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
相关文章
|
5月前
|
弹性计算 运维 监控
快速部署 Nginx 社区版
Nginx是一个高性能的HTTP和反向代理服务器。Nginx在计算巢上提供了社区版服务,您无需自行配置云主机,即可在计算巢上快速部署Nginx服务、实现运维监控,从而方便地基于Nginx搭建您自己的应用。本文介绍使用如何通过计算巢快速部署Nginx社区版。
快速部署 Nginx 社区版
|
3月前
|
存储 Cloud Native 块存储
EBS深度解析:云原生时代企业级块存储
企业上云的策略,从 Cloud-Hosting 转向 Serverless 架构。块存储作为企业应用上云的核心存储产品,将通过 Serverless 化来加速新的计算范式全面落地。在本话题中,我们将会介绍阿里云块存储企业级能力的创新,深入解析背后的技术细节,分享对未来趋势的判断。
225 2
|
4月前
|
前端开发 JavaScript 应用服务中间件
使用nginx部署网站
使用nginx部署网站
|
4月前
|
JavaScript 应用服务中间件 nginx
nginx部署vue项目
本文介绍了将Vue项目部署到Nginx的步骤,包括构建Vue项目、上传dist文件夹到服务器、安装Nginx、配置Nginx代理静态文件以及重启Nginx,确保了Vue应用可以通过域名或IP地址访问。
213 1
|
4月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
1177 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
4月前
|
Kubernetes 应用服务中间件 nginx
k8s基础使用--使用k8s部署nginx服务
本文介绍了Kubernetes中核心概念Deployment、Pod与Service的基本原理及应用。Pod作为最小调度单元,用于管理容器及其共享资源;Deployment则负责控制Pod副本数量,确保其符合预期状态;Service通过标签选择器实现Pod服务的负载均衡与暴露。此外,还提供了具体操作步骤,如通过`kubectl`命令创建Deployment和Service,以及如何验证其功能。实验环境包括一台master节点和两台worker节点,均已部署k8s-1.27。
274 1
|
5月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
5月前
|
应用服务中间件 nginx Docker
docker应用部署---nginx部署的配置
这篇文章介绍了如何使用Docker部署Nginx服务器,包括搜索和拉取Nginx镜像、创建容器并设置端口映射和目录映射,以及如何创建一个测试页面并使用外部机器访问Nginx服务器。
|
4月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
243 0
|
5月前
|
负载均衡 网络协议 Unix
Nginx负载均衡与故障转移实践
Nginx通过ngx_http_upstream_module模块实现负载均衡与故障转移,适用于多服务器环境。利用`upstream`与`server`指令定义后端服务器组,通过`proxy_pass`将请求代理至这些服务器,实现请求分发。Nginx还提供了多种负载均衡策略,如轮询、权重分配、IP哈希等,并支持自定义故障转移逻辑,确保系统稳定性和高可用性。示例配置展示了如何定义负载均衡设备及状态,并应用到具体server配置中。

热门文章

最新文章