Kubernetes - 腾讯蓝鲸配置平台(CMDB)开源版部署

  蓝鲸CMDB
  
  蓝鲸配置平台(蓝鲸CMDB)是一个基于运维场景设计的企业配置管理服务。主要功能:
  
  1. 拓扑化的主机管理:主机基础属性、主机快照数据、主机归属关系管理
  
  2. 组织架构管理:可扩展的基于业务的组织架构管理
  
  3. 模型管理:既能管理业务、集群、主机等内置模型,也能自定义模型
  
  4. 进程管理:基于模块的主机进程管理
  
  5. 事件注册与推送:提供基于回调方式的事件注册与推送
  
  6. 通用权限管理:灵活的基于用户组的权限管理
  
  7. 操作审计:用户操作行为的审计与回溯
  
  官网地址:http://bk.tencent.com/

  架构设计
  
  1. 资源层(store):提供系统所需的资源存储、消息队列以及缓存系统服务
  
  2. 服务层(service layer): 服务层划分为两大模块
  
  a. 资源管理模块:
  
  在配置平台中我们把资源类型进行了抽象,目前划分为主机、进程、通用对象三大类,支持横向扩展,每一类资源由一类微服务进程来管理。
  
  b. 业务场景模块:
  
  业务场景模块是基于资源管理模块的原子接口对应用场景的封装。
  
  基于操作的相关度,目前划分出admin、event、host、topo、process、datacollection几个微服务:
  
    admin服务负责系统的配置刷新、初始化数据写入等操作;
  
    event服务负责系统的事件订阅与推送服务;
  
    process、topo、host分别负责系统进程、拓扑模型、主机数据的使用场景;
  
    datacollection 服务负责系统快照数据的接收与写入。
  
  3. 接口层(api): 这一层是系统的api服务网关。
  
  4. web层(web): web层是系统提供的web服务。通过配置平台提供的web服务界面,用户可以进行资源的操作。
  
  交互说明
  
  1. Zookeeper作为配置中心,利用Admin Server推送配置到Zookeeper,Zookeeper再把配置同步到各个服务的本地。
  
  2. Zookeeper作为服务中心,服务启动时自上报IP端口到Zookeeper,Zookeeper把各个服务的访问地址同步到各个服务本地。
  
  3. Zookeeper Node Watch机制:配置或服务地址更新,都将同步到各个服务本地。
  
  4. Web只通过ajax与Web Server交互,Web Server与Api Server交互,Api Server和各个业务场景模块、资源管理模块交互。
  
  在线预览
  
  http://cmdb.erikxu.net
  
  当前的CMDB基于web pack打包的js文件比较大,第一次加载会比较慢。
  
  服务器在香港,有可能会稍有延迟。
  
  站点做了流量控制,一个ip每秒100次,一个ip每天100000次,如果接收到“Too Many Requests”的错误,请稍后再试。
  
  图1
  
  图2
  
  部署步骤
  
  0. 环境准备
  
  名称    操作系统    IP    说明
  
  master    CentOS 7    192.168.132.130
  
  k8s master
  
  node    CentOS 7    192.168.132.136    k8s node
  
  db    CentOS 7    192.168.132.139    数据库服务器,安装mongodb、redis、zookeeper
  
  registry    --    --    镜像仓库(可选),可使用公有云仓库,可自建仓库
  
  1. 安装mongodb(db服务器,docker安装,版本4.0.4)
  
  docker pull mongo:4.0.4
  
  mkdir -p /opt/mongo
  
  docker run --name mongo -v /opt/mongo:/data/db -d -p 27017:27017 mongo:4.0.4
  
  2. 安装redis(db服务器,docker安装,版本5.0.2)
  
  docker pull redis:5.0.2
  
  mkdir -p /opt/redis
  
  docker run www.yigouyule2.cn --name redis -v /opt/redis:/data -d -p 6379:6379 redis:5.0.2 redis-server --requirepass cc
  
  3. 安装zookeeper(db服务器,docker安装,版本3.4.13)
  
  docker pull zookeeper:3.4.13
  
  mkdir -p /opt/zookeeper
  
  docker run --name zookeeper -v /opt/zookeeper:/data -d -p 2181:2181 zookeeper:3.4.13
  
  4. 配置mongodb(db服务器)
  
  docker exec -it mongo /bin/bash
  
  mongo
  
  use cmdb
  
  db.createUser({user: "cc",pwd: "cc",roles: [ { role: "readWrite", db: "cmdb" } ]})
  
  5. 源码编译
  
  可以按照官方文档进行编译,我这里直接使用可执行文件(linux),版本3.1.0
  
  6. 下载可执行文件,并解压到k8s的node节点上,在node节点上直接打docker镜像(单node,不使用镜像仓库)
  
  cd /root
  
  tar -zvxf cmdb.tar.gz -C /root
  
  7. 初始化配置文件(k8s node节点)
  
  cd /root/cmdb
  
  python init.py --discovery 192.168.132.139:2181 --database cmdb --redis_ip 192.168.132.139 --redis_port 6379 --redis_pass cc --mongo_ip 192.168.132.139 --mongo_port 27017 --mongo_user cc --mongo_pass cc --blueking_cmdb_url http://127.0.0.1:8083 --listen_port 8083
  
  上述指令根据实际填写
  
  8. 调整配置文件(k8s node节点)
  
  cd /root/cmdb/cmdb_adminserver/configures
  
  a. 修改html_root
  
  vi webserver.conf
  
  把html_root=/root/cmdb/web修改为html_root=/cmdb_webserver/web
  
  b. 修改mongo连接串支持mongo 3.6以上版本(可选)
  
  由于MongoDB 从3.6开始更改了默认加密方式,所以如果安装的MongoDB的版本大于等于3.6。
  
  需要手动将configures中每个配置文件中MongoDB的配置项中增加mechanism=SCRAM-SHA-1
  
  9. 启动Admin Server,并把配置文件写入Zookeeper(k8s node节点)
  
  cd /root/cmdb/cmdb_adminserver/
  
  chmod +x start.sh
  
  ./start.sh
  
  curl -X POST -H 'Content-Type:application/json' -H 'BK_USER:migrate' -H 'HTTP_BLUEKING_SUPPLIER_ID:0' http://192.168.132.138:60004/migrate/v3/migrate/community/0
  
  10. 拷贝web目录到cmdb_webserver目录(k8s node节点)
  
  cp -rf /root/cmdb/web /root/cmdb/cmdb_webserver/web
  
  11. 把可执行程序打包成docker镜像(k8s node节点)
  
  a. start.sh样例
  
  复制代码
  
  #!/bin/bash
  
  set -e
  
  # get local IP.
  
  localIp=`python ip.py`
  
  # get zookeeper path from environment variables
  
  zookeeperPath="127.0.0.1:2181"
  
  if [ "$ZOOKEEPER_PATH" ]; then
  
  zookeeperPath=$ZOOKEEPER_PATH
  
  fi
  
  # set execute
  
  chmod +x cmdb_apiserver
  
  ./cmdb_apiserver --addrport=${localIp}:8080 --logtostderr=true --v=3 --regdiscv=${zookeeperPath}
  
  复制代码
  
  b. Dockerfile样例
  
  复制代码
  
  FROM centos:7.6.1810
  
  COPY . /cmdb_apiserver
  
  WORKDIR /cmdb_apiserver
  
  EXPOSE 8080/tcp
  
  RUN chmod +x start.sh
  
  ENTRYPOINT ./start.sh
  
  复制代码
  
  在k8s的node节点上构建镜像
  
  docker build -t cmdb-apiserver:3.1.0 .
  
  如果不想自己打镜像,可以直接使用打好的镜像:https://console.cloud.tencent.com/tke/registry/qcloud/default?rid=1,搜索erik_xu/cmdb:
  
  12. 执行yaml脚本完成部署(k8s master节点)
  
  yaml样例:
  
  复制代码
  
  apiVersion: extensions/v1beta1
  
  kind: Deployment
  
  metadata:
  
  name: cmdb-apiserver
  
  labels:
  
  app: cmdb-apiserver
  
  namespace: default
  
  spec:
  
  replicas: 1
  
  template:
  
  metadata:
  
  labels:
  
  app: cmdb-apiserver
  
  spec:
  
  nodeSelector:
  
  kubernetes.io/role: node
  
  containers:
  
  - name: cmdb-apiserver
  
  image: cmdb-apiserver:3.1.0
  
  env:
  
  - name: ZOOKEEPER_PATH
  
  value: 192.168.132.139:2181
  
  ports:
  
  - containerPort: 8080
  
  ---
  
  kind: Service
  
  apiVersion: v1
  
  metadata:
  
  name:www.mcyllpt.com/ cmdb-apiserver
  
  labels:
  
  app: cmdb-apiserver
  
  namespace: default
  
  spec:
  
  selector:
  
  app: cmdb-apiserver
  
  ports:
  
  - name: cmdb-apiserver
  
  targetPort: 8080
  
  port: 8080
  
  protocol: TCP
  
  复制代码
  
  把环境变量ZOOKEEPER_PATH的值改成对应的Zookeeper地址,执行脚本完成部署:
  
  kubectl create yongshiyule178.com-f /root/yamls/all-in-one.yaml
  
  yaml地址:https://github.com/ErikXu/bk-cmdb-kubernetes-deploy/blob/master/yamls/all-in-one.yaml
  
  注:cmdb只有web server需要外部访问,因此,只有web server通过node port的方式映射到虚拟机上,yaml文件里的映射端口是30000,可以根据实际调整。
  
  Zookeeper使用介绍
  
    Zookeeper在CMDB充当了配置管理以及服务注册发现的重要角色,因此,我们有必要去了解它。
  
  使用zkCli连接容器中的Zookeeper
  
  docker run -it --rm --link zookeeper:www.mhylpt.com/ zookeeper zookeeper:3.4.13 zkCli.sh -server zookeeper
  
  查看Zookeeper目录
  
  ls /
  
  发现有一个目录cc,但是无权限查看
  
    ls /cc
  
  查看Acl
  
  getAcl /cc
  
  使用帐号密码认证,可以看到cc目录里的内容
  
  addauth digest cc:3.0#bkcc
  
  帐号密码从CMDB的源码取得
  
  找到配置文件的目录
  
  ls /cc/services/config
  
  查看其中一个配置文件
  
  get /cc/services/config/ www.michenggw.com webserver
  
  查看服务注册目录
  
  ls /cc/services/endpoints
  
  查看其中一个服务注册内容,可以看到它自上报的ip及端口

你可能感兴趣的:(Kubernetes - 腾讯蓝鲸配置平台(CMDB)开源版部署)