暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

干货:超详细云道基础版部署经验分享

中国电信云荐社区 2021-08-21
8649
为承接集团IT内部上云及“IT上云走出去”任务,内蒙古公司企信中心以“腾云杯”参赛队员为班底,成立了一支上云技术攻坚团队,主要负责小系统上云核心技术攻关、政企客户经理培训、及未来为外部客户提供咨询和支撑工作。
今年7月初,当在云荐社区获悉集团正在全国测试客户版六云平台的消息之后,团队成员立即着手启动了云翼、云眼和云道平台的测试工作。在部署过程中,因云道和云眼平台涉及的PaaS组件多、程序调用关系复杂,花费了团队成员不少时间精力。在部署期间,感谢广研院陈泳、上海公司周昱昕等同事给予大力的协助,没有他们的帮助,内蒙古团队很难在短时间内完成部署工作,下面就云道部署中的一些关键点与大家进行分享。
一、资源规划:
用途
IP
虚拟机资源
部署内容
K8S master
192.168.36.130
16C 32G 500G
K8S MasterNFS Storagess、Mongo、K8S插件-ingressapollo、应用模块:持续集成、部署中心、云生态门户
K8S-node01
192.168.36.131
16C 32G 500G
K8S node
K8S-node02
192.168.36.132
16C 32G 500G
K8S node
K8S-node03
192.168.36.133
16C 32G 500G
K8S node
RabbitMQ
192.168.36.134
16C 32G 500G
RabbitMQ
Kafka-01
192.168.36.135
8C 16G  500G
KafkaZookeeper(供Kafka使用)
Kafka-02
192.168.36.136
8C 16G  500G
KafkaZookeeper(供Kafka使用)
Kafka-03
192.168.36.137
8C 16G  500G
KafkaZookeeper(供Kafka使用)
NGINX
192.168.36.138
4C 8G 500G
中间件-Eureka
Redis-01
192.168.36.139
8C 32G 500G
Redis
Redis-02
192.168.36.140
8C 32G 500G
Redis
Redis-03
192.168.36.141
8C 32G 500G
Redis
NFS
192.168.36.142
8C 16G 1T
Web Server、NFS
镜像仓库
192.168.36.143
8C 16G 1T
镜像仓库Harbor 1.6
部署包仓库
192.168.36.144
8C 16G 500G
Artifactory
代码仓库
192.168.36.145
8C 16G 1T
Gitlab
构建服务器
192.168.36.146
16C 32G 1T
Jenkins
、初始化操作

利用Ansible批量执行主机初始化操作,涉及批量关闭防火墙、Selinux、ntpdate时间同步、安装JDK、配置/etc/security/limits.conf下的用户资源、配置sysctl.conf下的系统参数。

经过团队多次测试,部署的Ansible版本号最好在2.2以上,之前的版本,在部署K8S时,Ansible-Playbook中的很多语法都不支持,会出现频繁报错、无法部署的问题。

三、部署相关组件

该步骤涉及Eureka、Zookeeper、Kafka、Redis、Web Server、NFS、RabbitMQ,因为这些安装部署间依赖关系不大,可以无顺序安装部署。得益于基础版ansible脚本的完善强大,能够在部署时节省很多时间,但是需要注意:一是修改ansible脚本中的路径信息,与本地环境进行适配。二是记住脚本中设置的相关密码与配置,因为安装无感,后期出现问题很难排查。

此外,在部署docker时候缺少依赖包libcgroup-tools-0.41-21.el7.x86_64.rpm,需要手工在docker_rpm_18.06.3.zip中增加libcgroup-tools-0.41-21.el7.x86_64.rpm,并修改ansible脚本。

四、Harbor镜像仓库部署
在Harbor程序目录,执行“docker-compose up -d” 启动时报错:
需要在 etc/profile然后在尾部追加以下面代码:
接着执行“source etc/profile”,使新增的环境变量生效。
此外,docker-compose 启动停止 Harbor 1.6存在一些不兼容问题,团队从官网下载1.10版本后部署成功。
五、安装K8S Master以及中间件K8S node

在部署K8s-master前需要先部署Harbor并上传K8S组件基础镜像,K8-maser的部署依赖于Harbor仓库,部署完master再部署node。其次需要注意token、shar_value、dashboard token、JAVA api证书等相关信息。

六、Jenkins部署注意事项

在使用Python命令生成Jenkins密码时,一定要把原密码和加密密码记录下来。在加密时,需要注意crypt.crypt()函数内部输入的是用户密码,而不是用户名。如果这步错误,后期云道应用会频发与ci数据库中表jenkins_slice相关的错误,并引发构建失败。

应用及构建报错信息
解决方法:将云道token加密后的密码更新到jenkins_slice表中
七、Apollo部署

安装文档给出的Apollo配置说明较为简单,但其实该组件非常重要,直接关系到云道系统是否能够成功部署,团队在这块进行大量的测试及研究,以下就一些配置文件的关键信息作出说明。

1) properties-application

Key

Value

备注

spring.datasource.url

jdbc:mysql://192.168.36.177:3319/yundao_ci?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8

云道ci mysq库链接信息

spring.datasource.username

root

spring.datasource.password

XXX

spring.datasource.driver-class-name

com.mysql.jdbc.Driver

spring.rabbitmq.host

192.168.36.134

rabbitmq信息

spring.rabbitmq.port

5672

spring.rabbitmq.username

springcloud

spring.rabbitmq.password

XXX

spring.data.mongodb.uri

mongodb://cloudway:Yd#0711cda@192.168.36.130:32502/task_log

mongodb信息

spring.redis.sentinel.nodes

192.168.36.140:14450,192.168.36.139:14451,192.168.36.141:14452

redis相关信息

spring.redis.sentinel.master

yundao-master

spring.redis.password

XXX

eureka.client.service-url.defaultZone

http://192.168.36.138:18080/eureka/

eureka注册中心

 

2) properties-sys_config

Key

Value

备注

WEBHOOK_URL

http://192.168.36.130:32519/api/v1/pipline/gitwebhook

WEB_LOGO

http://192.168.36.144:8082/artifactory/yundao-generic-repo/login/logo/logo.png

云道登录图片地址

TITLE_ICO

http://192.168.36.144:8082/artifactory/yundao-generic-repo/login/logo/favicon_16.ico

云道网站徽标地址

JFROG_ARTIFACTORY_API_TOKEN

AKCp8jR6yF2N1pmRMQsvTfZXQQPshKNTb7rNTjp2PNUUJ66h2RiAdkS5v7au1MtkmiYu4BuJL

artifactoryApi-key

3)properties-vacp.base
Key
Value
备注
spring.kafka.bootstrap-servers
192.168.36.135:9092,192.168.36.136:9092,192.168.36.137:9092
kafka信息
customize.loginPage
http://192.168.36.130:30091/login
云道登录地址
4)properties-vacp.code
只配置kafka的相关信息即可
5)properties-vacp.common
把IP都换成云道应用部署的IP
6)properties-vacp.dashboard
Key
Value
备注
spring.datasource.primary.url
jdbc:mysql://192.168.36.177:3319/yundao_ci?useUnicode=true&characterEncoding=UTF-8&useSSL=false&zeroDateTimeBehavior=convertToNull
云道ci数据库信息
spring.datasource.primary.username
root
spring.datasource.primary.password
XXX
spring.datasource.primary.driver-class-name
com.mysql.jdbc.Driver
archiverdb数据库信息
spring.datasource.secondary.url
jdbc:mysql://192.168.36.177:3319/archiverdb?useUnicode=true&characterEncoding=UTF-8&useSSL=false&zeroDateTimeBehavior=convertToNull
spring.datasource.secondary.username
root
spring.datasource.secondary.password
XXX
spring.datasource.secondary.driver-class-name
com.mysql.jdbc.Driver
7)properties-vacp.portal.ui
Key  
Value
备注
spring.datasource.url
jdbc:mysql://192.168.36.177:3319/sso?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai
sso数据库信息
spring.datasource.username
root
spring.datasource.password
XXX
spring.datasource.driver-class-name
com.mysql.jdbc.Driver
spring.redis.sentinel.nodes
192.168.36.140:14450,192.168.36.139:14451,192.168.36.141:14452
redis信息
spring.redis.password
XXX
customize.indexPage
http://192.168.36.130:30088/modules/app/index.html
应用模块-持续集成信息
customize.jwt.signing-key
927976a4-981a-4d36-a1a8-3228ad151a87
customize.integration.user
sysadmin
customize.integration.password
XXX
customize.integration-client-id
yundao-ci
customize.integration-client-secret
3248250a-f003-49d4-a3b6-3757c6c52a8f
ARTIFACTORY_CLIENT_DOWNLOAD_URL
http://192.168.36.144:8082/artifactory/yundao-generic-repo/yundao/artifactory/client/com.vispractice.vacp.artifactory.jar
artifactory信息
eureka.client.service-url.defaultZone
http://192.168.36.138:18080/eureka/
注册中心地址
8)properties-vacp.repository
Key  
Value
备注
spring.datasource.primary.url
jdbc:mysql://192.168.36.177:3319/yundao_ci?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai
云道ci数据库信息
spring.datasource.primary.username
root
spring.datasource.primary.password
hans8638
spring.datasource.primary.driver-class-name
com.mysql.jdbc.Driver
9)properties-vacp.codecheck
只配置kafka的相关信息即可
八、部署应用模块-持续集成
一定反复多次确认Apollo的配置,并且把云道yundao-ci数据库相关表做备份,因为一旦加密后,就看不到了,给后续排查问题造成困难。表名如下:artifactory_slice、gitlab_slice、jenkins_slice。
其他还需要注意点:
1)部署脚本命名错误,路径为:
解决方案,修改字段名为yundao-basic-ui
2)需要提前在harbor系统上创建一个yundao项目,否则推送镜像会失败。
解决方案,在Harbor中建立一个yundao项目
九、CCSE与云道的对接

这块的难点是CCSE的对接,在这之前的准备工作如下:

云道创建用户:例如nmdx
云眼创建租户,并创建nmdx用户,需记录下租户id,以及 用户的id。(可以在云翼数据库pass中查看user、tenant表获取)此次搭建的租户是id100001,用户是id100002.
使用nmdx用户在云翼订购ccse分布式容器集群.
获取云翼对接云道的API地址:可以在云翼平台的安装目录中的application-prod文件中看到。
云翼对接云道的API的相关信息
1) 在云道yundao_ci库,user表的EXTERNAL_ID增加云翼nmdx账号的id.
2)在云翼的pass_ag库执行以下脚本
l设置初始化权限用户appkey与app密钥(生产环境可根据实际情况随机调整appkey(11位大小写字母数字)和secert(10位大小写字母数字))
l移除废弃APP
l插入基础版默认用户

l插入基础版默认用户授权
l云道ci库执行脚本

3)由于插入的appsecret值为明文,还需要调用加密接口加密后才能正常使用

注意:需要将上面执行的命令的k8smaster替换为本次部署环境的k8s master IP地址,token替换为最近30分钟获取的token。(token获取方式可以在安装文档中看到)。执行完以上步骤,云道资源管理中-pass组件查询,就可以看到云翼订购的ccse组件了。排查经验:可以查看云道的resource日志,以及云翼的agcore服务日志。
操作完毕后,云道PaaS组件查询界面可以看到CCSE组件
4)对接完成如在注册ccse步骤时,命名空间出不来的情况请检查云翼pass库的user_reference表是否为空
云道无法显示CCSE命名空间
解决方案:如果为空,增加订购用户id即可
5)命名空间出来后,注册完成,在持续集成处部署 报错未定义端口号。改问题是由于云道的yundao_ci库下resource_pool 表数据为空。从云翼找到ccse信息补充即可。
补充yundao_ci库下resource_pool表的相关信息
从云翼平台获取Srvice NodePort的相关信息
6)应用部署选择ccse,报错failed to deploy resource, the msg is: 参数异常,编码不符合k8s资源名称的命名规则。
应用部署时选择CCSE集群
部署时应用时报错
原因是注册组件是填写的云翼harbor库信息有误,可查询云道数据进行处理:

错误示范
正确配置
7)应用启动后报错:

应用启动后报错
原因是由于云道harbor未配置复制策略问题,需要配置复制到云翼ccse的harbor库。配置操作步骤截图如下:
仓库管理-->新建目标
设置推送Harbor库的相关信息
新建复制策略
选择Push模式
选择事件驱动类型,及覆盖的方式
需要在持续集成中重新打包,才会复制同步

作者:内蒙古电信企信部韩思祺、李庆华

文章转载自中国电信云荐社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论