2020双十一云应用操作手册

更新时间:2021/05/06 访问次数:1222

1. 集群相关

1.1 集群扩容节点

当容器集群的CPU、内存请求率以及使用率达到70%以后,需要对集群进行扩容以保证当出现以外流量峰值的时候,有足够的集群资源可以用于应用扩容。

  1. 先在ECS控制台购买相应规格的ECS,注意ECS所属VPC与集群相同;
  2. 在「运维中心-集群管理-节点列表」找到相应的集群,并且将ECS添加到集群中

image.png

 

1.2 集群节点运维

1)节点内部系统升级或者规格升级

先排空节点,将节点上的pod进行驱逐(重新调度到其他节点)

image.png

升级操作完成后将节点设置为可调度

image.png

2)节点不可用时处理方法,https://www.yuque.com/fczggw/wu7u0k/cxzzca#4RUwi

具体请参考:节点运维手册

 

1.3 给集群(节点)配置事件告警

为每个集群配置事件告警,可以及时发现集群节点运行时问题,例如节点不可用、docker异常、磁盘等资源不足等问题。告警使用文档:https://www.yuque.com/fczggw/wu7u0k/nbfa90

image.png

image.png

关于告警联系人的设置:https://www.yuque.com/fczggw/wu7u0k/nbfa90#laROP

关于事件类型选择:

目前,我们推荐配置四种类型,

  • 通用warning
  • 节点不可用
  • 节点资源不足
  • 节点磁盘资源不足

首先,通用warning包含了集群上Node级别的所有Warning事件,比如OOM、docker hung、PLEG异常等,能够比较广泛的感知到节点上的一般异常警告事件。节点不可用,是节点运行期间偶尔会出现的问题,会较大的影响节点上容器的运行和新部署容器的调度。节点磁盘等资源不足,也是云应用运行期间,影响比较大的异常问题,特别是当磁盘使用率达到一定值时,节点上的容器会被驱逐然后被集群重新调度,大面积的驱逐会影响云应用的稳定性。综上,这四种事件类型强烈建议配置上。

异常事件参加解决方案:

https://www.yuque.com/fczggw/wu7u0k/yrsmk6#IhNms

2. 应用相关

2.1 环境扩容

应用扩容是指针对应用的某个环境扩容应用实例,比如将应用实例个数从1个调整到2个。

请在「环境管理-实例管理-手动扩缩容」执行扩缩容操作。

image.png

注:

1、如果碰到应用扩容资源不足的问题(https://www.yuque.com/fczggw/wu7u0k/riku5o#c62iS),请先去集群管理,扩容集群。再来扩容应用。

2、扩容或容器漂移时报错403 AccessDenied,请参考:https://www.yuque.com/fczggw/wu7u0k/riku5o#jS95n

 

2.2 调整容器的CPU和内存

应用的CPU内存配置决定了每个容器使用多少计算资源。

CPU/内存请求值:约束了容器最低的起始计算资源

CPU/内存限制值:约束了容器最多可使用计算资源,内存用量超过该值,容器会因为OOM被强制Kill

请在「环境管理-实例管理-实例规格」调整容器的CPU以及内存。

image.png

容器实例的CPU和内存配置需要重新发布后生效。

 

2.3 给应用配置健康检查探针

应用的健康检查配置至关重要,决定了容器是否可以正常对外提供服务。目前应用健康检查分为两类:

  • 应用存活健康检查:
    • 指示应用是否是存活状态,如果健康检查失败并且达到一定阈值,会触发容器重启
  • 应用就绪健康检查:
    • 指示应用是否已经准备好对外提供服务,如果健康检查成功,应用关联的SLB会自动enable对应的容器

 

image.png

【重要】健康检查配置注意事项

  1. HTTP健康检查HTTP CODE返回200为成功;脚本健康检查exit 0 为成功了;建议使用HTTP健康检查,对CPU等资源消耗更低。
  2. 注意配置合理的失败次数阈值:为了防止抖动造成的容器频繁重启,请将失败次数阈值配置适当调大(与检查延迟配合,建议至少检查3分钟失败再重启,失败次数阈值*检查延迟 > 3min)

 

2.4 查看应用监控

应用视图,查看具体某个应用下的监控。

  • 基础监控,提供了容器实例CPU 内存等基础指标监控视图
  • 事件监控(待上线),提供容器实例K8S Event异常事件,如容器重启、驱逐、探针失败等

image.png

 

2.5 给应用配置告警

入口:左侧菜单栏-监控告警-应用告警

地址:https://console.cloud.tmall.com/component/monitoralarm#/index

 

告警范围:

  • 实例阈值告警,应用容器POD的各项指标,如CPU、内存使用量达到某个阈值
  • 实例事件告警,应用容器POD的各种异常事件,如容器重启、驱逐、探针失败、启动失败等

说明文档:https://www.yuque.com/fczggw/wu7u0k/nbfa90

设置实例阈值告警

为云应用-环境配置相应的阈值告警,支持规则模板复用,也可单独配置告警规则。

image.png

image.png

由于每个云应用的容器规格不一,建议对单个环境进行规则配置

image.png

规则设置时,请按照容器规格的限制值进行合理配置。举个例子,当前环境CPU请求和限制值分别为2和4核。

如果想设置当CPU使用超过70%则进行告警,那么告警规则中可以设置4*0.7=2.8 core

image.png

image.png

 

 

设置实例事件告警

前提:需要给集群安装节点探查组件,并且给集群开通事件告警。事件告警操作手册

组件安装好后,就可以为云应用环境配置Pod基本事件告警了:

image.png

image.png

关于告警联系人的设置:https://www.yuque.com/fczggw/wu7u0k/nbfa90#laROP

关于事件类型选择:

目前,我们推荐配置四种类型,

  • 通用warning
  • 容器重启
  • 存活探针失败
  • POD驱逐

首先,通用warning包含了该应用下Pod容器级别的所有Warning事件,比如实例重启、探针失败、驱逐等,能够比较广泛的感知到节点上的一般异常警告事件。容器重启,很多云应用都会出现运行一段时间自动重启的现象,一般是由于配置了健康检查且健康检查失败导致,会伴随有探针失败等事件。POD驱逐,也是云应用运行过程中很容器导致业务稳定性稳定的事件,一般是由于节点异常或者节点资源使用达到集群阈值(特别是系统盘磁盘不足)。综上,这几种事件类型强烈建议配置上。

异常事件参加解决方案:

https://www.yuque.com/fczggw/wu7u0k/yrsmk6#lfIj5

3. 网络相关

3.1 EIP升配

通过 资源视图 - 弹性公网 IP 进入列表页如下图,找到需要升配的 EIP

image.png

列表最右侧点击变配,即可调整带宽大小,(预付费只可升配,可以点击短期升配到时间后会自动降配)

3.1 NAT 绑定共享带宽

1.购买共享带宽

image.png

根据需要选择共享带宽的类型

2.添加 EIP 到共享带宽

a.直接在共享带宽页面点击添加 IP

image.png

b.到弹性公网 IP 列表页进行添加

直接在共享单款一栏点击加入加入即可

对于 预付费固定带宽 无法直接添加到共享带宽中,需要首先转换为后付费模式,之后才可以进行添加

image.png

 

3.2 共享带宽变配

在共享带宽列表,点击操作列中的更多操作,点击变配,即可改变提升或者降低带宽大小(预付费只可升配,可以点击短期升配到时间后会自动降配)

image.png

3.2 NAT 绑定的多个 EIP

这里主要针对使用 按流量计费的EIP带宽资源不足 的情况

EIP 绑定的维度为交换机或者 ECS,如果将 EIP 绑定到 ECS 上,则可以跳过第一步,即无需创建交换机

1、创建交换机

image.png

创建是选择的专有网络需要与ECI所在集群的专有网络一致

2、购买 EIP

image.png

选择后付费-按使用流量计费模式

3、绑定 EIP 到 NAT

image.png

image.png

4、设置 SNAT

image.png

image.png

image.png

注:对于交换机维度的情况,一个交换机下的所有 ECS 均使用该交换机绑定的 EIP 访问公网,如果 ECS 分布不均,可能会导致部分 EIP 流量打满

4. 【重要】重点事件告警处理手册

具体各类异常事件介绍请参考: 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),定位探针检查失败的原因。

节点相关

节点OOM

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

 

5. 发布相关

 

5.1 异常排查

1. SLB流量接入返回503错误码

1)首先通过查看系统日志,看下后端是否有明显的报错日志。如果有明显的报错,则需要自己根据异常来判断错误原因;

查看日志方式:

  • 如果已接入SLS并且通过SLS采集了系统日志,可以通过SLS查看;
  • 如果未接入SLS,可以通过下面的方式查看:应用发布 -> 环境管理 -> 管理资源 ,进入后点击应用实例后的 【远程登录】,然后查看自己的系统日志

image.png

 

image.png

 

2)如果未发现明显的异常日志,则一般是SLB的规格过低导致连接被断开或拒绝,此种情况需要升级SLB的规格

 

观察SLB负载情况:观察SLB负载情况:

聚石塔控制台 -> 资源视图 -> 负载均衡

image.png

image.png

 

 

升级SLB规格:升级SLB规格:

image.png

 

2. 流量太大导致发布不成功或卡住

如果发布时系统流量太大导致发布不成功或卡住,一般表现为:

a) 外部流量比平时正常情况下要高出较多

b) 应用实例刚开始能启动,但随后很快就被重启,发布单一直处于部署中状态

 

1)先走应用实例扩容操作,保障应用水位处于一个相对较低的水位。

image.png

image.png

2)(如果扩容成功,跳过此步)如果扩容起不来新的应用实例,说明已有的应用实例都处于假死状态,请按以下步骤解决:

 

a) 可以先将健康检查配置为肯定能成功的,比如:脚本类型的 return "success",优先保障pod能起来接收流量,并且调大应用实例数量,然后提交新的发布单

image.png

b)如果调整健康检查后扔未能扩容成功,一般不会出现这种情况;极端情况下可以考虑将外部流量暂时摘除,不让流量进来。此时再去扩容,扩容成功后再将流量引入。注意:流量摘除后对外的服务也将完全不可用,此方案请慎重执行

 

3)、如果有功能变动或bug修复,在扩容成功后,再提交新的发布,发布时请将分批数量设置大点,保证处于服务中的应用实例数量

FAQ

关于此文档暂时还没有FAQ
返回
顶部