1. 程式人生 > >Kubernetes - 騰訊藍鯨配置平臺(CMDB)開源版部署

Kubernetes - 騰訊藍鯨配置平臺(CMDB)開源版部署

藍鯨CMDB

  藍鯨配置平臺(藍鯨CMDB)是一個基於運維場景設計的企業配置管理服務。主要功能:

  1. 拓撲化的主機管理:主機基礎屬性、主機快照資料、主機歸屬關係管理

  2. 組織架構管理:可擴充套件的基於業務的組織架構管理

  3. 模型管理:既能管理業務、叢集、主機等內建模型,也能自定義模型

  4. 程序管理:基於模組的主機程序管理

  5. 事件註冊與推送:提供基於回撥方式的事件註冊與推送

  6. 通用許可權管理:靈活的基於使用者組的許可權管理

  7. 操作審計:使用者操作行為的審計與回溯

  

  官網地址:

http://bk.tencent.com/

  原始碼地址:https://github.com/tencent/bk-cmdb

 

架構設計

  

 

  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 --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使用介紹

   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及埠

  

 

指令碼地址

  https://github.com/ErikXu/bk-cmdb-kubernetes-deploy