本文介绍部署在K8s集群上的应用在不同阶段需要注意的事项,以及如何实现在第一时间获得EDAS的发布动态。
应用开发
您可以使用不同的开发者工具来开发应用,帮助您提升开发和部署效率。
应用部署与联调
Cloud Toolkit
Cloud Toolkit是阿里云为开发者在IDEA中提供的一款插件,用于帮助开发者提升开发效率,并将应用部署到EDAS中。相关文档,请参见Cloud Toolkit概述。
toolkit-maven-plugin
toolkit-maven-plugin插件可以帮助应用实现自动化部署。相关文档,请参见toolkit-maven-plugin概述。
持续集成与部署
Jenkins
Jenkins是一个开源工具,帮助开发者持续、自动的构建和测试软件项目、监控外部任务的运行。相关文档,请参见Jenkins概述。
云效
阿里云云效支持公共云、专有云和混合云多种部署形态,提供了灵活易用的持续集成、持续验证和持续发布功能,能够帮助开发者快速将应用部署至EDAS。相关文档,请参见概述。
搭建云基础环境
Terraform
Terraform是一个开源工具,帮助开发者在阿里云安全高效地预配和管理云基础结构。相关文档,请参见Terraform概述。
应用部署
此处仅介绍应用部署中需要注意的事项。如需了解应用部署的更多信息,请参见创建和部署应用概述。
应用基本信息
如果选择镜像部署方式,建议使用容器镜像服务企业版(ACR EE)管理镜像。
容器镜像服务企业版相对于个人版有以下优势:
提升应用镜像的分发效率。
支持镜像安全扫描及多维度漏洞报告,保障存储及内容安全。
提供应用镜像的网络访问控制,保障应用镜像访问安全。
更多关于容器镜像服务的信息,请参见什么是容器镜像服务ACR。
关于如何制作应用镜像并上传到容器镜服务,请参见制作应用镜像。
应用配置信息
建议为应用配置2个及以上Pod实例。
配置多个Pod实例,可有效避免单个Pod实例故障而导致的应用无法使用。
建议为应用配置合理的CPU资源预留(Request)和Mem资源限制(Limit)。
配置合理的资源配额,为应用的Pod配置QoS Class。
说明对于Java应用,配置的Mem资源限制(Limit)不应低于JVM配置的内存使用上限,否则会在Pod层面出现内存不足(OOM),导致Pod重启。
应用高级配置信息
配置调度规则。
建议为应用设置尽量多可用区部署和尽量多节点部署类型的调度规则。部署应用时,Pod实例会利用反亲和性,尽可能打散Pod实例并部署到多可用区和不同节点,可有效避免单个Pod实例故障而导致的应用无法使用。相关文档。请参见配置调度规则。
建议为应用设置合理的日志滚动策略,及时清理。
Pod实例内打印过多日志将侵占节点的磁盘空间,导致节点进入DiskPressure状态,并引发Pod驱逐。
合理配置应用生命周期的探针。
为了便于故障自愈和优雅上下线,Liveness存活探针的各参数配置应当保证应用可以正常启动,若应用正常启动时间较长,可以配置更长的首次启动延迟时间(InitialDelaySeconds)。相关文档,请参见配置应用生命周期的钩子和探针
如果部署的是非微服务应用,且通过Service实现的服务暴露,Readiness就绪探针的各参数配置应当保证能准确的反映应用健康状况,以免非健康Pod提供服务(即未被Service摘除)。相关文档,请参见配置应用生命周期的钩子和探针和添加服务Service。
配置日志收集规则。
将Pod实例日志持久化保存到SLS日志服务,便于问题排查。由于Pod实例本身是无状态的,会因为各种调度而重新创建和删除,因此需要将Pod实例的日志进行集中化收集并持久化存储。相关文档,请参见配置日志收集。
应用运行
此处介绍应用运行阶段需要注意的事项,当需要开展促销活动时,还需要提前进行应用压测、弹性伸缩等配置。
一般运行时态
谨慎使用编辑应用的YAML文件功能。
对于EDAS部署时可修改的配置项,建议在EDAS侧完成相关配置,不建议通过编辑YAML文件功能来修改配置项,直接编辑资源会导致应用重启。如果一定需要修改YAML文件,修改前需要熟悉Deployment资源的配置方法。
例如:通过编辑YAML文件修改Deployment的原生发布策略UpdateStrategy权限,有且仅会生效一次。当再次部署应用时,仍会使用EDAS的升级策略(单批发布、分批发布和金丝雀发布策略)。所以对于EDAS部署时可修改的配置项,都建议直接在EDAS侧完成相关配置。
禁止从负载均衡控制台直接修改SLB实例的监听配置。
如果需要为应用关联负载均衡SLB,必须在EDAS控制台完成关联SLB实例的监听配置管理。相关文档,请参见添加负载均衡CLB。
重要禁止从负载均衡控制台直接修改SLB实例的监听配置(含监听+证书),可能导致SLB控制台修改的配置回退,引发应用入口相关的故障。
请勿配置私网SLB进行集群内部服务的访问。
Pod实例之间无法直接访问私网SLB地址,私网SLB只是用来提供VPC内非同一K8s集群的访问。当需要在集群内部访问服务时,请创建Service并使用Service地址进行访问。相关文档,请参见添加服务Service。
建议为集群配置合理的监控报警。
一般都需要为集群配置监控报警,如Prometheus监控。以免底层资源不稳定等情况引发业务问题。如需了解更多的集群监控信息,请参见集群监控。
高并发时态
在高并发前,做好应用压测。
建议用性能测试PTS对应用做全链路压测,根据压测水位提前预估好所需Pod和Node数量,在高并发前完成扩容;还需要评估存储和网络带宽,提升存储空间和负载均衡的规格或网络带宽;如果还需要用到应用路由,请注意查看Ingress Controller的监控指标,确认负载情况并设置合理的Pod副本数。
承压的应用Pod尽量分布在同一个可用区,以避免跨可用访问的时延问题。
如果避免不了Pod分布在不同的可用区,您可以为服务提供者配置同可用区优先调用,从而解决跨可用区调用带来的网络延时。相关文档,请参见配置同可用区优先路由。
承压的集群Node节点使用相同的规格,保证Pod的处理性能基本一致。
如果ECS实例规格差异较大,会容易导致Pod性能表现不一致,业务负载不均。
需要提前准备好目标规格的Node,如果对应规格的Node无法下单购买,请联系解决方案架构师协调ECS备货。
建议为应用开启弹性伸缩。
建议直接使用EDAS提供的基于应用指标触发或定时触发的弹性伸缩规则;不建议在K8s层单独开启Deployment的HPA(Horizontal Pod Autoscaling)弹性伸缩,以免影响EDAS应用的正常部署行为。如何使用EDAS提供的基于应用指标触发或定时触发的弹性伸缩规则,请参见自动弹性扩缩容。
建议为应用关联多个负载均衡SLB。
建议从DNS侧配置多个SLB的解析记录,以便分摊负载,消除单个SLB的性能瓶颈。为应用关联SLB,请参见添加负载均衡CLB。
说明当前最大规格的负载均衡SLB实例(超强型slb.s3.large)的带宽上限为5 G。
在高并发过程中,做好应用监控和代码封网。
时刻关注相关的应用监控和集群监控,及早发现并解决可能存在的异常问题。相关文档,请参见应用监控概述。
高并发过程中,应用处于承压状态,要严格控制应用代码上传,避免出现应用部署更新。
应用变更
此处仅介绍在应用变更阶段的一些注意事项。您可以通过应用监控、应用报警判断应用变更是否正常,如果变更失败可以通过事件和失败分析进行应用诊断。
应用变更前,预留集群资源。
注意为集群预留资源,避免在部署过程因为资源不足而进展缓慢,甚至部署失败的情况出现。部署失败的相关原因,请参见查看部署失败的执行结果。
应用变更中,查看变更详情和应用相关指标。
及时查看应用变更记录,查看变更事件和失败分析。相关文档,请参见查看应用变更。
注意查看应用指标变化、发布诊断报告以及进行业务验证,防止应用版本不符合预期。
如果发布不符合预期应及时回滚,使应用恢复到稳定状态,处理好异常后再进行下一次发布。请勿在不符合预期时仍继续发布,将导致无法回滚到上一个稳定状态。回滚应用,请参见使用控制台回滚应用(K8s)。
应用排障
此处介绍常见的应用排障相关事项。
如何获得EDAS发布动态
您可以在EDAS相关钉钉交流群中,添加EDAS的发版公告机器人,以便在第一时间知晓EDAS的发布动态。相关文档,请参见自助在钉钉群中添加钉钉机器人“EDAS产品小助手”。