当容器集群的CPU、内存请求率以及使用率达到70%以后,需要对集群进行扩容以保证当出现以外流量峰值的时候,有足够的集群资源可以用于应用扩容。
1)节点内部系统升级或者规格升级
先排空节点,将节点上的pod进行驱逐(重新调度到其他节点)
升级操作完成后将节点设置为可调度
2)节点不可用时处理方法,https://www.yuque.com/fczggw/wu7u0k/cxzzca#4RUwi
具体请参考:节点运维手册
为每个集群配置事件告警,可以及时发现集群节点运行时问题,例如节点不可用、docker异常、磁盘等资源不足等问题。告警使用文档:https://www.yuque.com/fczggw/wu7u0k/nbfa90
关于告警联系人的设置:https://www.yuque.com/fczggw/wu7u0k/nbfa90#laROP
关于事件类型选择:
目前,我们推荐配置四种类型,
首先,通用warning包含了集群上Node级别的所有Warning事件,比如OOM、docker hung、PLEG异常等,能够比较广泛的感知到节点上的一般异常警告事件。节点不可用,是节点运行期间偶尔会出现的问题,会较大的影响节点上容器的运行和新部署容器的调度。节点磁盘等资源不足,也是云应用运行期间,影响比较大的异常问题,特别是当磁盘使用率达到一定值时,节点上的容器会被驱逐然后被集群重新调度,大面积的驱逐会影响云应用的稳定性。综上,这四种事件类型强烈建议配置上。
异常事件参加解决方案:
https://www.yuque.com/fczggw/wu7u0k/yrsmk6#IhNms
应用扩容是指针对应用的某个环境扩容应用实例,比如将应用实例个数从1个调整到2个。
请在「环境管理-实例管理-手动扩缩容」执行扩缩容操作。
注:
1、如果碰到应用扩容资源不足的问题(https://www.yuque.com/fczggw/wu7u0k/riku5o#c62iS),请先去集群管理,扩容集群。再来扩容应用。
2、扩容或容器漂移时报错403 AccessDenied,请参考:https://www.yuque.com/fczggw/wu7u0k/riku5o#jS95n
应用的CPU内存配置决定了每个容器使用多少计算资源。
CPU/内存请求值:约束了容器最低的起始计算资源
CPU/内存限制值:约束了容器最多可使用计算资源,内存用量超过该值,容器会因为OOM被强制Kill
请在「环境管理-实例管理-实例规格」调整容器的CPU以及内存。
容器实例的CPU和内存配置需要重新发布后生效。
应用的健康检查配置至关重要,决定了容器是否可以正常对外提供服务。目前应用健康检查分为两类:
【重要】健康检查配置注意事项
应用视图,查看具体某个应用下的监控。
入口:左侧菜单栏-监控告警-应用告警
地址:https://console.cloud.tmall.com/component/monitoralarm#/index
告警范围:
说明文档:https://www.yuque.com/fczggw/wu7u0k/nbfa90
为云应用-环境配置相应的阈值告警,支持规则模板复用,也可单独配置告警规则。
由于每个云应用的容器规格不一,建议对单个环境进行规则配置
规则设置时,请按照容器规格的限制值进行合理配置。举个例子,当前环境CPU请求和限制值分别为2和4核。
如果想设置当CPU使用超过70%则进行告警,那么告警规则中可以设置4*0.7=2.8 core
前提:需要给集群安装节点探查组件,并且给集群开通事件告警。事件告警操作手册
组件安装好后,就可以为云应用环境配置Pod基本事件告警了:
关于告警联系人的设置:https://www.yuque.com/fczggw/wu7u0k/nbfa90#laROP
关于事件类型选择:
目前,我们推荐配置四种类型,
首先,通用warning包含了该应用下Pod容器级别的所有Warning事件,比如实例重启、探针失败、驱逐等,能够比较广泛的感知到节点上的一般异常警告事件。容器重启,很多云应用都会出现运行一段时间自动重启的现象,一般是由于配置了健康检查且健康检查失败导致,会伴随有探针失败等事件。POD驱逐,也是云应用运行过程中很容器导致业务稳定性稳定的事件,一般是由于节点异常或者节点资源使用达到集群阈值(特别是系统盘磁盘不足)。综上,这几种事件类型强烈建议配置上。
异常事件参加解决方案:
https://www.yuque.com/fczggw/wu7u0k/yrsmk6#lfIj5
通过 资源视图
- 弹性公网 IP
进入列表页如下图,找到需要升配的 EIP
列表最右侧点击变配,即可调整带宽大小,(预付费只可升配,可以点击短期升配到时间后会自动降配)
根据需要选择共享带宽的类型
a.直接在共享带宽页面点击添加 IP
b.到弹性公网 IP 列表页进行添加
直接在共享单款一栏点击加入加入即可
对于 预付费固定带宽 无法直接添加到共享带宽中,需要首先转换为后付费模式,之后才可以进行添加
在共享带宽列表,点击操作列中的更多操作,点击变配,即可改变提升或者降低带宽大小(预付费只可升配,可以点击短期升配到时间后会自动降配)
这里主要针对使用 按流量计费的EIP带宽资源不足 的情况
EIP 绑定的维度为交换机或者 ECS,如果将 EIP 绑定到 ECS 上,则可以跳过第一步,即无需创建交换机
创建是选择的专有网络需要与ECI所在集群的专有网络一致
选择后付费-按使用流量计费模式
注:对于交换机维度的情况,一个交换机下的所有 ECS 均使用该交换机绑定的 EIP 访问公网,如果 ECS 分布不均,可能会导致部分 EIP 流量打满
具体各类异常事件介绍请参考: https://www.yuque.com/fczggw/wu7u0k/yrsmk6。
这里列出几个重要的事件类型
Container Restart
该事件表示应用实例(重启)重启,一般是由于配置了健康检查且健康检查失败导致,会伴随有Readiness probe failed和Liveness probe failed等事件。健康检查失败的原因有很多,通常情况下,比如进程OOM被Kill、比如高负载情况下应用无法正常响应(例如RDS瓶颈导致应用线程全部hang住),都可能会导致健康检查失败。
需要结合临近的相关事件定位具体的Pod重启原因。如伴随有集群节点相关的Out of memory事件,参考此文档上面Out of memory事件的解决方案;其他情况下,结合应用监控或者云产品自身监控来定位问题
The node was low on resource: xxxx
The node had condition: xxx
该事件表示Pod由于节点上的异常情况被驱逐,比如The node had condition: [DiskPressure],表示节点磁盘使用率比较高,通常会伴随有 failed to garbage collect required amount of images 和 Attempting to reclaim ephemeral-storage 等集群维度(节点)的异常事件。
需要结合临近的相关事件定位具体的驱逐原因。对于已经被驱逐的Pod实例,可以在聚石塔控制台,环境管理-管理资源-异常实例,进行查看和手动清理
Liveness probe failed
Readiness probe failed
由于应用存活/就绪探针失败而引发的异常事件。该事件可能会导致后续达到一定阈值之后,容器被动重启。具体要看应用就绪探针的配置。
需要结合应用存活/就绪探针的配置(https://www.yuque.com/fczggw/wu7u0k/fvv2kv#q3K10),定位探针检查失败的原因。
System OOM encountered
Out of memory: Kill process
一般是操作系统把容器内进程Kill而导致的系统内核事件。比如一个java应用,当实际占用内存超过堆内存配置大小时,就会出现OOM错误。
Memory cgroup out of memory: Kill process
由于容器的内存实际使用量超过了容器内存限制值而导致的事件。比如容器的内存限制值配置了1Gi,而容器的内存随着容器内进程内存使用量的增加超过了1Gi,就会导致容器被操作系统Cgroup Kill
节点资源不足(EvictionThresholdMet),一般是节点资源将要达到阈值,可能会触发Pod驱逐。如 Attempting to reclaim ephemeral-storage(参考https://www.yuque.com/fczggw/wu7u0k/yrsmk6#dqkWn)
参考节点运维手册:https://www.yuque.com/fczggw/wu7u0k/cxzzca
1)首先通过查看系统日志,看下后端是否有明显的报错日志。如果有明显的报错,则需要自己根据异常来判断错误原因;
查看日志方式:
2)如果未发现明显的异常日志,则一般是SLB的规格过低导致连接被断开或拒绝,此种情况需要升级SLB的规格
观察SLB负载情况:观察SLB负载情况:
聚石塔控制台 -> 资源视图 -> 负载均衡
升级SLB规格:升级SLB规格:
如果发布时系统流量太大导致发布不成功或卡住,一般表现为:
a) 外部流量比平时正常情况下要高出较多
b) 应用实例刚开始能启动,但随后很快就被重启,发布单一直处于部署中状态
1)先走应用实例扩容操作,保障应用水位处于一个相对较低的水位。
2)(如果扩容成功,跳过此步)如果扩容起不来新的应用实例,说明已有的应用实例都处于假死状态,请按以下步骤解决:
a) 可以先将健康检查配置为肯定能成功的,比如:脚本类型的 return "success",优先保障pod能起来接收流量,并且调大应用实例数量,然后提交新的发布单
b)如果调整健康检查后扔未能扩容成功,一般不会出现这种情况;极端情况下可以考虑将外部流量暂时摘除,不让流量进来。此时再去扩容,扩容成功后再将流量引入。注意:流量摘除后对外的服务也将完全不可用,此方案请慎重执行
3)、如果有功能变动或bug修复,在扩容成功后,再提交新的发布,发布时请将分批数量设置大点,保证处于服务中的应用实例数量