一、获取安装包
链接:https://pan.baidu.com/s/1wXNfcBqVrRXPhURXeHpD6A
提取码:ud3a
二、主机和系统环境
· 准备至少3台 CentOS 7 以上操作系统的机器
· 最低配置:2核4G
· 建议配置: 4核12G 以上
· 部署前关闭待安装主机之间防火墙,保证蓝鲸主机之间通信无碍
· 部署前关闭SELinux
· 系统的ulimit -n需要大于1024,建议102400以上。
· NTP保持时间同步一致
· 检查系统的umask,建议设为0022
· 主机有 rsync 命令
· 检查系统是否有配置全局的HTTP代理,如果有,部署前先取消。
· 如非特别说明,安装过程中均使用root账号操作
在这些主机中,选择任意一台机器作为中控机。 将下载的蓝鲸社区版安装包上传到中控机,并解压到 同级目录下。以解压到/data 目录为例:
以下两个命令执行后,得到完整的src/
tar xf bkce_product-4.1.16.tgz -C /data
tar xf bkce_common-1.0.0.tgz -C /data
以下命令执行后,得到install/
tar xf install_ce-master-1.4.13.tgz -C /data
解压之后, 得到两个目录: src, install
· src: 存放蓝鲸产品软件, 以及依赖的开源组件
· install: 存放安装部署脚本、安装时的参数配置、日常运维脚本等
三、配置 YUM 源
替换之前先备份旧配置
mv /etc/yum.repos.d/CentOS-Base.repo/etc/yum.repos.d/CentOS-Base.repo.backup
centos各版本的源配置列表
centos6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos6_base.repo
centos7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
更新缓存
yum clean all
yum makecache
四、配置文件
在 install 目录下, 共有三个配置
· install.config
· globals.env
· ports.env
install.config
install.config
主配置文件,用于描述在哪些机器上安装哪些服务。 每行两列,第一列是IP地址;第二列是以英文逗号分隔的服务名称。 详情参考install.config.3IP.sample
文件可将install.config.3IP.sample 复制为install.config)。
10.0.1.1 nginx,appt,rabbitmq,kafka,zk,es,bkdata,consul,fta
10.0.1.2 mongodb,appo,kafka,zk,es,mysql,beanstalk,consul
10.0.1.3 paas,cmdb,job,gse,license,kafka,zk,es,redis,consul,influxdb
说明:
· 该配置文件,ip 后面使用空格与服务名称隔开,含有多个内网 ip 的机器,默认使用 /sbin/ifconfig 输出中的第一个内网ip, 在 ip 后面写上该机器要安装的服务列表即可, 部署过程中默认使用标准私有地址, 若企业环境使用非标准私有地址, 请参考非标准内网ip处理的处理方法。
· zk 表示 zookeeper, es 表示 elasticsearch
· gse 与 redis 需要部署在同一台机器上
· gse 若需要跨云支持, gse 所在机器必须有外网 IP
· 增加机器数量时, 可以将以上配置中的服务挪到新的机器上。 要保证: kafka, es, zk 的每个组件的总数量为3
globals.env
该文件定义了各类组件的账号密码信息. 功能开关控制选项等. 可根据实际情况进行修改. 配置项含义, 请查看文件中的注释
· 该文件含密码信息,请保证除了root用户外,其他用户不可读。
· 各类账号密码建议修改, 注意设置的各类密码不能有 / $ ` < > &等特殊字符
· 配置HTTP代理: 若公司不能访问外网, 但有自己的 proxy, 在该配置文件的 BK_PROXY 选项中指定代理地址.
· 若需要跨云管理功能(服务器在不同的 IDC, 内网不互通的情况):
o 若GSE 所在机器不能访问外网, 则需要把 gse 所在机器的外网IP填到该文件中 GSE_WAN_IP 配置项中的括号里 如: export GSE_WAN_IP=(1.2.3.4)
, 若没有外网IP 则留空
o 若 GSE 所在机器能访问外网, 则配置 export AUTO_GET_WANIP=1
即可
· HAS_DNS_SERVER
配置默认为0,表示配置的蓝鲸域名需要通过/etc/hosts来解析,此时部署脚本会自动修改每台机器的/etc/hosts添加相关域名。如果想走自己的dns配置,改为非0即可。
· 该配置文件中提供了访问蓝鲸三大平台的域名配置, 需要提前准备好.
export BK_DOMAIN="blueking.com"# 蓝鲸根域名(不含主机名)
export PAAS_FQDN="paas.$BK_DOMAIN"# PAAS 完整域名
export CMDB_FQDN="cmdb.$BK_DOMAIN"# CMDB 完整域名
export JOB_FQDN="job.$BK_DOMAIN"# JOB 完整域名
说明:
BK_DOMAIN的值不能为"com" "net" 这种顶级域名, 至少二级域名开始。
FQDN的选择需要遵循DNS的命名规范,可选的字符集是[A-Za-z0-9.]以及"-", 特别要注意,下划线(_)是不允许的。
PAAS_FQDN CMDB_FQDN JOB_FQDN的值都必须在BK_DOMAIN定义的根域名之下,保证登陆鉴权的cookie文件有效。
ports.env
端口定义。 默认情况下, 不用修改。特殊场景下,若有端口冲突,可以自行定义。
非标准私有地址处理方法
蓝鲸社区版部署脚本中(install目录)下有以下文件中有获取 ip 的函数 get_lan_ip, 非标准地址, 均需要在安装部署前完成修改。
./appmgr/docker/saas/buildsaas
./appmgr/docker/build
./functions
./scripts/gse/server/gsectl
./scripts/gse/plugins/reload.sh
./scripts/gse/plugins/start.sh
./scripts/gse/plugins/stop.sh
./scripts/gse/agent/gsectl
./scripts/gse/proxy/gsectl
./scripts/gse/agentaix/gsectl.ksh
./agent_setup/download
./agent_setup/download
./agent_setup/download
这些文件列表,可能随版本迭代变动,也可以用以下命令查找出来包含这个函数的脚本文件有哪些:
grep -l 'get_lan_ip *()' `-r /data/install
修改方法:
假设服务器的的ip是:138.x.x.x,它不在标准的私有地址范围,那么你需要修改get_lan_ip ()函数为:
get_lan_ip
..省略
if ($3 ~ /^10\./) {
print $3
}
if ($3 ~ /^138\./) {
print $3
pip.conf
在线安装时,依赖pip,需要配置可用的 pip 源。
vi src/.pip/pip.conf
· 设置为能连上的 pip 源,默认的pip源配置通常无法使用,验证方式如下:
· 在每台机器上对 pip.conf
中配置的url进行操作:curl http://xxxxxxx
,若能正常返回列表信息则为成功。
四、获取证书
通过
ifconfig
或者ip addr
命令获取install.config
文件中,license和gse
模块所在服务器的第一个内网网卡的MAC
地址。如果分别属于两台服务器,那么两个的MAC地址以英文;分隔。在官网证书生成页面根据输入框提示填入MAC地址,生成并下载证书。
上传证书到中控机,并解压到
src/cert
目录下
tar xf ssl_certificates.tar.gz -C /data/src/cert/
六、配置 SSH 免密登陆
登录到中控机,执行以下操作
cd /data/install
bash configure_ssh_without_pass# 根据提示输入各主机的 root 密码完成免密登陆配置
如果出现报错,看看是否是文件名出错(4.1的文件名与脚本中的变量文件名不匹配)
安装前校验环境是否满足
按文档要求做完环境和部署的配置后,准备开始安装前,请运行以下脚本,来校验是否满足:
若安装的是4.0的版本,对应的install/目录下里没有找到precheck.sh时,可以到社区QQ群文件里下载。
cd /data/install
bash precheck.sh
正常输出如下图所示:
start <> ... [OK]
start <> ... [OK]
start <> ... [OK]
start <> ... [OK]
start <> ... [OK]
start <> ... [OK]
start <> ... [OK]
start <> ... [OK]
start <> ... [OK]
start <> ... [OK]
如果发现有[FAIL]的报错,按照提示和本文档修复。修复后,可继续跑precheck.sh脚本,直到不再出现[FAIL]。如果需要从头开始检查,请使用 precheck.sh -r
参数。
七、安装 PaaS 及依赖
PaaS平台即服务,本文特指蓝鲸的PaaS平台依赖的组件和服务如下:
安装PaaS前,我们需要将中控机解压的src/、install/ 目录根据install.config配置的ip和模块关系来分发文件。
./bkcec
1.安装 Consul
蓝鲸整个平台的内部通信基础是 consul,所以最先安装的开源组件是consul。
./bkcec
./bkcec start consul
过程详解:
consul是一个分布式的服务发现和配置管理的开源组件。它只有一个二进制文件,所以安装的主要工作在于生成需要的配置文件。
安装 consul 的主要步骤在 install_consul
函数中,它主要做了以下几个事情:
· 生成consul的主配置consul.conf
和consul用的服务定义文件consul.d/service.json
是由 parse_config
这个python脚本读取 install.config
在每台机器上自动生成。
· 生成consul的配置后,还需要生成启动consul的supervisor配置。
· 修改系统的 /etc/resolv.conf
加上nameserver 127.0.0.1
并保证它是第一条记录
启动 consul。consul正常启动后,可以用consul members
确认是否三台server,其余机器 为client(如果机器数量大于3)。
2.安装 license 服务
证书服务license 也是所有蓝鲸产品的全局依赖,第二个安装
./bkcec
./bkcec start license
详解:
拷贝license代码和cert目录
渲染模块配置文件
启动license。
3.安装 MySQL
开始安装MySQL数据库,并初始化设置
./bkcec
./bkcec start mysql
./bkcec initdata mysql
详解:
安装包里自带了mysql的二进制,所以直接拷贝到安装目录。新建mysql用户。
渲染my.cnf模板,然后建立/etc/my.cnf的软链。
执行
mysql_install_db
命令,初始化启动 mysql
对所有 install.config 里的IP 在mysql上授权
4.安装 Redis
./bkcec
./bkcec start redis
详解:
将 redis 命令拷贝到 /usr/bin
渲染配置模板。
修改系统内核参数
net.core.somaxconn = 512
vm.overcommit_memory = 1
- 启动 redis
5.安装 Nginx
Nginx 通过 yum 命令从epel源里安装。
./bkcec
`
./bkcec start nginx
详解:
yum安装nginx
渲染 nginx 模板,并将
/etc/nginx/nginx.conf
软链到$INSTALL_PATH/etc/nginx.conf
创建
$INSTALL_PATH/miniweb/download
目录,并将/data/src/miniweb
目录和/data/install/functions
文件同步过去。供 agent 安装时可以HTTP远程下载用。启动 nginx
6.安装 PaaS
最后安装 PaaS模块
./bkcec
./bkcec initdata paas
./bkcec start paas
详解:
- 安装 paas用的函数叫
install_open_paas
。注意 paas在安装部署脚本里均会被转换为 open_paas 来标识。这是一个特例。
i. 修改/etc/hosts 配置FQDN
ii. 拷贝代码文件到$INSTALL_PATH/open_paas
iii. 安装open_paas专用的python
iv. 创建四个子工程(appengine,login,esb,paas)的python虚拟环境。
v. 安装每个子工程依赖的pip包
vi. 渲染模板文件
- 初始化 paas
i. 导入sql初始化数据库
ii. paaslogin esb分别做python migrate初始化
iii. esb同步API文档事项
iv. 添加app的鉴权白名单,没有session时也可以调用esb。
- 启动 paas
八、安装 CMDB 及依赖
cmdb是蓝鲸的配置平台,数据库采用mongodb,服务发现和配置管理使用zookeeper,快照数据使用redis存储,快照采集依赖gse。
CMDB的架构可以参考github上的《蓝鲸智云配置平台的架构设计》
[CMDB依赖的组件和服务如下:
github上也有cmdb的安装说明,蓝鲸社区版集成时稍微做了些规范改造和安装自动化,需要了解为什么这样安装mongodb的,可以阅读《CMDB部署文档》
1.安装 MongoDB
安装cmdb的依赖中,mongodb是最重要的存储依赖,且目前只有cmdb独享,故先介绍mongodb的安装
./bkcec
./bkcec initdata mongodb
./bkcec start mongodb
详解:
mongodb 二进制在蓝鲸的 service/ 目录下已经自包含,所以安装时直接用 rsync 将 src/service/mongodb 目录同步到 bkce/service/下即可。
mongodb的配置文件模板只有一个
mongodb.yam
l,里面具体配置的含义,请参考MongoDB官方的配置说明文档初始化mongodb
o 首先以不开启鉴权的方式启动mongodb,并创建管理员sysadmin
的角色,和globals.env里定义的$MONGODB_USER
用户,并配置为sysadmin
角色。
o 创建 bk_cmdb 用户,创建cmdb数据库,并授予 bk_cmdb 用户读写它的权限。
o 关闭 mongodb 进程
- 调用
$INSTALL_PATH/service/mongodb/bin/mongodb.sh start
启动 mongodb
2.安装 Zookeeper
zookeeper作为cmdb的服务发现组件,开始安装。
./bkcec
./bkcec start zk
详解:
拷贝java和zookeeper代码目录到
$INSTALL_PATH/service/
下渲染配置文件模板,主要是
zoo.cfg
,并创建软连接到$INSTALL_PATH/etc/zoo.cfg
启动 zk
3.安装 cmdb
需要特别注意的是 cmdb
先启动,再初始化数据
./bkcec
./bkcec start cmdb
./bkcec initdata cmdb
详解:
- 安装 cmdb
i. 安装依赖,从 dependences.env 里读取到cmdb依赖 nginx。需要先 yum 安装 nginx
ii. rsync将 src/cmdb拷贝到 bkcec/下
iii. 创建一个名为 cmdb的虚拟环境,给supervisord使用
iv. 渲染 cmdb模板文件
v. 软连接 bkcec/etc/nginx.conf
到 /etc/nginx/nginx.conf
覆盖 nginx 默认的配置
vi. 将globals.env里配置的CMDB_FQDN
域名写入/etc/hosts
- 启动 cmdb
i. 需要等待 zk服务可用,通过 dig +short zk.service.consul
是否解析成功来判断。
ii. 启动 nginx,如果nginx进程已经启动,则 reload
iii. workon cmdb; supervisord -c $INSTALL_PATH/etc/supervisor-cmdb-server.conf
启动 cmdb后台进程
iv. 启动cmdb 后,cmdb_adminserver 会将所有进程的配置文件写入 zk 节点内,其他进程启动时从 zk 读取配置
- 初始化 cmdb
i. 初始化 cmdb前需要保证所有 cmdb后台进程的端口均可用。如果不可用说明启动cmdb虽然进程running,但是端口未监听,此时可以尝试重启 cmdb
ii. 调用cmdb_adminserver
的http接口(/migrate/v3/migrate/community/0)
,来初始化cmdb
4.安装 GSE
CMDB的快照数据,依赖蓝鲸组件 gse
后台:
./bkcec
./bkcec initdata gse
./bkcec start gse
详解:
- 安装 GSE
i. 拷贝gse后台,cert目录到$INSTALL_PATH/下
ii. 根据globals.env里是否自动获取外网ip配置,来设定gse需要监听的ip地址
iii. 渲染配置模板
iv. 将agent,proxy
,和证书打包,并传到nginx的miniweb
下,供安装agent时使用。
初始化 GSE 的zk默认配置
启动 GSE 后台进程
九、安装 Job 及依赖
Job是蓝鲸的作业平台,它依赖管控平台的gse和每台服务器上安装gse_agent才能工作。另外它也需要从配置平台读取业务权限和主机IP列表,所以要在安装cmdb
成功后,再安装Job。
Job依赖的开源组件 mysql
、redis
、rabbitmq
、nginx
, 其中只有 rabbitmq
还未安装。
1.安装 rabbitmq
rabbitmq 除了Job使用,在蓝鲸社区版中,用到了 celery 组件的 SaaS 和后台也依赖,SaaS软件即服务,本文特指S-mart市场下载的应用") 上下架所用到的 paas_agent 组件依赖 rabbitmq 的 management 插件功能。这个功能在 rabbitmq 3.0 以上才支持,所以 通过 yum 安装 rabbitmq 时确保版本在3.0 以上。
./bkcec
./bkcec initdata rabbitmq
详解:
- 安装 rabbitmq-server
i. yum install rabbitmq-server
安装 rabbitmq 前需要安装 Erlang,如果配置好 yum源,可以自动安装依赖。
ii. 安装 rabbitmq 后,系统会自动创建 rabbitmq 用户,蓝鲸社区版里会将 rabbitmq 默认的目录配置到 $INSTALL_PATH下,所以需要创建这些目录,并授权:
iii.
install -d -o rabbitmq -g rabbitmq $INSTALL_PATH/etc/rabbitmq
iv.
install -d -o rabbitmq -g rabbitmq $INSTALL_PATH/public/rabbitmq
v.
install -d -o rabbitmq -g rabbitmq $INSTALL_PATH/public/rabbitmq/mnesia
vi.
install -d -o rabbitmq -g rabbitmq $INSTALL_PATH/logs/rabbitmq
vii. 生成 rabbitmq 的配置:
viii. render_cfg_templates service "*#rabbitmq#*"
ix.
echo
'[rabbitmq_management,rabbitmq_management_agent].' >$INSTALL_PATH/etc/rabbitmq/enabled_plugins
- 启动 rabbitmq :
systemdctl start rabbitmq-server
Copy
- 初始化 rabbitmq,会添加账户,vhost,设置权限,具体内容,请参考
initdata_rabbitmq
函数
2.安装 Job
开始安装 job这个模块
./bkcec
./bkcec initdata job
./bkcec start job
详解:
- 安装job(install_job 函数)
o 安装java依赖
o 拷贝job工程代码
o 添加 hosts
o 渲染配置模板
o 转换job和gse通信用的公钥和密钥格式(gen_job_cert)
- 启动 Job:
$INSTALL_PATH/job/job/bin/job.sh start
- 初始化Job: 导入sql文件
3.安装 gse_agent
在蓝鲸后台自身所在机器(install.config里配置的IP),安装上gse_agent
./bkcec install gse_agent
十、安装SaaS部署环境
SaaS软件即服务,本文特指S-mart市场下载的应用")部署环境分为测试环境(appt)和正式环境(appo)。对应的后台模块叫paas_agent
,正式环境和测试环境的区分主要时启动时环境变量的差异。
paas_agent使用python的virtualenv
工具来隔离不同的SaaS软件即服务,本文特指S-mart市场下载的应用")环境。有一些SaaS软件即服务,本文特指S-mart市场下载的应用")需要使用Celery
框架,故依赖rabbitmq
。这些依赖前述步骤以及安装完成。
集成安装这个模块的命令在快速部署文档里提到:./bk_install app_mgr
1.激活 rabbitmq
由于rabbitmq的安装和初始化在前面步骤已经完成,此时会跳过这两步,到激活rabbitmq:
./bkcec activate rabbitmq
激活rabbitmq是调用paas平台即服务,本文特指蓝鲸的PaaS平台")的接口,传递MQ的用户名和密码,供paas平台即服务,本文特指蓝鲸的PaaS平台")验证rabbitmq的部署是否成功。 验证成功后,paas平台即服务,本文特指蓝鲸的PaaS平台")会把这个rabbitmq示例标记为激活可用状态,才能继续后面的SaaS]软件即服务,本文特指S-mart市场下载的应用")安装部署操作。
2.安装 appo 环境
./bkcec
./bkcec initdata appo
./bkcec start appo
./bkcec activate appo
详解:
- 安装 appo(install_paas_agent函数)
i. 创建apps用户,该用户用来启停 SaaS软件即服务,本文特指S-mart市场下载的应用")的后台python工程。
ii. 拷贝paas_agent二进制和证书目录
iii. 安装专属python解释器
iv. 使用专属python创建paas_agent
的virtualenv
v. 创建$INSTALL_PATH/.appenvs 目录作为WORKON_HOME
vi. 安装paas_agent 部署SaaS软件即服务,本文特指S-mart市场下载的应用") 时的python包依赖
vii. 安装nginx做SaaS软件即服务,本文特指S-mart市场下载的应用")的反向代理
viii. 渲染paas_agent模板,生成配置。
ix. 添加/etc/hosts记录
- 初始化 appo (initdata_paas_agent)
i. 初始化paas_agent mysql数据库
ii. 注册paas_agent到paas平台即服务,本文特指蓝鲸的PaaS平台")平台,成功后获取到sid和token
iii. 根据sid和token,修改paas_agent的配置文件。
启动 paas_agent
激活 paas_agent。启用这个已经注册的paas_agent主机。在做SaaS软件即服务,本文特指S-mart市场下载的应用")上下架时,只会操作激活过的paas_agent服务器。
3.安装 appt 环境
./bkcec
./bkcec initdata appt
./bkcec start appt
./bkcec activate appt
十一、安装 bkdata 及其依赖
bkdata(蓝鲸数据平台基础服务)包含三个子工程
· dataapi
· databus
· monitor
新增的依赖有 kafka
、es
、beanstalk
、influxdb
。其中kafka用来做数据流处理;es(elasticsearch)用来存储日志文本数据;beanstalk是监控后台依赖的队列服务,influxdb 是存储信息的时序数据库。
fta (故障自愈后台)依赖bkdata,所以安装bkdata蓝鲸数据平台基础服务")后,再安装 fta 模块,fta依赖redis,beanstalk, 以及mysql。
安装依赖
1.安装 elasticasearch
./bkcec
./bkcec start es
详解:
- 安装es(install_es)
i. 安装java
ii. 同步es目录到$INSTALL_PATH/service/下
iii. 渲染配置模板
iv. 添加es系统用户来运行elasticsearch
v. 修改内核参数和open files值
vi. 设置目录权限,让es用户可以读写。
- 启动 es
2.安装 Kafka
./bkcec
./bkcec start kafka
详解:
- 安装kafka(install_kafka)
i. 安装java
ii. 同步kafka目录到$INSTALL_PATH/service/下
iii. 渲染配置模板
iv. 修改/etc/hosts 配置上主机名
- 启动 kafka
3.安装 beanstalk
./bkcec
./bkcec start beanstalk
详解:
安装 beanstalkd(install_beanstalk),使用yum安装
启动beanstalk
4.安装 InfluxDB
./bkcec
./bkcec start influxdb
详解:
- 安装 influxdb(install_influxdb)
i. 从$PKG_SRC_PATH/service/influxdb-*.rpm 安装
ii. 渲染配置模板, 并做软链接。
iii. 修改目录权限让influxdb用户可以读写。
- 启动 influxdb
5.安装 bkdata
./bkcec
./bkcec initdata bkdata
./bkcec start bkdata
详解:
- 安装 bkdata(install_bkdata)
i. 安装dependents.env里定义依赖的yum包
ii. 尝试修复可能引起安装MySQL-python pip包的lib库问题(fixlocation_libmysqlclient_r函数)
iii. 同步代码工程目录,同步cert目录
iv. 因为databus是java工程,安装java
v. 安装python虚拟环境(init_virtualenv函数)
vi. 安装python工程的requirments.txt定义的pip包
vii. 渲染配置模板
- 初始化bkdata(initdata_bkdata)
i. 初始化mysql数据库表结构
ii. dataapi工程 migrate trt 初始化
iii. 初始化 kafka的topic数据
- 启动 bkdata
i. 启动[bkdata
ii. 如果是第一次启动bkdata,那么运行init_bkdata_snapshot函数,因为这个初始化需要dataapi启动后才能运行。运行成功后,设置一个标记文件,$INSTALL_PATH/.init_bkdata_snapshot。防止重复执行。
6.安装 fta
fta 是故障自愈APP的后台进程
./bkcec
./bkcec initdata fta
./bkcec start fta
详解:
- 安装 fta(install_fta)
i. 安装dependents.env里定义依赖的yum包
ii. 同步代码工程目录,同步cert目录
iii. 安装python虚拟环境(init_virtualenv函数)
iv. 安装python工程的requirments.txt定义的pip包
v. 渲染配置模板
- 初始化 fta(initdata fta)
i. 初始化 mysql的库表结构
- 启动 fta
十二、访问蓝鲸
1.在本地hosts中添加
10.0.0.1 paas.blueking.com
10.0.0.1 cmdb.blueking.com
10.0.0.1 joobs.blueking.com
2.打开浏览器访问
paas.blueking.com