注意:以下文档只适用于TOP接口,请谨慎使用!
应用扩容是指针对应用的某个环境扩容应用实例,比如将应用实例个数从1个调整到2个。
请在「环境管理-实例管理-手动扩缩容」执行扩缩容操作。
注:
1)如果碰到应用扩容资源不足的问题(点击查看),请先去集群管理,扩容集群。再来扩容应用。
2)扩容或容器漂移时报错403 AccessDenied,请参考:点击查看。
应用的CPU内存配置决定了每个容器使用多少计算资源。
CPU/内存请求值:约束了容器最低的起始计算资源。
CPU/内存限制值:约束了容器最多可使用计算资源,内存用量超过该值,容器会因为OOM被强制Kill。
请在「环境管理-实例管理-实例规格」调整容器的CPU以及内存。
容器实例的CPU和内存配置需要重新发布后生效。
应用的健康检查配置至关重要,决定了容器是否可以正常对外提供服务。目前应用健康检查分为两类:
1)应用存活健康检查:指示应用是否是存活状态,如果健康检查失败并且达到一定阈值,会触发容器重启。
2)应用就绪健康检查:指示应用是否已经准备好对外提供服务,如果健康检查成功,应用关联的SLB会自动enable对应的容器。
1)HTTP健康检查HTTP CODE返回200为成功;脚本健康检查exit 0 为成功了;建议使用HTTP健康检查,对CPU等资源消耗更低。
2)注意配置合理的失败次数阈值:为了防止抖动造成的容器频繁重启,请将失败次数阈值配置适当调大(与检查延迟配合,建议至少检查3分钟失败再重启,失败次数阈值*检查延迟 > 3min)。
应用视图,查看具体某个应用下的监控。
基础监控,提供了容器实例CPU 内存等基础指标监控视图。
事件监控(待上线),提供容器实例K8S Event异常事件,如容器重启、驱逐、探针失败等。
入口:左侧菜单栏-监控告警-应用告警。
地址:https://console.cloud.tmall.com/component/monitoralarm#/index
告警范围:
实例阈值告警,应用容器POD的各项指标,如CPU、内存使用量达到某个阈值;
实例事件告警,应用容器POD的各种异常事件,如容器重启、驱逐、探针失败、启动失败等;
说明文档:点击查看。
为云应用-环境配置相应的阈值告警,支持规则模板复用,也可单独配置告警规则。
由于每个云应用的容器规格不一,建议对单个环境进行规则配置。
规则设置时,请按照容器规格的限制值进行合理配置。举个例子,当前环境CPU请求和限制值分别为2和4核。
如果想设置当CPU使用超过70%则进行告警,那么告警规则中可以设置4*0.7=2.8 core。
前提:需要给集群安装节点探查组件,并且给集群开通事件告警。事件告警操作手册。
组件安装好后,就可以为云应用环境配置Pod基本事件告警了:
关于告警联系人的设置:点击查看。
关于事件类型选择:
目前,我们推荐配置四种类型,
① 通用warning;
② 容器重启;
③ 存活探针失败;
④ POD驱逐。
首先,通用warning包含了该应用下Pod容器级别的所有Warning事件,比如实例重启、探针失败、驱逐等,能够比较广泛的感知到节点上的一般异常警告事件。容器重启,很多云应用都会出现运行一段时间自动重启的现象,一般是由于配置了健康检查且健康检查失败导致,会伴随有探针失败等事件。POD驱逐,也是云应用运行过程中很容器导致业务稳定性稳定的事件,一般是由于节点异常或者节点资源使用达到集群阈值(特别是系统盘磁盘不足)。综上,这几种事件类型强烈建议配置上。
异常事件参加解决方案:点击查看。
通过 资源视图
- 弹性公网 IP
进入列表页如下图,找到需要升配的 EIP。
列表最右侧点击变配,即可调整带宽大小(预付费只可升配,可以点击短期升配到时间后会自动降配)。
根据需要选择共享带宽的类型。
a.直接在共享带宽页面点击添加 IP。
b.到弹性公网 IP 列表页进行添加。
直接在共享单款一栏点击加入加入即可。
对于 预付费固定带宽 无法直接添加到共享带宽中,需要首先转换为后付费模式,之后才可以进行添加。
在共享带宽列表,点击操作列中的更多操作,点击变配,即可改变提升或者降低带宽大小(预付费只可升配,可以点击短期升配到时间后会自动降配)。
这里主要针对使用 按流量计费的EIP带宽资源不足 的情况。
EIP 绑定的维度为交换机或者 ECS,如果将 EIP 绑定到 ECS 上,则可以跳过第一步,即无需创建交换机。
创建是选择的专有网络需要与ECI所在集群的专有网络一致。
选择后付费-按使用流量计费模式。
注:对于交换机维度的情况,一个交换机下的所有 ECS 均使用该交换机绑定的 EIP 访问公网,如果 ECS 分布不均,可能会导致部分 EIP 流量打满。
具体各类异常事件介绍请参考: 点击查看。
这里列出几个重要的事件类型。
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
由于应用存活/就绪探针失败而引发的异常事件。该事件可能会导致后续达到一定阈值之后,容器被动重启。具体要看应用就绪探针的配置。
需要结合应用存活/就绪探针的配置(点击查看),定位探针检查失败的原因。
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(参考说明文档)
参考节点运维手册:点击查看。
① 首先通过查看系统日志,看下后端是否有明显的报错日志。如果有明显的报错,则需要自己根据异常来判断错误原因;
i)如果已接入SLS并且通过SLS采集了系统日志,可以通过SLS查看;
ii)如果未接入SLS,可以通过下面的方式查看:应用发布 -> 环境管理 -> 管理资源 ,进入后点击应用实例后的 【远程登录】,然后查看自己的系统日志;
② 如果未发现明显的异常日志,则一般是SLB的规格过低导致连接被断开或拒绝,此种情况需要升级SLB的规格。
观察SLB负载情况:
聚石塔控制台 -> 资源视图 -> 负载均衡。
升级SLB规格:
如果发布时系统流量太大导致发布不成功或卡住,一般表现为:
i) 外部流量比平时正常情况下要高出较多;
ii) 应用实例刚开始能启动,但随后很快就被重启,发布单一直处于部署中状态;
① 先走应用实例扩容操作,保障应用水位处于一个相对较低的水位。
② (如果扩容成功,跳过此步)如果扩容起不来新的应用实例,说明已有的应用实例都处于假死状态,请按以下步骤解决:
a. 可以先将健康检查配置为肯定能成功的,比如:脚本类型的 return "success",优先保障pod能起来接收流量,并且调大应用实例数量,然后提交新的发布单;
b. 如果调整健康检查后扔未能扩容成功,一般不会出现这种情况;极端情况下可以考虑将外部流量暂时摘除,不让流量进来(SLB摘流方法参见下图)。此时再去扩容,扩容成功后再将流量引入。注意:流量摘除后对外的服务也将完全不可用,此方案请慎重执行。
(注意:下图为需要暂时摘流的方法,摘流后服务会中断不可用,请慎重操作)
③ 如果有功能变动或bug修复,在扩容成功后,再提交新的发布,发布时请将分批数量设置大点,保证处于服务中的应用实例数量。