阿里云k8s环境下,因slb限额导致的发布事故

2024-03-11 12:36

本文主要是介绍阿里云k8s环境下,因slb限额导致的发布事故,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

阿里云k8s容器,在发布java应用程序的时候,客户端访问出现500错误。

后端服务是健康且可用的,网关层大量500错误请求,slb没有流入和流出流量。

经过回滚,仍未能解决错误。可谓是一次血的教训,特此记录下来,如果你也使用的是阿里云slb来实现k8s的service,值得一看,希望对你有所帮助。

在讲述这个事故前,我们还是照旧把系统架构交待清楚。

补充说明

指标的区别:一个k8s节点允许注册到slb的数量限制 与 一个slb允许注册的端口数量限制

前者在本文也未能找到查看之处,还望知晓的同学指点一二。示意图见下:
在这里插入图片描述

后者在文末的总结有说明,为了和前者进行对比,也画出其示意图:
在这里插入图片描述

这两个指标的理解对本文发生的事故非常重要。

二、系统架构

在这里插入图片描述

1、kong upsteam

配置的是slb的内网IP+端口号
在这里插入图片描述

2、k8s的服务service

在这里插入图片描述

3、slb监听虚拟服务器

在这里插入图片描述
在这里插入图片描述

下面是重点需要关注的,,虚拟服务器组下的四个服务器,对应的就是4个pod的ip地址。

本文所述的发布事故,就是这里的服务器没有及时更新导致。

在这里插入图片描述

4、pod的ip地址

在这里插入图片描述
绿色的“Running”,表示Pod节点运行健康。
我这里使用了服务注册中心consul,从consul也能佐证java服务是健康无疑。

在这里插入图片描述

当然我还进一步验证,直接访问pod的接口,比如/info和/health接口,返回的版本号和健康状态也都是正常。

三、问题排查

1、kong网关报错

23937#0: *2832787172 connect() failed (111: Connection refused) while connecting to upstream
request: request: "PUT /api/v3/pub/user/extend HTTP/1.1"

在这里插入图片描述

2、slb监控

可以看到,出现故障之后,连接数和流量将至零。也就是说,http请求没有能够进入后端pod节点。

在这里插入图片描述

3、k8s容器的服务service

在这里插入图片描述

Error syncing load balancer [lb-bpxxxxxxxxxx6ndspgh]: Message: There is backend server has reached to the quota limit number of load balancers that it could be related to.

根据错误信息,查找阿里云的帮助文档,https://help.aliyun.com/zh/slb/classic-load-balancer/developer-reference/api-slb-2014-05-15-errorcodes

见下:

在这里插入图片描述
由此可见,是配额限制了。

继续查找文档,
https://help.aliyun.com/zh/slb/classic-load-balancer/product-overview/limits-1

在这里插入图片描述
可以看到,这里是默认50,所以我们到slb的配额设置查看,并申请调整至80。

在这里插入图片描述

申请调额:

在这里插入图片描述

四、踩过的坑

比较明确的一点是,问题出在slb。所以我们的思路,先是换一个,不行之后,又新建一个全新的slb。其实,问题在于我们忽视了k8s对很多指标的配额阈值。

1、slb的每个实例可以保有的监听数量超过了限制

所以尝试把k8s的服务service修改到另外一个slb,结果还是一样报错。

2、新建一个slb,跟上面的报错一样。

service状态一直是创建中

在这里插入图片描述

3、配额限制

我们缺少监控和报警,导致我们的思路,一直不能理解发布为啥会突然出错。
在这里插入图片描述

五、总结

1、Kong upstream配置pod IP

在没有解决问题前,只能在Kong的upstream配置pod IP,而非slb ip。虽然能解决,但是不够动态,显然是临时解决方案。

因为我们没有去做动态注册kong upstream。

2、阿里云的限额配置不直观

说同一台服务器可以重复添加为slb后端服务器的次数使用了53,可是到底是哪些,并不知晓。。为啥不弄个明细给用户可以查看。

3、每个实例可以保有的监听数量

在这里插入图片描述
这里已使用的数量达到85个。

像我购买了多个slb,好一通寻找。这里给你一个方向:
在这里插入图片描述
核实的方法是TCP关键词,统计其数量是否等于85.

在这里插入图片描述
可以看到,这个slb注册的tcp端口数更好是85,也是最多端口的slb。

4、架构的优化

  • 去slb的依赖
  • kong部署到k8s
  • 引入ingress网关
  • 使用k8s内部的发现机制

这篇关于阿里云k8s环境下,因slb限额导致的发布事故的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797825

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

MySQL版本问题导致项目无法启动问题的解决方案

《MySQL版本问题导致项目无法启动问题的解决方案》本文记录了一次因MySQL版本不一致导致项目启动失败的经历,详细解析了连接错误的原因,并提供了两种解决方案:调整连接字符串禁用SSL或统一MySQL... 目录本地项目启动报错报错原因:解决方案第一个:第二种:容器启动mysql的坑两种修改时区的方法:本地

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

SpringBoot实现多环境配置文件切换

《SpringBoot实现多环境配置文件切换》这篇文章主要为大家详细介绍了如何使用SpringBoot实现多环境配置文件切换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 示例代码结构2. pom文件3. application文件4. application-dev文

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题

《Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题》:本文主要介绍Ubuntu上手动安装Go环境并解决“可执行文件格式错误”问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录一、前言二、系统架构检测三、卸载旧版 Go四、下载并安装正确版本五、配置环境变量六、验证安装七、常见

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.