为承接集团IT内部上云及“IT上云走出去”任务,内蒙古公司企信中心以“腾云杯”参赛队员为班底,成立了一支上云技术攻坚团队,主要负责小系统上云核心技术攻关、政企客户经理培训、及未来为外部客户提供咨询和支撑工作。今年7月初,当在云荐社区获悉集团正在全国测试客户版六云平台的消息之后,团队成员立即着手启动了云翼、云眼和云道平台的测试工作。在部署过程中,因云道和云眼平台涉及的PaaS组件多、程序调用关系复杂,花费了团队成员不少时间精力。在部署期间,感谢广研院陈泳、上海公司周昱昕等同事给予大力的协助,没有他们的帮助,内蒙古团队很难在短时间内完成部署工作,下面就云道部署中的一些关键点与大家进行分享。 | | | |
| | | K8S Master、NFS Storagess、Mongo、K8S插件-ingress、apollo、应用模块:持续集成、部署中心、云生态门户 |
| | | |
| | | |
| | | |
| | | |
| | | Kafka、Zookeeper(供Kafka使用) |
| | | Kafka、Zookeeper(供Kafka使用) |
| | | Kafka、Zookeeper(供Kafka使用) |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
利用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程序目录,执行“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证书等相关信息。
在使用Python命令生成Jenkins密码时,一定要把原密码和加密密码记录下来。在加密时,需要注意crypt.crypt()函数内部输入的是用户密码,而不是用户名。如果这步错误,后期云道应用会频发与ci数据库中表jenkins_slice相关的错误,并引发构建失败。
解决方法:将云道token加密后的密码更新到jenkins_slice表中安装文档给出的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 | artifactory的Api-key |
| | |
spring.kafka.bootstrap-servers | 192.168.36.135:9092,192.168.36.136:9092,192.168.36.137:9092 | |
| http://192.168.36.130:30091/login | |
6)properties-vacp.dashboard | | |
spring.datasource.primary.url | jdbc:mysql://192.168.36.177:3319/yundao_ci?useUnicode=true&characterEncoding=UTF-8&useSSL=false&zeroDateTimeBehavior=convertToNull | |
spring.datasource.primary.username | |
spring.datasource.primary.password | |
spring.datasource.primary.driver-class-name | | |
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 | |
spring.datasource.secondary.password | |
spring.datasource.secondary.driver-class-name | |
7)properties-vacp.portal.ui | | |
| jdbc:mysql://192.168.36.177:3319/sso?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai | |
spring.datasource.username | |
spring.datasource.password | |
spring.datasource.driver-class-name | |
spring.redis.sentinel.nodes | 192.168.36.140:14450,192.168.36.139:14451,192.168.36.141:14452 | |
| |
| http://192.168.36.130:30088/modules/app/index.html | |
customize.jwt.signing-key | 927976a4-981a-4d36-a1a8-3228ad151a87 |
customize.integration.user | |
customize.integration.password | |
customize.integration-client-id | |
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 | |
eureka.client.service-url.defaultZone | http://192.168.36.138:18080/eureka/ | |
8)properties-vacp.repository | | |
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 | |
spring.datasource.primary.username | |
spring.datasource.primary.password | |
spring.datasource.primary.driver-class-name | |
9)properties-vacp.codecheck一定反复多次确认Apollo的配置,并且把云道yundao-ci数据库相关表做备份,因为一旦加密后,就看不到了,给后续排查问题造成困难。表名如下:artifactory_slice、gitlab_slice、jenkins_slice。解决方案,修改字段名为yundao-basic-ui2)需要提前在harbor系统上创建一个yundao项目,否则推送镜像会失败。解决方案,在Harbor中建立一个yundao项目这块的难点是CCSE的对接,在这之前的准备工作如下:
②云眼创建租户,并创建nmdx用户,需记录下租户id,以及 用户的id。(可以在云翼数据库pass中查看user、tenant表获取)此次搭建的租户是id100001,用户是id100002.③使用nmdx用户在云翼订购ccse分布式容器集群.④获取云翼对接云道的API地址:可以在云翼平台的安装目录中的application-prod文件中看到。1) 在云道yundao_ci库,user表的EXTERNAL_ID增加云翼nmdx账号的id.l设置初始化权限用户appkey与app密钥(生产环境可根据实际情况随机调整appkey(11位大小写字母数字)和secert(10位大小写字母数字))
3)由于插入的appsecret值为明文,还需要调用加密接口加密后才能正常使用
注意:需要将上面执行的命令的k8smaster替换为本次部署环境的k8s master IP地址,token替换为最近30分钟获取的token。(token获取方式可以在安装文档中看到)。执行完以上步骤,云道资源管理中-pass组件查询,就可以看到云翼订购的ccse组件了。排查经验:可以查看云道的resource日志,以及云翼的agcore服务日志。操作完毕后,云道PaaS组件查询界面可以看到CCSE组件4)对接完成如在注册ccse步骤时,命名空间出不来的情况请检查云翼pass库的user_reference表是否为空5)命名空间出来后,注册完成,在持续集成处部署 报错未定义端口号。改问题是由于云道的yundao_ci库下resource_pool 表数据为空。从云翼找到ccse信息补充即可。补充yundao_ci库下resource_pool表的相关信息从云翼平台获取Srvice NodePort的相关信息6)应用部署选择ccse,报错failed to deploy resource, the msg is: 参数异常,编码不符合k8s资源名称的命名规则。原因是注册组件是填写的云翼harbor库信息有误,可查询云道数据进行处理:

原因是由于云道harbor未配置复制策略问题,需要配置复制到云翼ccse的harbor库。配置操作步骤截图如下: