藍鯨配置平臺(藍鯨CMDB)是一個基於運維場景設計的企業配置管理服務。主要功能:html
1. 拓撲化的主機管理:主機基礎屬性、主機快照數據、主機歸屬關係管理node
2. 組織架構管理:可擴展的基於業務的組織架構管理python
3. 模型管理:既能管理業務、集羣、主機等內置模型,也能自定義模型linux
4. 進程管理:基於模塊的主機進程管理git
5. 事件註冊與推送:提供基於回調方式的事件註冊與推送github
6. 通用權限管理:靈活的基於用戶組的權限管理web
7. 操做審計:用戶操做行爲的審計與回溯ajax
官網地址:http://bk.tencent.com/redis
源碼地址:https://github.com/tencent/bk-cmdbmongodb
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和各個業務場景模塊、資源管理模塊交互。
當前的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 --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: 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 -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在CMDB充當了配置管理以及服務註冊發現的重要角色,所以,咱們有必要去了解它。
使用zkCli鏈接容器中的Zookeeper
docker run -it --rm --link zookeeper: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/webserver
查看服務註冊目錄
ls /cc/services/endpoints
查看其中一個服務註冊內容,能夠看到它自上報的ip及端口