We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
DSS(DataSphereStudio)的实现强依赖于Linkis计算中间件,dss包含6个,而底层linkis需要部署18个服务,所以一般基于dss二次开发,关键就是对linkis的hadoop集群做适配,以及超多的微服务导致部署的问题(工作量大,服务间存在依赖,容易出错)。
本文主要的关注点是如何将dss应用于生产环境并采用gerrit + jenkins + ansible + docker实施cicd,实现对linkis和dss的自动化部署,封装每个微服务在不同运行环境的配置和启动脚本。
gerrit + jenkins + ansible + docker
cicd
DSS(DataSphereStudio)是一个一站式数据应用开发管理门户,基于插拔式的集成框架设计,基于计算中间件Linkis实现。
Linkis
linkis总共18个微服务
ujes 统一作业执行引擎
每个服务的目录结构都一致,ujes部分会多一些引擎相关的配置:
由于linkis和dss都是微众开源的,dss部署包的目录结构和linkis类似;
安装linkis+dss服务测试环境,采用4核8G*6台虚机:
测试采用简化部署结构,生产eureke,linkis-resourcemanager需要HA部署; 每个服务的堆大小默认设置为1G; 服务间存在依赖关系,需按顺序启动:比如需先启动eureka,gateway,resoucemanager等基础服务,再启动其他应用层服务;
单机资源够的情况下,测试时可以将ujes都部署在一台服务器;
实际生产环境,根据服务使用人数,具体可参考官方的文档Linkis生产部署参考指南做容量规划。
主体CICD流程:代码提交到gerrit,review成功后,自动mvn打包,并通过ansible在测试环境发布重启docker容器,同时生成生产环境的部署包;
自定义hadoop版本,修改linkis根目录和linkis-ujes-spark-engine项目的pom.xml文件 比如修改hadoop到2.6
<hadoop.version>2.6.5</hadoop.version> <hive.version>1.1.0</hive.version> <spark.version>2.3.0</spark.version>
编译问题 shell-enginemanager存在jackson包冲突会导致启动失败,保留2.10.0,其他版本exclude即可; 遇到Assembly is incorrectly configured问题,将useStrictFiltering属性改成false即可; eureke需设置instance-id、prefer-ip-address和ip-address,不然显示的是docker内部ip,且服务间不能正常通信(使用的默认是docker内部ip);
编译问题
2.10.0
Assembly is incorrectly configured
useStrictFiltering
instance-id
prefer-ip-address
ip-address
mvn -N install
mvn -Pspark2.3 clean install
上述流程可通过
JJB(jenkins job builder)
devops as code
gerrit trigger
在官方的config目录下添加dev、test、prod等配置,按不同部署环境的环境变量配置config.sh和db.sh,并通过docker挂载到容器内;
linkis和dss的目录结构比较规范,做容器化时,只需要参考install.sh中的脚本,拆分成多个entrypoint即可。
注意
bin/start-{SERVICE_NAME}.sh
SERVER_LOG_PATH
/var/log/{SERVICE_NAME}
log4j.properties
logs/linkis.log
实现startup.sh ${SERVICE_NAME},通过SERVICE_NAME参数实现启动指定的微服务; 每个微服务的entrypoint脚本主要实现几个步骤:
startup.sh ${SERVICE_NAME}
docker容器的entrypoint示例:startup.sh
# load config and init RUN_ENV=${DSS_RUN_ENV:=dev} # eg. /opt/dss/dss-dist shellDir=${DSS_INSTALL_HOME}/bin echo "shellDir:${shellDir}" # tar package path workDir=$( cd ${shellDir}/.. pwd ) export workDir=$workDir echo 'workDir' ${workDir} # eg. /opt/dss/dss-run DSS_WORK_HOME=${DSS_WORK_HOME:=${workDir}} export DSS_WORK_HOME=$DSS_WORK_HOME echo 'DSS_WORK_HOME' ${DSS_WORK_HOME} # init directories and log dir export LOG_DIR=/var/log/$1 mkdir -p ${LOG_DIR} touch $LOG_DIR/linkis.out echo "LOGDIR:${LOG_DIR}" source ${workDir}/bin/common.sh source entrypoint/$1.sh echo "tail begin" exec bash -c "tail -n 1 -f $LOG_DIR/linkis.out"
linkis-gateway的entrypoint示例:linkis-gateway.sh
source ${workDir}/bin/entrypoint/functions.sh EUREKA_URL=http://$EUREKA_INSTALL_IP:$EUREKA_PORT/eureka/ ##GateWay Install PACKAGE_DIR=springcloud/gateway APP_PREFIX="linkis-" SERVER_NAME="gateway" SERVER_PATH=${APP_PREFIX}${SERVER_NAME} SERVER_IP=$GATEWAY_INSTALL_IP SERVER_PORT=$GATEWAY_PORT SERVER_HOME=$LINKIS_WORK_HOME ###install dir installPackage ###update linkis.properties echo "$SERVER_PATH-update linkis conf" SERVER_CONF_PATH=$SERVER_HOME/$SERVER_PATH/conf/linkis.properties executeCMD $SERVER_IP "sed -i \"s#wds.linkis.ldap.proxy.url.*#wds.linkis.ldap.proxy.url=$LDAP_URL#g\" $SERVER_CONF_PATH" executeCMD $SERVER_IP "sed -i \"s#wds.linkis.ldap.proxy.baseDN.*#wds.linkis.ldap.proxy.baseDN=$LDAP_BASEDN#g\" $SERVER_CONF_PATH" executeCMD $SERVER_IP "sed -i \"s#wds.linkis.gateway.admin.user.*#wds.linkis.gateway.admin.user=$deployUser#g\" $SERVER_CONF_PATH" isSuccess "subsitution linkis.properties of $SERVER_PATH" echo "<----------------$SERVER_PATH:end------------------->" ##GateWay Install end # start and check startApp sleep 10 checkServer
原则是尽量统一行为规范,便于实施约定由于配置,实现运维自动化。
最后说一句,微服务如果不用docker/k8s真的是太遗憾了,谁用谁说香啊,官方赶紧出一个吧!
The text was updated successfully, but these errors were encountered:
目前linkis-0.9.4的linkis-mdm和linkis-dsm以及linkis-cs-server微服务实际没有用上 可以在pom中取消编译,assembly中删除打包,生产环境不部署
Sorry, something went wrong.
No branches or pull requests
DSS(DataSphereStudio)的实现强依赖于Linkis计算中间件,dss包含6个,而底层linkis需要部署18个服务,所以一般基于dss二次开发,关键就是对linkis的hadoop集群做适配,以及超多的微服务导致部署的问题(工作量大,服务间存在依赖,容易出错)。
本文主要的关注点是如何将dss应用于生产环境并采用
gerrit + jenkins + ansible + docker
实施cicd
,实现对linkis和dss的自动化部署,封装每个微服务在不同运行环境的配置和启动脚本。关于DSS
DSS(DataSphereStudio)是一个一站式数据应用开发管理门户,基于插拔式的集成框架设计,基于计算中间件
Linkis
实现。Linkis部署结构
linkis总共18个微服务
Linkis服务列表
Linkis部署包组成
每个服务的目录结构都一致,ujes部分会多一些引擎相关的配置:
DSS部署结构
由于linkis和dss都是微众开源的,dss部署包的目录结构和linkis类似;
DSS部署资源规划
安装linkis+dss服务测试环境,采用4核8G*6台虚机:
单机资源够的情况下,测试时可以将ujes都部署在一台服务器;
实际生产环境,根据服务使用人数,具体可参考官方的文档Linkis生产部署参考指南做容量规划。
DSS的CICD流程
主体CICD流程:代码提交到gerrit,review成功后,自动mvn打包,并通过ansible在测试环境发布重启docker容器,同时生成生产环境的部署包;
Linkis自定义编译
自定义hadoop版本,修改linkis根目录和linkis-ujes-spark-engine项目的pom.xml文件
比如修改hadoop到2.6
DSS的部署包准备
mvn -N install
mvn -Pspark2.3 clean install
上述流程可通过
JJB(jenkins job builder)
实现devops as code
,以yaml编写ci流程,ci流程更新后自动触发jenkins任务更新;gerrit trigger
,配置不同的hook,让代码更新后自动触发对应的job构建;DSS的多环境自动部署
在官方的config目录下添加dev、test、prod等配置,按不同部署环境的环境变量配置config.sh和db.sh,并通过docker挂载到容器内;
linkis和dss的目录结构比较规范,做容器化时,只需要参考install.sh中的脚本,拆分成多个entrypoint即可。
DSS的运行日志
bin/start-{SERVICE_NAME}.sh
脚本然后将SERVER_LOG_PATH
改为/var/log/{SERVICE_NAME}
,SERVER_LOG_PATH
并挂载到docker中,以便在容器重启后能够保持日志;log4j.properties
中的logs/linkis.log
改为${env:SERVER_LOG_PATH}/linkis.log;DSS的Docker镜像
DSS的Docker服务
实现
startup.sh ${SERVICE_NAME}
,通过SERVICE_NAME参数实现启动指定的微服务;每个微服务的entrypoint脚本主要实现几个步骤:
bin/start-{SERVICE_NAME}.sh
启动服务;DSS的CICD建议
DSS相关术语
The text was updated successfully, but these errors were encountered: