服务基础操作

服务基本操作

先就服务可进行的操作进行基础说明:

基础操作 说明
构建 构建操作将触发服务从构建源获取最新的代码或镜像构建服务的新版本,
默认情况下构建成功后将触发滚动升级。
更新(滚动升级) 更新操作将以最新的服务属性配置对集群中运行的服务实例进行滚动升级
启动 具有至少一个可用构建版本的服务可以启动
停止 服务停止即释放所有集群资源
访问 运行中的服务可进行访问,如是HTTP服务将跳转访问网址,非HTTP
管理容器 运行中的服务可进行管理容器操作,选择需要操作的容器实例即可进入容器Web终端控制
重启 运行中的服务可进行重启操作,正常情况下我们推荐使用更新操作来完成服务重启,若服务任何属性都未变化,无法使用更新。
修改所属应用 服务可以灵活调整所属的应用
删除 删除服务是一个危险的操作,请谨慎操作。服务删除后持久化数据默认会保留7天。

构建操作

适用场景:服务的任何状态

针对不同类型的服务,触发 构建 操作后,有着不同的含义,下表针对不同类型的服务加以说明:

服务类型 说明
从源代码构建的服务 拉取最新源代码,根据预先识别的语言类型进行服务版本构建并进行滚动升级
从Docker镜像构建的服务 重新拉取指定镜像地址的镜像,构建出服务新版本并进行滚动升级
从云市应用构建的服务 若云市应用不存在更新的版本,构建操作将提醒用户无需操作,若已存在多个更新版本,将提示用户选择需要获取的版本号。根据所选版本获取服务介质生成构建版本并进行滚动升级
- Dockerfile 源码类服务就是将 Dockerfile 及所需要的文件放到 代码仓库(Git/Svn),通过源代码创建的服务。 - 构建后,如果一切顺利,服务会自动切换为新版本并上线,构建操作默认并更新升级,也可在其他设置中去设置构建后不升级流程。 - 滚动升级过程对于多节点的服务理论上无影响,对于单节点的服务如果正常配置了业务级的[健康检测](/user-manual/app-service-manage/service-other-set/#健康检查) 也可以做到无影响升级。 - 处于关闭状态的服务,触发构建操作后,如果构建正常,平台会将服务运行起来。
云市服务升级支持的属性

在对云市服务进行升级的时候, 并不是所有的属性都支持升级; 在升级的时候, 各种属性的处理方式又会有所区别. 具体如下表所示:

属性 是否支持升级 元数据(升级方式) 说明
实例可选项 更新
内存可选项 更新
依赖关系 增加 如果依赖的服务在同一个应用内, 则增加依赖关系; 否则不进行处理
端口 更新, 增加 对于端口的升级, 可以更新已有的端口信息, 也可以增加新的端口; 但是不能删除已有的端口
存储 增加 对于存储的升级, 只能增加新的存储; 不能对已有的存储进行删除, 或修改
健康检测 更新 对于健康检测的升级, 修改已有的健康检测信息, 不能删除, 或增加(一个服务只能有一个健康检测信息)
镜像 更新 直接更改为新的镜像
环境变量 增加 对环境变量的升级, 只支持增加新的环境变量; 不能修改, 或删除已有的环境变量
启动参数 更新
依赖存储 如果依赖的存储所在的服务在同一个应用内, 则增加依赖关系; 否则不进行处理
有无状态类型
标签

更新操作

使用场景:运行中服务

当服务的依赖、存储、环境变量、特性、健康监测等运行属性发生改变以后,必须通过手工触发更新操作来将最新的属性配置应用的服务的运行环境中,在这更新过程中默认采用滚动升级的策略对服务实例进行升级。

对于滚动升级有两类控制策略:

  • 无状态服务

对无状态服务采用的是无序的先启动后停止的策略,即先启动新版本的运行实例,当其处于健康运行状态后关闭旧版本运行实例。需要注意的是,此过程会出现多版本同时工作的情况,若你的业务服务无法容忍多版本同时工作,请使用重启策略。

  • 有状态服务

对于有状态服务采用的是有序的先关闭后停止策略,即根据运行实例编号,从第一个实例开始先关闭实例然后启动新版本实例。

这种控制对于像数据库类的服务至关重要,因此请勿将数据库类服务部署为无状态服务。

启动操作

使用场景:构建成功,并处于关闭状态的服务

启动操作会启动上一次成功构建的服务版本,启动后可以在服务概览页面的 操作日志 看到平台调度与处理服务的详细操作日志,当调度完成后,服务就进入启动阶段,这时候可以通过 日志 页面查看服务的启动日志。

特别是对于第一次在Rainbond启动的服务,尤其需要关注如下几点:

  1. 服务启动或更新超时怎么办?

目前Rainbond对于异步任务确定了固定的超时时间,因此请注意,超时并不是失败,需要根据实际情况优化服务的配置,如果有超时,请按如下路径进行排查:

  • 查询服务日志 确定服务的启动情况,若你的服务日志未输出到stdout或stderr,请进入服务容器查询你的日志。比如一些Java类的服务,若分配的内存不足将导致启动非常缓慢, 亦或者从日志中发现服务运行环境是否正常,比如依赖了数据库,是否能够正常访问数据库等。
  • 如果源码构建的服务在启动后很长时间才进入正常的业务启动过程,请优化代码忽略掉多余的源代码文件减少运行代码解压时间 参考 slugignore文件使用方式
  • 确定服务监听的地址不是127.0.0.1 或 localhost
  • 若服务监听地址正确且已正常监听,请查询 服务健康检测 配置是否正确,一般若服务有多个端口时容易出现默认配置错误的问题。
  • 以上服务可能的故障如都已排除还是启动超时且一直处于启动中状态,请通过运维工具 grctl clustergrctl service get <service_name> -t <tenant_name> 查询集群和服务运行实际状态。
  1. 服务运行异常怎么办?

服务运行异常是指服务进程异常的退出了,一般有几下几种原因:

  • 服务代码故障,无法正常运行
  • 服务使用了不支持的镜像,比如基础操作系统镜像,无法在前台守护运行。
  • 服务内存分配不足导致OOM
  • 服务健康检查配置错误,导致服务无法通过健康检查。

若是上诉情况,请处理你的服务配置,服务运行过程中如果异常退出Rainbond会自动守护并重新启动你的服务

  1. 服务无法访问怎么办?

服务无法访问时请查看如下几类原因:

  • 服务未正常运行,根据运行状态和服务日志确认
  • 服务端口配置不正确,服务端口配置务必与服务真实监听的端口一致
  • 服务可访问端口未打开对外服务开关
  • 服务未配置正确可访问的域名

关闭操作

使用场景:运行中或运行异常的服务

触发关闭操作后,服务将首先从应用网关或ServiceMesh网络下线,然后关闭所有运行实例,释放集群资源。

重启操作

使用场景:运行中或运行异常的服务

触发重启操作后,平台会将现有的服务运行实例全部关闭,待关闭完成后进行启动。若出现关闭超时时 重启操作将退出,服务启动的控制权交予用户。

- 重启服务并不会更新服务代码或镜像,需要和`构建`操作区分。 - 重启操作会中断服务

访问操作

使用场景:运行中的服务 && (打开了对外服务 | 对内服务的端口)

针对不同协议的服务,点击访问按钮后所触发的命令也不一样:

服务协议 点击访问按钮后的操作
HTTP 浏览器新开窗口,打开服务的默认域名,如果绑定多个域名,会显示域名列表供用户选择
TCP 弹出访问信息窗口
  • HTTP 协议服务

  • TCP 协议服务

管理容器操作

当需要进入服务的运行环境,查看进程信息、端口监听信息、文件内容或直接Debug源代码的情况下,需要进入服务的容器环境,Rainbond提供了两个入口:

  • 服务操作列表中的管理容器操作
  • 服务伸缩管理中的实例列表,点击实例名称即可进入