本文讲解应用的行为,也就是说用户可以对应用做哪些控制。

一、应用基本操作

重新部署、启动、关闭、重启和访问是应用最基本和最常用的操作,根据应用的不同状态,用户可以执行不同的操作,下面会针对每一个操作介绍功能和操作后所触发的事件。

1.1 重新部署

适用场景:应用的任何状态

针对不同类型的应用,触发 重新部署 操作后,有着不同的含义,下表针对不同类型的应用加以说明:

应用类型说明
各语言源代码拉取最新源代码,通过rbd-chaos调用builder进行构建,上线应用
Dockerfile 源码拉取最新源代码,通多 docker build 创建 Docker 镜像,push 镜像到内部镜像仓库,上线应用
Docker 镜像重新拉取指定镜像地址的镜像,推送到本地镜像仓库,上线应用
云市应用重新拉取云市应用镜像/应用包,推送到本地镜像仓库,上线应用

提示:

  • Dockerfile 源码类应用就是将 Dockerfile 及所需要的文件放到 代码仓库(Git/Svn),通过源代码创建的应用。
  • 重新部署后,如果一切顺利,应用会自动切换为新版本并上线,即使代码没有更新,也会触发应用滚动上线的流程。
  • 单节点应用重新部署后服务会有 3~10 秒的中断(根据应用启动时间),多节点应用服务不受影响。
  • 处于关闭状态的应用,触发重新部署操作后,如果构建正常,平台会将应用运行起来。

1.2 启动

使用场景:首次构建成功,并处于关闭状态的应用

启动操作会启动上一次成功构建的镜像,如果运行正常会自动上线。

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

  • 应用概览页的操作日志应用控制 - 图1

  • 应用日志页面应用控制 - 图2

1.3 关闭

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

触发关闭操作后,平台会将应用的从负载均衡下线并关闭应用容器,多个节点的应用会滚动下线。

1.4 重启

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

触发重启操作后,平台会将现有的应用重启,对于无状态应用,重启过程滚动进行,有状态应用,将关闭全部实例后再启动。

注意:

  • 重启应用并不会更新应用代码或镜像,需要和重新部署操作区分。
  • 重启操作会中断有状态应用和单节点无状态应用的服务。

1.5 访问

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

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

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

  • TCP 协议应用
    应用控制 - 图4

二、回滚应用到指定版本

应用每次成功部署后,都会生成一个应用版本,每个版本对应一次代码提交(基于源码创建),或者一个镜像(Docker 镜像创建)。

通过 构建版本管理 功能,可以将应用回滚到指定版本。

  • 构建版本管理
    应用控制 - 图5

  • 回滚到指定版本应用控制 - 图6

注意:

  • 回滚操作是关闭现有版本应用,再启动其他版本应用的过程,本质上是一个应用重启的操作,因此针对单节点应用会中断服务。
  • 多节点应用回滚操作采用滚动升级方式,因此时不会影响服务,但会有较短的时间同时存在 2 种版本的情况。

三、伸缩应用

平台应用有两种伸缩方式:

  • 垂直伸缩:增加或减少应用的内存(应用 CPU 与内存是联动的,按照一定的比例调整
  • 水平伸缩:增加或减少应用的实例数
    应用控制 - 图7

注意:

  • 垂直伸缩时平台会自动调整资源后重启应用,单节点应用服务会中断,多节点应用服务不受影响。
  • 水平伸缩时平台通过滚动新增或者下线节点的方式进行操作,因此操作不会影响现有服务。

3.1 垂直伸缩 CPU 与内存比例关系

申请值比例(CPU/内存)限制值比例(CPU/内存)
0.24/11.28/1

提示:

  • Kubernetes 针对 CPU 和内存分为申请值与限制值,详情参见: 管理容器的计算资源
  • 平台目前调整的 CPU 与内存占比是经过生产环境验证过,目前平台还没有提供修改占比的方式。

3.2 应用实例内存使用情况

在实例情况一栏中可监控每个实例的内存使用百分比,可参考内存使用的大小来伸缩内存。

提示:

  • 监控数据非实时数据,存在10s内的时间误差。

四、添加应用存储

4.1 应用为什么要添加存储

应用是平台的抽象概念,底层是通过容器封装运行起来的,容器默认是没有存储的,也就是说,在容器中的程序在运行过程中的日志、生成或处理的文件,一旦容器关闭或重启,之前生成或存储的文件就丢失了。

因此,为了保存程序运行中的文件,需要给容器挂载一个存储,在 rainbond 中,只要给应用挂载一个存储,即使应用水平扩展几十上百个节点,平台都会自动挂载。

4.2 如何为应用添加存储

为应用添加存储有两种方式:

  • (1) 新增应用存储
    找到 【存储】页面

应用控制 - 图8

点击 【添加持久化】按钮

应用控制 - 图9

存储添加完成

应用控制 - 图10

  • (2) 挂载其他应用的存储
    在【存储】页面找到 【挂载目录】应用控制 - 图11

点击【挂载目录】按钮后,勾选需要挂载其他应用的名称,并填写挂载到本应用的目录应用控制 - 图12

完成挂载其他应用存储

应用控制 - 图13

注意:

  • 新增或挂载其他应用的存储后,需要重启应用。
  • 新增或挂载其他应用存储时,本应用的路径不能使用 Linux 系统保留目录,如:/dev、/usr、/bin、/sys、/proc 等

五、应用端口与域名管理

5.1 应用端口管理

端口相关的管理包含,端口号,端口协议,端口访问控制、对内服务端口变量设置等操作,下图是不同团队、不同端口的应用开启了不同访问控制后的示意图:

应用控制 - 图14

端口号设置

应用端口与容器内部程序监听的端口是完全对应的关系,也就是说,当程序启动后监听的端口是80,那应用的端口就应该设置为80。

可以通过【添加端口】功能为应用添加其他的端口,需要确保添加的端口与程序监听的端口一致,并选择对应的端口协议。

端口协议

端口可以指定不同的协议类型,目前Rainbond支持 HTTPTCPUDPMySQL 协议,请确保选择的协议与你程序监听的协议一致。

协议的选择会影响应用的后续操作:

  • 性能分析功能

不同协议的应用启动了性能分析插件后,其性能分析的方式会有所不同,如HTTP协议会分析HTTP相关的数据,MySQL协议会分析MySQL语句相关的数据。

  • 打开对外服务后的访问

当端口打开对外服务后,HTTP协议会分配默认的域名,非HTTP协议会分配IP+端口的访问方式

端口访问控制

端口的访问控制分为两类:

  • 对内服务

开启租户网络内部的访问许可,这时,该团队内部的应用可以通过【添加依赖服务】的方式访问到该应用。

  • 对外服务

打开对外服务后,平台会将该应用映射的端口添加到全局负载均衡,这时平台外部以及平台内部其他团队的应用都可以通过负载均衡分配的域名或IP访问到该应用。

提示:

  • 修改端口信息后需要重启应用。
  • 端口打开对内服务后,其他应用要想连接到该应用,需要先【添加依赖服务】建立关联,然后通过连接地址或环境变量连接。
  • 端口访问控制可以根据需要开启和关闭,可单独开启,也可以全部开启,如果应用是个worker程序,只需要连接别的服务,本身没有端口监听就没有必要开启端口访问。

5.2 应用域名管理

Rainbond为每一个HTTP应用自动生成一个默认的域名,一般情况下这个域名都比较长,不方便记忆。你可以通过下面两种方式修改默认域名:

  • 修改默认域名:修改应用默认生成的域名前缀,主域名是安装云帮时生成或指定的。
  • 绑定新域名:为应用指定一个新域名,绑定完成后,需要在你的DNS域名服务商的那里设置一下CNAME记录。
    详细操作文档请参考:自定义应用域名

六、添加应用依赖服务

6.1 应用为什么要依赖其他服务

当一个独立的业务系统不能完成所有功能时,就需要借助其他的服务来实现。如web服务一般都需要数据库存储数据,前端页面展现程序需要调用后端API服务获取数据等等。

建立应用依赖的操作请参考:添加数据库依赖

6.2 应用如何连接依赖服务

当应用开启对内服务后,其他应用才能通过【添加依赖服务】的方式进行关联,应用与依赖的服务建立起关联后,下一步就是连接依赖服务。

在【依赖】页面中的 【依赖应用信息】可以看到已经依赖的服务:

应用控制 - 图15

(1) 获取连接信息

选择其中一个依赖服务,点击【连接信息】会弹出连接信息页面:应用控制 - 图16

连接信息分为两类:

  • 变量名

当应用的端口打开对内服务后,会生成一个默认的端口别名这个别名就是该应用的连接信息的前缀。如一个内部的API服务,端口别名是 USERAPI 则,其他应用与该API建立关联后,就可以通过 USERAPI_HOST 找到API服务的连接IP,通过USERAPI_PORT 找到API服务的端口号,如果还需要添加其他的变量名,可以通过 【依赖】—【应用连接信息】添加更多的依赖相关的变量。

  • 变量值

应用可以通过确定的变量值来连接被依赖(打开对内服务)的应用,我们不推荐使用这种方式连接,这种方式属于硬编码,所有配置都写死到代码中,对于业务安全与程序灵活性都有影响。我们推荐使用环境变量名的方式连接应用。

(2) 应用连接依赖服务

当应用添加了依赖,并且查看了连接信息后,下一步就是修改应用的配置,连接依赖的服务,以Springcloud程序为例介绍通过环境变量的形式连接依赖的服务:

application.yml 文件

  1. ...
  2. spring:
  3. data:
  4. mysql:
  5. host: ${MYSQL_HOST}
  6. username: ${MYSQL_USER}
  7. password: ${MySQL_PASS}
  8. database: ${MYSQL_DB}
  9. port: ${MYSQL_PORT}
  10. ...

其他各类语言都有获取环境变量的方法,如果不想用环境变量,也可以使用直接变量值,但按照十二要素原则,我们不推荐使用硬编码的方式连接应用。

七、进入容器命令行

运行起来的应用后端都是由容器提供的,平台提供了通过浏览器的方式登录到应用容器命令行的方式。当应用正常启动后,可以通过【管理容器】按钮,选择某个节点,进入到容器命令行:

应用控制 - 图17

提示:

  • 当无法正常打开控制台时,请检查应用状态是否正常。
  • Web控制台只用作查看和调试程序,不建议通过控制台部署业务相关的服务。

八、查看应用日志

当应用创建完成后,会有两种日志与该应用有关:

九、应用高级设置

应用的其他功能,包括更多的应用信息、自动部署、健康检查等高级功能都在 应用的 【设置】页面中,下文会对每一块功能做详细介绍。

9.1 应用基础信息

应用基础信息显示了应用当前的版本信息、来源及状态,不同类型的应用显示的内容也会有所不同,下面针对不同类型的应用分别介绍:

Docker镜像源码构建应用云市应用
应用控制 - 图18应用控制 - 图19应用控制 - 图20

提示:

  • 只有通过源码构建的应用才显示Git/Svn仓库地址和分支信息
  • Docker镜像、Docker Run命令和Docker compose的方式创建的应用会显示镜像地址和版本

9.2 自动部署

目前自动部署支持通过Git仓库源码创建的应用,后续会提供Svn仓库、Docker镜像仓库的自动部署功能。

在应用【设置】页面,自动部署区域,点击【开启自动部署】按钮后,会提示类似如下信息:

应用控制 - 图21

详细文档请参考: 应用持续构建与部署

9.3 自定义环境变量

当你通过应用【设置】中的自定义环境变量,添加变量时,应用下次启动会加载这些环境变量。

通常情况下,我们将配置信息写到配置文件中供程序读取使用,在Rainbond平台中,我们极力推荐使用环境变量的方式来代替传统的配置文件的方式。

这样做的好处如下:

  • 将配置信息与应用绑定,与代码解耦,摆脱不同环境下切换配置文件的麻烦
  • 敏感信息与代码分离,避免程序漏洞造成数据丢失
  • 省去配置管理的工作
    下面是一个生产环境的应用使用环境变量进行配置的截图:
应用控制 - 图22

以Python为例介绍在配置读取环境变量的方法:

  1. # -*- coding: utf8 -*-
  2. import os
  3. DEBUG = os.environ.get('DEBUG') or False
  4. TEMPLATE_DEBUG = os.environ.get('TEMPLATE_DEBUG') or False
  5. DEFAULT_HANDLERS = [os.environ.get('DEFAULT_HANDLERS') or 'zmq_handler']
  6. DATABASES = {
  7. 'default': {
  8. 'ENGINE': 'django.db.backends.mysql',
  9. 'NAME': 'goodrain',
  10. 'USER': os.environ.get('MYSQL_USER'),
  11. 'PASSWORD': os.environ.get('MYSQL_PASSWORD'),
  12. 'HOST': os.environ.get('MYSQL_HOST'),
  13. 'PORT': os.environ.get('MYSQL_PORT'),
  14. }
  15. }
  16. ...

9.4 健康检查

为了了解应用启动后的服务是否可用,已经应用运行中的服务运行情况,我们增加了应用检查的功能:

  • 启动时检查

应用启动时的健康检查,用户可根据应用的协议、端口自定义设置监控选项。如果达到检查的阈值,平台会重启应用

应用启动时检查配置示例

应用控制 - 图23

示例配置:当容器启动2秒后,开始对 5000 端口进行 tcp 协议的第一次检查,如果等待20秒检查没有结果,平台会重启应用,如果20秒内成功返回,平台认为应用启动成功。

  • 运行时检查

应用运行时的监控检查,用户可根据应用的协议、端口自定义设置监控选项。如果达到检查的阈值,平台会重启应用(生产环境谨慎设置)

应用运行时检查配置示例

应用控制 - 图24

示例配置:当应用成功启动后,等待20秒,针对5000端口,tcp协议进行第一次检查,每隔3秒检查一次,检查超时时间20秒,如果连续三次检查都失败,平台会重启应用。

9.5 成员应用权限

关于角色权限定义的文档请参考:角色与团队成员管理

这里主要讲的是应用权限的管理,当某个用户加入到团队时,团队管理员决定该用户的角色,如果要限制某个用户只能管理某些应用,建议使用 Viewer(观察者) 角色,然后根据需要在应用的 【成员应用权限】中设置应用的管理权限。

9.6 修改构建源

对于已经部署完成的应用,如果你想要修改应用的构建源,可在应用设置中的构建源一栏中重新修改此应用的构建源,当再次重新部署应用时,便会使用新的构建源部署应用。应用控制 - 图25

十、删除应用

平台提供应用永久删除功能,应用删除后,应用信息会从控制台和数据中心数据库中删除,持久化数据暂时保留。

目前还没有恢复删除应用的功能,请谨慎使用该功能。

应用控制 - 图26