跳到主要内容

私有云部署

在快速安装指南中,我们介绍了如何通过 Docker-Compose 命令,一键缺省安装 AREX 所有基础服务组件,包括前端 UI,MongoDB 数据库,Redis 缓存,数据存取服务(Storage Service), 调度服务(Schedule Service),API 服务(API Service)等(如上图所示)。这种方式不需要手动安装和配置每个服务,大大简化了安装过程,提高部署效率。然而,当需要部署到私有云的 Kubernetes 环境或者完全自定义的运行环境中时,Docker-Compose 的安装方式就不适用了。

本文档将详细为大家介绍一下如何在私有云中部署进行 AREX 的编译和配置。(如果你有其他特殊的部署需求或建议,也可以在 GitHub Issue 中提出)

AREX Agent 等的编译部署不再赘述, 详见注册应用一节.

AREX 组成

ID组件名称描述必须配置的内容
1Schedule Service提供回放发送和检索所有响应以进行比较设置与 Mongodb 数据库、Redis 缓存、AREX-API 服务、Schedule 服务、Storage 服务的连接信息
2AREX-API Service提供差异汇总并在响应比较后显示差异结果详细信息。设置与 Mongodb 数据库、Redis 缓存、Storage 服务、AREX UI(前端页面)的连接信息(AREX 的前端有登录模块,0.2.8 版本还是前端页面调用 AREX-API 服务,生成的邮件中包含跳转到前端页面的链接,所以此参数是为了跳转正确而配置的)
3Storage ServiceJava Agent提供保存录制和获取响应作为 Mock 数据的功能设置与 Mongodb 数据库、Redis 缓存、AREX-API 服务的连接信息
4AREX UIAREX 的前端展示模块设置与 AREX-API 服务、Schedule 服务、Storage 服务、沙盒服务(AREX Node)的连接信息
5MongoDB数据存储及配置管理数据库暴露 MongoDB 的端口与链接给各服务使用
6Redis高速回放缓存暴露 Redis 的端口与链接给各服务使用

AREX Kubernetes 环境安装

AREX 在 Kubernetes 环境中的安装配置文件目前位于 Deployments 仓库的 main 分支下的 arex-chart 目录。该目录下包含了用于安装 AREX 的 Helm Chart 配置文件。

安装

helm install --namespace arexarex-helm-name-beta ./arex-chart
--namespace arex (你计划配置的命名空间)
arex-helm-name-beta (你为这次安装的 Helm release 指定的名称)

升级

你可以直接使用 Helm 命令来更新已部署的应用程序。如果更新后的配置出现问题,Helm 还提供了回退功能,可以将 AREX 恢复到之前的版本。

helm upgrade <arex-your-installed-name> -n <your-namespace-name> ./arex-chart

删除

helm delete arex-beta-028 -n arex-beta

AREX 安装 Step By Step

在使用 AREX 时,不同用户的运行环境和部署需求可能会有所不同。因此,AREX 提供的默认 Helm Chart 可能无法满足所有用户的需求。在这种情况下,用户需要根据自己的实际情况手动修改现有的配置文件,或者完全重写新的配置文件,以便更好地适应他们的运行环境和部署目标。

提示

配置文件位于 deployment 仓库的 arex-chart 目录下,这些配置文件是用于部署和管理 AREX 的 Helm Chart。其中:

  1. Chart.yaml:这个文件包含了 Helm Chart 的描述信息,如版本、名称等。
  2. Values.yaml:这个文件包含了配置的默认值,用户可以根据需要修改这些值。
  3. templates:这个目录包含了各个组件(如 front, mongodb, pvc, redis, arex-api, schedule, storage, configmap)的配置文件。这些配置文件定义了组件之间的关系和配置信息。

MongoDB 和 Redis 安装

备注

强烈建议用户不要使用 AREX 内置的 MongoDB 和 Redis 服务,而是选择使用外部的 MongoDB 和 Redis 服务。因为数据备份需要数据库管理员(DBA)的专业配置,使用外部的专业数据库服务可以确保数据的安全性和稳定性。

在 AREX 的 Helm Chart 中,默认配置了一个 5GB 的本地存储空间用于 MongoDB 和一个 1GB 的本地存储空间用于 Redis。这样的配置仅适用于演示目的,不适合在实际生产环境中使用。

目前,AREX 0.2.8 版本使用的是 MongoDB 5.0 和 Redis 6.2.6,这两个都是知名的数据库服务。用户可以按照官方文档安装这两个服务。需要注意的是,某些服务器可能不支持 MongoDB 5.0,这时可以将版本修改为 4.4.21(已在 CentOS 上验证过可用)。

用户可以选择使用已经部署的 MongoDB 和 Redis 服务,也可以根据 AREX 提供的安装程序使用内置的 MongoDB 和 Redis 服务。这两个数据库服务为 AREX 的各个组件提供支持,无需额外配置。

在 Helm Chart 的 values.yaml 文件中,你可以配置 MongoDB 和 Redis 的连接信息。以下是一个示例:

# mongodb config demo
mongoInfo: "mongodb://arex:iLoveArex@10.5.153.1:27017/arex_storage_db"
# redis config demo
redisInfo: "redis://10.5.153.1:6390/"

关闭 MongoDB 或 Redis 服务,或者都关闭

如果你想在安装过程中关闭 MongoDB 或 Redis 服务,或者关闭它们两者,可以在初始安装时使用 helm install 命令并设置 mongodb.enabled=falseredis.enabled=false 参数。同时,你需要提供外部 MongoDB 和 Redis 服务的连接信息(mongoInforedisInfo)。如果你想在更新过程中关闭 MongoDB 和 Redis,可以使用 helm upgrade 命令并设置相同的参数。

初始安装时设置关闭

helm upgrade
--set mongodb.enabled=false
--set redis.enabled=false
--set mongoInfo="mongodb://arex:iLoveArex@yourMongoDBInfo_10.5.153.1:27017/arex_storage_db"
--set redisInfo="redis://yourIP_10.5.153.1:6390/"
arex-beta-028
-n arex-beta
./arex-chart

更新中关闭 Mongodb 和 Redis

helm upgrade
--set mongodb.enabled=false
--set redis.enabled=false
--set mongoInfo="mongodb://arex:iLoveArex@yourMongoDBInfo_10.5.153.1:27017/arex_storage_db"
--set redisInfo="redis://yourIP_10.5.153.1:6390/"
arex-beta-028
-n arex-beta
./arex-chart

这里的 arex-beta-028 是你的 release 名称,arex-beta 是你的命名空间。

另一种方法是直接修改 values.yaml 文件,然后使用 helm upgrade 命令进行更新:

helm upgrade arex-beta-028 -n arex-beta ./arex-chart

以下源码(_helpers.tpl)中的代码段展示了当 MongoDB 或 Redis 被禁用时,系统会直接读取 mongoInforedisInfo 的值。这意味着当你禁用内置的 MongoDB 或 Redis 时,系统会使用你提供的外部服务连接信息。

{{- define "arex.mongoConnection" -}}
{{- if .Values.mongodb.enabled -}}
{{- printf "mongodb://arex:iLoveArex@%s.%s.svc.cluster.local:%v/arex_storage_db" (include "arex.mongodb.fullname" .) .Release.Namespace .Values.mongodb.service.servicePort -}}
{{- else -}}
{{- .Values.mongoInfo -}}
{{- end -}}
{{- end -}}

{{- define "arex.redisConnection" -}}
{{- if .Values.redis.enabled -}}
{{- printf "redis://%s.%s.svc.cluster.local:%v/" (include "arex.redis.fullname" .) .Release.Namespace .Values.redis.service.servicePort -}}
{{- else -}}
{{- .Values.redisInfo -}}
{{- end -}}
{{- end -}}

AREX-API 服务安装

参考 arex-api-deployment.yaml

配置

          env:
- name: JAVA_OPTS
value: -Darex.mongo.uri={{ include "arex.mongoConnection" .}}
-Darex.redis.uri={{ include "arex.redisConnection" .}}
-Darex.storage.service.url=http://{{ template "arex.storage.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.storage.service.servicePort }}
-Darex.ui.url=http://{{ template "arex.front.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.front.service.servicePort }}
ports:
- containerPort: {{ .Values.api.service.servicePort }}

AREX-API 服务依赖 Mongodb,Redis,Storage 三个服务。

外部依赖参数配置配置范例描述
Mongodbarex.mongo.urimongodb://arex:iLoveArex@10.5.153.1:27017/arex_storage_db用户名:密码@mongoDB的服务器地址:端口/arex的数据库名
Redisarex.redis.uriredis://10.5.153.1:6390/Redis 服务器地址:端口
Storage 服务arex.storage.service.urlhttp://10.5.153.1:8093容器的端口是 8080,Docker-compose 中 AREX 缺省配置的是 8093 端口
AREX UI(前端)arex.ui.urlhttp://10.5.153.1:8080这个地址就是是解决邮件跳转所配置的 AREX 前端页面的 URL 地址,不是依赖。
提示
  1. 如果你使用 Helm 自带的 MongoDB 和 Redis 进行安装,那么无需修改这些配置,系统会自动指向默认的地址。

  2. 如果你想使用自己的 MongoDB 和 Redis 服务,你需要在 values.yaml 文件中设置 mongoInforedisInfo 地址,并将 redis.enabledmongodb.enabled 设置为 false。

  3. 如果你为存储服务(storage)设置了负载均衡,那么需要将 arex.storage.service.url 设置为你的存储负载均衡服务器地址。

  4. 如果你存储服务(storage)使用的是默认的存储配置,则由 Kubernetes 为你提供负载均衡和服务指向功能。

AREX Storage 服务安装

参考 arex-storage-deployment.yaml

配置

          env:
- name: JAVA_OPTS
value: -Darex.storage.mongo.host={{ include "arex.mongoConnection" .}}
-Darex.storage.cache.url={{ include "arex.redisConnection" .}}
-Darex.api.service.api=http://{{ template "arex.api.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.api.service.servicePort }}/
ports:
- containerPort: {{ .Values.storage.service.servicePort }}

Storage 服务依赖 Mongodb,Redis,AREX-API 三个服务。

外部依赖参数配置配置范例描述
Mongodbarex.storage.mongo.hostmongodb://arex:iLoveArex@10.5.153.1:27017/arex_storage_db用户名:密码@mongoDB的服务器地址:端口/arex的数据库名
Redisarex.storage.cache.urlredis://10.5.153.1:6390/Redis服务器地址:端口
AREX-API 服务arex.api.service.apihttp://10.5.153.1:8093容器的端口是 8080,Docker-compose 中 AREX 缺省配置的是 8093 端口
提示
  1. 如果你使用 Helm 自带的 MongoDB 和 Redis 进行安装,那么无需修改这些配置,系统会自动指向默认的地址。

  2. 如果你想使用自己的 MongoDB 和 Redis 服务,你需要在 values.yaml 文件中设置 mongoInforedisInfo 地址,并将 redis.enabledmongodb.enabled 设置为 false。需要注意的是,在一个环境中,你只能选择使用自带的服务或者外部服务,不能同时使用两者。

  3. 如果你为 AREX-API 服务设置了负载均衡,那么需要将 arex.api.service.url 设置为你的报告负载均衡服务器地址。

  4. 如果你 AREX-API 服务使用的是默认的报告配置,则由kubernetes提供负载均衡及服务指向。

AREX Schedule 服务安装

参考 arex-schedule-deployment.yaml

配置

          env:
- name: JAVA_OPTS
value: -Dmongo.uri={{ include "arex.mongoConnection" .}}
-Darex.schedule.cache.redis.host={{ include "arex.redisConnection" .}}
-Darex.storage.service.api=http://{{ template "arex.storage.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.storage.service.servicePort }}
-Darex.api.service.api=http://{{ template "arex.api.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.api.service.servicePort }}
ports:
- containerPort: {{ .Values.schedule.service.servicePort }}

Schedule 服务依赖 Mongodb,Redis,AREX-API,Storage 四个服务

外部依赖参数配置配置范例描述
Mongodbmongo.urimongodb://arex:iLoveArex@10.5.153.1:27017/arex_storage_db用户名:密码@mongoDB的服务器地址:端口/arex的数据库名
Redisarex.schedule.cache.redis.hostredis://10.5.153.1:6390/Redis 服务器地址:端口
Storage 服务arex.storage.service.apihttp://10.5.153.1:8093容器的端口是8080,Docker-compose 中 AREX 缺省配置的是 8093 端口
AREX-API 服务arex.api.service.apihttp://10.5.153.1:8090容器的端口是 8080,Docker-compose 中 AREX 缺省配置的是 8090 端口
提示
  1. 如果你使用 Helm 自带的 MongoDB 和 Redis 进行安装,那么无需修改这些配置,系统会自动指向默认的地址。

  2. 如果你想使用自己的 MongoDB 和 Redis 服务,你需要在 Values.yaml 文件中设置 mongoInforedisInfo 地址,并将 redis.enabledmongodb.enabled 设置为 false。需要注意的是,在一个环境中,你只能选择使用自带的服务或者外部服务,不能同时使用两者。

  3. 如果你为 AREX-API 服务设置了负载均衡,那么需要将 arex.api.service.url 设置为你的报告负载均衡服务器地址。

  4. 如果你为存储服务(storage)设置了负载均衡,那么需要将 arex.storage.service.url 设置为你的存储负载均衡服务器地址。

  5. 如果你 AREX-API 服务和存储服务(storage)使用的是默认配置,那么由 Kubernetes 提供负载均衡及服务指向。

AREX UI 安装

参考 arex-front-deployment.yaml

配置

# Helm Chart中的配置
env:
- name: SERVICE_API_URL
value: http://{{ template "arex.api.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.api.service.servicePort }}
- name: SERVICE_SCHEDULE_URL
value: http://{{ template "arex.schedule.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.schedule.service.servicePort }}
- name: SERVICE_NODE_URL
value: http://{{ template "arex.node.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.node.service.servicePort }}
- name: SERVICE_STORAGE_URL
value: http://{{ template "arex.storage.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.storage.service.servicePort }}

# Docker-Compose中的配置
environment:
- SERVICE_API_URL=http://arex-api-service:8080
- SERVICE_SCHEDULE_URL=http://arex-schedule-service:8080
- SERVICE_NODE_URL=http://arex-node:3000
- SERVICE_STORAGE_URL=http://arex-storage-service:8080

AREX UI 依赖 API,Schedule,Node,Storage 四个服务。

外部依赖参数配置配置范例(配置是环境变量)描述
Schedule 服务SERVICE_SCHEDULE_URLhttp://10.5.153.1:8092容器的端口是 8080,Docker-compose中 AREX 缺省配置的是 8092 端口
Node 服务SERVICE_NODE_URLhttp://10.5.153.1:3000容器的端口是3000
Storage 服务SERVICE_STORAGE_URLhttp://10.5.153.1:8093容器的端口是 8080,Docker-compose 中 AREX 缺省配置的是 8093 端口
AREX-API 服务SERVICE_API_URLhttp://10.5.153.1:8090容器的端口是 8080,Docker-compose 中 AREX 缺省配置的是 8090 端口
提示
  1. 如果你使用 Helm 自带的安装方式来部署 AREX 的各个服务(如 MongoDB、Redis、报告服务等),那么无需修改这些配置,系统会自动指向默认的地址。

  2. 如果你使用自定义的环境和负载均衡设置,那么你需要使用自己的负载均衡服务地址和端口信息来配置 AREX。

配置范例

以下是一个 AREX Helm Chart 的配置范例,展示了如何设置各个服务的 URL。

SERVICE_API_URL:    http://arex-beta-028-arex-api.arex-beta.svc.cluster.local:8080                                                                                                                    
SERVICE_SCHEDULE_URL: http://arex-beta-028-arex-schedule.arex-beta.svc.cluster.local:8080
SERVICE_NODE_URL: http://arex-beta-028-arex-node.arex-beta.svc.cluster.local:3000
SERVICE_STORAGE_URL: http://arex-beta-028-arex-storage.arex-beta.svc.cluster.local:8080
UI: http://arex-beta-028-arex-ui.arex-beta.svc.cluster.local:8080

提示

这里的 "arex-beta-028" 是 Helm release 的名称,"arex-beta" 是 Kubernetes 的命名空间。

AREX Helm Chart 中 PV 配置

在 AREX Helm Chart 中,提供了 PersistentVolume(PV)和 PersistentVolumeClaim(PVC)的配置示例,这些示例仅包括本地存储(local-storage)模式。

这部分配置涉及到 MongoDB 和 Redis 的部署设置,建议的最小存储空间分别为 20GB 和 5GB(AREX 推荐的最小值)。

需要注意的是,用户需要根据自己的实际环境需求来修改这些配置,以确保存储空间符合实际使用情况。

配置

apiVersion: v1
kind: PersistentVolume
metadata:
name: arex-pv-5-volume
labels:
type: local
spec:
storageClassName: local-storage
capacity:
storage: 20Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: arex-pv-1-volume
labels:
type: local
spec:
storageClassName: local-storage
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/mnt/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: arex-mongodb-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
storageClassName: local-storage
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: arex-redis-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: local-storage

其他模式的 PV 和 PVC 请用户自行配置。

arex-mongodb-deployment.yaml 配置

只需要关注并修改 mongo-data 的配置部分。其他两个挂载(mount)部分,即配置参数和初始化相关的设置,无需修改。

          volumeMounts:
- name: mongodb-config
mountPath: /etc/mongo.conf
- name: mongo-data
mountPath: /data/db
- name: settings
mountPath: /docker-entrypoint-initdb.d/mongo-init.js
subPath: mongo-allone-init.js
resources:
{{ toYaml .Values.mongodb.resources | indent 12 }}
{{- if .Values.mongodb.nodeSelector }}
nodeSelector:
{{ toYaml .Values.mongodb.nodeSelector | indent 8 }}
{{- end }}
{{- if .Values.mongodb.tolerations }}
tolerations:
{{ toYaml .Values.mongodb.tolerations | indent 8 }}
{{- end }}
{{- if .Values.mongodb.affinity }}
affinity:
{{ toYaml .Values.mongodb.affinity | indent 8 }}
{{- end }}
volumes:
- name: mongo-data
persistentVolumeClaim:
claimName: arex-mongodb-pvc

arex-redis-deployment.yaml 配置

这部分只需要修改 redis-data 的配置。

          ports:
- containerPort: 6379
volumeMounts:
- name: redis-data
mountPath: /data
resources:
{{ toYaml .Values.redis.resources | indent 12 }}
{{- if .Values.redis.nodeSelector }}
nodeSelector:
{{ toYaml .Values.redis.nodeSelector | indent 8 }}
{{- end }}
{{- if .Values.redis.tolerations }}
tolerations:
{{ toYaml .Values.redis.tolerations | indent 8 }}
{{- end }}
{{- if .Values.redis.affinity }}
affinity:
{{ toYaml .Values.redis.affinity | indent 8 }}
{{- end }}
volumes:
- name: redis-data
persistentVolumeClaim:
claimName: arex-redis-pvc
{{- end }}

AREX Node 服务安装

参考 arex-node-deployment.yaml,Node 服务被 AREX UI 调用,不主动对外访问,没有需要配置的内容。

备注

注: 0.3.0 及以上版本已去掉此服务及所有配置项。