注意:以下文档只适用于TOP接口,请谨慎使用!

文档中心 > 聚石塔

应用发布

更新时间:2021/03/30 访问次数:348

1. 创建应用

首先,根据自己的业务场景选择业务类型

image.png


然后填写应用基本信息,如果需要详细设置应用类型等,请展开高级设置

image.png


发布方式:选默认的"容器部署"即可

应用类型:详见:聚石塔应用创建如何选择【应用类型】

  • 无状态应用:没有特殊要求的情况选择默认"无状态应用"即可,对应k8s的Deployment
  • 有状态应用:需要稳定的唯一网络标识或有序发布的情况,对应k8s的StatefulSet




2. 配置应用环境


1. 查看应用

在创建好应用后,可以在应用列表点击“查看”

image.png


2. 创建环境

环境的解释

聚石塔会默认生成两种类型的环境,正式环境与测试环境。正式环境与测试环境的容器集群不能是相同的集群。建议手淘互动应用直接配置正式环境就可以。


image.png

如果使用官方镜像,请在此界面直接选择容器镜像,并配置实例数量,实例所使用的CPU和内存。

  • 容器镜像:容器镜像可以理解为应用开发技术栈。比如如果使用JAVA,可选择tomcat镜像,springboot镜像等。
  • 实例数量:实例数量是每个环境下(比如正式环境或测试环境)的实例个数,考虑到稳定性,实例个数需要至少配置为2。
  • CPU/内存:指环境下的每个实例限定的CPU内存规格,如果实际使用内存规格超过界面上配置的限额,整个容器会被kill掉。注意内存的规格为MB


手淘互动已经一般情况只需要关注正式环境以及正式环境系统配置即可。


(已支持切换tag,配置信息不清空)

写在前面:部署配置页面切换镜像tag会导致部署配置信息清空,如果你有切换镜像tag的需要,但又希望保留部署配置信息,请保存为模板,然后切换tag后,再加载模板即可。详细操作请参考https://www.yuque.com/fczggw/wu7u0k/riku5o#hSJwf


部署根目录:如果镜像需要使用代码包部署,就需要配置部署根目录。官方镜像的部署根目录统一为/acs/code

日志收集:如果需要通过SLS收集日志,使用方式参考:https://www.yuque.com/fczggw/wu7u0k/fo3ne1

容器配置

  • 端口映射:如果使用了官方镜像,端口映射最好不要修改。端口映射指定了需要将容器内什么哪些端口暴露出供外部调用。这些端口在后续流量接入(SLB流量接入)过程中都需要保持一致。比如tomcat启动在8080端口,并且该端口需要对外提供服务,那这里的端口映射就需要填写8080。
  • 环境变量:环境变量会以Linux 环境变量的形式配置在系统中。
  • 文件挂载:文件挂载可以将指定文本以文件的形式挂载到容器内的指定目录中。
  • 目录挂载:建议将日志,或者容器内的数据目录(如临时文件存储)以目录挂载的形式挂载到宿主机上,保证容器所占用的磁盘空间不会被占满,容器占用磁盘空间过大会导致容器直接挂掉。

详细请参考:目录挂载说明

  • 健康检查配置:目前支持http和shell脚本检测应用健康状态,请一定保证设置正确,否则会导致容器启动失败。比如官方SpringBoot2镜像默认设置值为 http://127.0.0.1:8081/actuator/health。


这些配置中需要重点关注的配置是端口映射健康检查配置。健康检查配置会影响到应用发布过程,只有系统判断配置的健康检查成功之后才会认为是发布成功。

健康检查

在容器集群K8S中,主要通过liveness(应用存活)readiness(应用就绪)两种探针来探测Pod内容器的运行情况。其中:

  • liveness探针用来检测容器是否正常运行。如果存活探测失败,集群认为容器运行异常,会对其进行重启
  • readiness探针被用来控制流量进入pod,表示容器是否准备好服务请求。

具体参见:如何配置健康检查


优雅上下线

    • PostStart:

容器"创建成功后,运行前"的任务,用于资源部署、环境准备等。需要注意:

a) 并不是在容器启动成功后才执行;

b) 如果钩子长时间未执行完成,则容器不会变为running状态,也就无法发布成功

c) 如果执行失败,则容器会被kill掉

    • PreStop:在容器被终止前的任务,用于优雅关闭应用程序、通知其他系统等。需要注意:

a) 如果钩子长时间未执行完成,会在超过优雅上下线等待时间 terminationGracePeriodSeconds 后被kill

b) 如果执行失败,则容器会被kill掉

更详细精准的解释如下:

https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#overview

image.png




需要注意的是:所有的部署配置变更,以及环境实例数量的变更,都需要重新提交发布单才能生效。


3. 发布应用的指定环境

1. 提交发布单

对于手淘互动应用而言,暂时只需要关注正式环境的发布。如下图是示,需要注意选择正式环境的Tab。

 image.png


接下来新建发布单。

image.png


发布批数:发布批数是指将指定的实例数量分为几批发布。例如,环境配置了4个实例,这里发布批数为2,则是将4个实例分为两批发布,每批发布2个实例。分批发布可以减少代码变更对线上服务的影响,并且可以达到一定的灰度测试效果。

暂停模式:第一批暂停是部署第一批后,该发布单暂停发布,点击了“恢复”之后才会继续,剩下的批次依次发布了;每批暂停是指每部署完一批都暂停,点“恢复”后开始下一批

image.png

发布单创建提交之后,可以看到发布单列表,状态为部署中。


2. 查看发布单状态

点击发布单后的详情,可以进入到发布实例详情列表。

在这里可以看到发布过程中的实例列表,以及发布完成的实例列表,以及整个发布单的状态。


image.png


  • 1、【恢复】:默认是置灰不能点击的,根据发布单的状态来判断,如果当前发布单的状态是"暂停",则变为可以点击。
  • 2、【切换为每批暂停】、【切换为第一批暂停】、【切换为不暂停】:这三个按钮是互斥的,当前发布单正在使用的暂停策略是灰色不可点击的,用户可以点击其他两个按钮来切换暂停策略,点击后选中的暂停策略变为灰色,同理其余两个变为可点击
  • 3、【批量失败重试】:会重试发布失败的实例,此按钮可随时点击,没有失败记录时后台会忽略
  • 4、【关闭发布单】:发布单处于非"已完成"状态时可点击,点击后会关闭当前发布单,并将发布单职位失败
  • 5、【回滚】:发布中回滚请参见文档:https://www.yuque.com/fczggw/wu7u0k/ghx9lf


部署过程中,【查看日志】和【远程登录】是跟进部署进展的最好方式。

查看日志:

  • 系统事件:容器启动过程中的主要事件;如果容器长时间未启动成功,要关注Warning类型的事件
  • 日志:容器启动过程中的日志

image.png




如果有一个实例的发布过程一直没有结束(左侧状态不是执行成功),通常是发布过程出现问题。有关发布异常的排查方法详见文档:https://www.yuque.com/fczggw/ec07di/qawru0#CSwn6


如果之前选择了分批发布,当发布完一批之后,需要手动点击恢复按钮,继续后面批次的发布。

image.png



发布成功

当所有实例已经发布完成,并且发布单处于已完成的状态,代表发布成功。

image.png


如果发布单一直没有结束,并且定位到了异常,可以手动执行关闭发布单,之后再在修改之后,重新提交发布单。


在发布成功后,就可以在环境管理下,看到自己发布环境的实例数量。

image.png

进一步进入管理资源,可以看到启动成功的计算实例列表。

image.png


发布失败

发布失败时,请查看错误信息提示

image.png


3. 验证应用是否真正启动成功

发布单成功发布,代表应用健康检查已经成功。如果还想进一步验证自己应用的可用性,可以通过远程登录的方式,登录到具体实例中(一个容器运行环境),执行linux命令( 比如curl localhost:8080/healthcheck )来确认自己应用已经真正发布成功。

远程登录的入口在“环境管理”->“资源管理”下,如下图所示。

image.png


点击远程登录以后,进入一个容器内的linux bash环境下。可以执行所有和ECS上相同的指令,验证应用是否可用。

image.png


由于同一个环境下的所有实例通常拥有相同的环境配置和代码,因此随便选择一个计算实例验证可用性即可。

FAQ

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