概述
本人在使用藍鯨過程有些許心得,所以專門寫一個學習筆記供大家參考和學習,當然也為了我日后可以隨意參閱。
騰訊藍鯨智雲,簡稱藍鯨,是騰訊互動娛樂事業群(Interactive Entertainment Group,簡稱 IEG)自研自用的一套用於構建企業研發運營一體化體系的 PaaS 開發框架,提供了 aPaaS(DevOps 流水線、運行環境托管、前后台框架)和 iPaaS(持續集成、CMDB、作業平台、容器管理、數據平台、AI 等原子平台)等模塊,幫助企業技術人員快速構建基礎運營 PaaS。
傳統的 Linux 等單機操作系統已發展數十年,隨着雲時代的到來,企業所需資源數暴增,操作節點(物理或虛擬服務器及容器)數量普遍達到數千個,大型互聯網公司甚至達到百萬級別,混合雲模式成為常態,雖然 IaaS 供應商的出現從一定程度上解決了資源切割調度問題,但並未很好的解決資源與應用的融合,企業需要一種介於 IaaS 與應用(SaaS)之間的層級,用於屏蔽及控制 IaaS,快速開發及托管 SaaS,我們將其稱之為基礎 PaaS 層,並着重發展用於研發及托管企業內技術運營類 SaaS 的基礎運營 PaaS,並將其作為區別於傳統 OS 的下一代企業級分布式運營操作系統。
企業 IT 應用的全生命周期可划分為研發、運維、運營三段,在各行業進行互聯網化轉型的過程中,融入敏捷思維,即形成持續集成、持續部署、持續運營的概念(CI-CD-CO)。
為降低轉型成本,不以增加人力數量為轉型前提,騰訊 IEG 以運維團隊作為轉型起點,充分利用這一群體低價值重復性工作量占比高的特點,從 CD 領域切入,以 PaaS 技術進行運維自動化領域的煙囪治理,形成運維 PaaS 體系。將自動化所釋放的人力資源,轉型為運維開發團隊,利用 PaaS 的自增長屬性,將運維 PaaS 逐步向 CI 及 CO 拓展,最終完成企業級研發 - 運維 - 運營基礎 PaaS 構建,落地企業研發運營一體化。
在這里我給大家普及一下IaaS,SaaS,PaaS的知識:
如果你是一個網站站長,想要建立一個網站。不采用雲服務,你所需要的投入大概是:買服務器,安裝服務器軟件,編寫網站程序。
現在你追隨潮流,采用流行的雲計算,
如果你采用IaaS服務,那么意味着你就不用自己買服務器了,隨便在哪家購買虛擬機,但是還是需要自己裝服務器軟件
而如果你采用PaaS的服務,那么意味着你既不需要買服務器,也不需要自己裝服務器軟件,只需要自己開發網站程序
如果你再進一步,購買某些在線論壇或者在線網店的服務,這意味着你也不用自己開發網站程序,只需要使用它們開發好的程序,而且他們會負責程序的升級、維護、增加服務器等,而你只需要專心運營即可,此即為SaaS。
藍鯨體系架構
騰訊藍鯨智雲體系由原子平台和通用的一級 SaaS 服務組成,平台包括 管控平台、配置平台、作業平台、數據平台、容器管理、PaaS 平台、移動平台 等,通用 SaaS 包括節點管理、標准運維、日志檢索、藍鯨監控、故障自愈等,為各種雲(公有雲、私有雲、混合雲)的用戶提供不同場景、不同需求的一站式技術運營解決方案。
在藍鯨體系架構中,配置平台位於原子平台層,通過藍鯨 PaaS 的 ESB 為上層 SaaS 提供覆蓋研發運營 CI(持續集成)、CD(持續交付和持續部署)、CO(持續運營)領域的配置管理能力。
騰訊藍鯨智雲體系依托企業級 SOA、 集成等理念,運用 Docker 等最先進的雲技術構建起了全新的運維模式, 致力於以“原子服務集成”和“低成本工具構建”的方式落地 DevOps,幫助運維快速實現“基礎服務無人值守”及“增值服務”,並進一步通過 DevOps 的落地實現企業更全面和可持續的效率提升。
藍鯨部署
對於藍鯨部署所需的硬件配置選型,並無規定。
藍鯨由眾多開源組件和自研組件構成。
開源組件的硬件選型可以參考相應的官方文檔。
藍鯨產品本身的建議配置如下:
資源規划是一個復雜的、動態的過程,更像是一門藝術而不是科學。如果硬件資源富余,可以一開始拆分搭建部署。若硬件資源不足,一開始可以混合搭建,注意觀測資源消耗情況,可以適時增加機器,遷移模塊的方式來保證整體的可用性。
這里給出的一個比較合理的初始配置,基於以下考慮:
1. 分布式模塊達到高可用至少三個節點,所以至少需要三個 OS (物理機或虛擬機均可)。
2. BKDATA 是耗費資源最多的藍鯨組件。請分配到 4 核 16G 以上的機器。
3. 若日志檢索,藍鯨監控是主要使用場景,請給 influxdb 和 elasticsearch 模塊更多的內存,更好磁盤性能。如 SSD。
4. Nginx 模塊所在的機器需要有對外提供服務,可訪問的 IP。這是藍鯨平台的總入口。
5. 如果需要有跨雲管理需求,GSE 部署的機器需要有跨雲的網絡條件。
根據以上考慮,安裝藍鯨初始配置,請滿足:
- 1台 4核 16G
- 2台 4核 8G
藍鯨組件
開源組件
開源組件的實際配置均在 /data/bkce/etc
目錄下,而這些配置文件其實是通過變量替換 /data/src/service/support-files/templates/
(模板目錄路徑隨用戶解壓至的目錄而不同) 下的預設模板文件生成的,所以要從源頭修改配置應該修改 /data/src
下的,然后通過以下命令同步,並渲染模板文件:
- ./bkcec sync 模塊
- ./bkcec render 模塊
渲染模板時,bkcec 腳本通過調用 templates_render.rc 里定義的函數 render_cfg_templates
來實現
舉例說明,假設 /data/src/service/support-files/templates/
目錄下有如下文件:
- #etc#nginx#job.conf
那么當模板渲染時,它里面的占位符諸如 __BK_HOME__
會被對應的 $BK_HOME
變量的值替換掉然后生成 /data/bkce/etc/nginx/job.conf
這個文件。 可以發現,腳本將文件名中的 #
替換成 /
,然后放到 $INSTALL_PATH
目錄下,也就是默認的 /data/bkce
- kafka#config#server.properties
這個形式的模板文件和上述的不同之處時沒有以 #
開頭,那么它表示一個相對模塊安裝路徑的配置,也就是 對於 /data/src/service/
來說,它會被安裝到 /data/bkce/service
,那么 kafka#config#server.properties
就會生成到 /data/bkce/service/kafka/config/server.properties
- #etc#my.cnf.tpl
這類文件名和第一個不同之處在於多了 .tpl
的后綴名,生成時 tpl 后綴會被去掉。
其他模塊文件,以此類推。
以下列舉當前所有的開源組件配置文件路徑:
Consul
Consul 的配置文件比較特殊,因為它是全局依賴, Consul 的配置文件會存放在 /data/bkce/etc/consul.conf
,它沒有對應的模板文件,是由 /data/install/parse_config
這個腳本來生成。
不過 Consul 啟動的 supervisor 配置文件模板在:
- #etc#supervisor-consul.conf
MySQL
- #etc#my.cnf.tpl
Redis
- #etc#redis.conf
Nginx
- #etc#nginx.conf
Nginx 主配置文件,安裝時會 ln -s /data/bkce/etc/nginx.conf /etc/nginx/nginx.conf
- #etc#nginx#paas.conf
PaaS 平台的 Nginx server 配置
- #etc#nginx#cmdb.conf
配置平台的 Nginx server 配置,主配置會 include /data/bkce/etc/nginx/
下的配置文件
- #etc#nginx#job.conf
作業平台的 Nginx server 配置
- #etc#nginx#miniweb.conf
存放 Agent 安裝時所需要下載的腳本和依賴軟件包
MongoDB
- #etc#mongodb.yaml
ZooKeeper
- #etc#zoo.cfg
RabbitMQ
- #etc#rabbitmq#rabbitmq-env.conf
- #etc#rabbitmq#rabbitmq.config
- #etc#rabbitmq#enabled_plugins
Elasticsearch
- es#config#elasticsearch.yml.tpl
Kafka
- kafka#config#server.properties
Beanstalk
- #etc#beanstalkd
InfluxDB
- #etc#influxdb.conf
藍鯨組件
藍鯨組件除了作業平台和管控平台,其他均用 supervisor 來做進程啟停,所以都會存在一個對應的 supervisor 進程配置文件
它的標准規范是:#etc#supervisor-模塊名-工程名.conf,如果沒有子工程,則工程名等於模塊名。
例如 bkdata 存在三個子工程,所以各自的 supervisor 配置為:
- #etc#supervisor-bkdata-dataapi.conf
- #etc#supervisor-bkdata-databus.conf
- #etc#supervisor-bkdata-dataapi.conf
故障自愈模塊,因為沒有子工程,所以它的 supervisor 配置文件為:
- #etc#supervisor-fta-fta.conf
因為 supervisor 配置具有一致性,下面不再具體列舉 supervisor 相關配置文件。
配置平台 CMDB
CMDB 的后台是微服務化架構,每個進程對應一個配置文件,所以配置文件模板也有很多,
- server#conf#模塊名.conf
模塊名對應進程名,比如進程名叫 cmdb_webserver
那它對應的配置文件名叫 webserver.conf
- #etc#nginx#cmdb.conf
CMDB 進程對應的 Nginx 配置,里面會通過 url rewrite 兼容 v2 的接口。cmdb_webserver 提供的 Web 頁面 也是經過這層 Nginx 反向代理。
作業平台 JOB
作業平台的配置文件比較簡單。一個配置文件,一個啟動腳本:
- #etc#job.conf
主配置文件,里面的中文注釋非常詳盡,這里不再贅述。
- job#bin#job.sh
Job 進程的啟停腳本,里面可以設置一些調試參數,Java 虛擬機內存分配大小等
PaaS
PaaS 平台 在 src 目錄下叫 open_paas 它實際上由 appengine login esb paas 四個子工程組成。
- #etc#uwsgi-open_paas-工程名.ini
這里工程名用上面四個工程分別替換可得到,是這四個 Python 工程 uwsgi 的配置文件
以下四個分別是對應工程的 配置文件
- paas#conf#settings_production.py.tpl
- login#conf#settings_production.py.tpl
- esb#configs#default.py.tpl
- appengine#controller#settings.py.tpl
其中 ESB 的配置中,配置了訪問其他周邊模塊的接口域名和端口。
GSE
GSE 目錄下的模板文件分為 agent、plugins、proxy、后台。
GSE 后台的配置模板,需要留意的是生成后的配置中監聽的 IP 地址是否符合預期:
- #etc#gse#api.conf
- #etc#gse#btsvr.conf
- #etc#gse#data.conf
- #etc#gse#dba.conf
- #etc#gse#task.conf
GSE Proxy 后台的配置模板:
- proxy#etc#btsvr.conf
- proxy#etc#proxy.conf
- proxy#etc#transit.conf
GSE Agent 的配置模板,*
表示匹配所有的,這里 Agent 按系統和 CPU 架構區分了不同的目錄
- agent_*#etc#agent.conf
- agent_*#etc#iagent.conf
- agent_*#etc#procinfo.conf
GSE agent plugins 的配置模板
- plugins_*#etc#basereport.conf
- plugins_*#etc#alarm.json
paas_agent
paas_agent 是 appo、和 appt 模塊對應的后台代碼目錄,它的配置文件由兩部分構成:
- #etc#nginx.conf #etc#nginx#paasagent.conf
paas_agent 依賴一個 Nginx 做路由轉發,這里是它的 Nginx 配置
- #etc#paas_agent_config.yaml.tpl
paas_agent 的主配置,需要特別注意的是,這里的 sid
和 token
是激活 paas_agent 成功后,獲取返回的字符串自動填充的,里面的配置應該和開發者中心,服務器信息頁面看到的一致
BKDATA
BKDATA 分為dataapi
、 databus
、 monitor
三個工程,
dataapi 是 Python 工程,databus 是 Java 工程,monitor 是 Python 工程。
dataapi 的配置:
- dataapi#conf#dataapi_settings.py
- dataapi#pizza#settings_default.py
- dataapi#tool#settings.py
databus 的配置:
- databus#conf#es.cluster.properties
- databus#conf#jdbc.cluster.properties
- databus#conf#tsdb.cluster.properties
- databus#conf#etl.cluster.properties
- databus#conf#redis.cluster.properties
monitor 的配置:
- monitor#bin#environ.sh
- monitor#conf#worker#production#community.py
故障自愈 FTA
故障自愈后台的配置
fta#project#settings_env.py
PaaS平台
藍鯨 PaaS 平台是一個開放的平台,又稱藍鯨 PaaS。該產品在藍鯨體系中有 3 個重要的作用:
一、面向普通用戶,它是進入藍鯨體系的第一個產品,提供了通用的基礎服務,如登錄認證、消息通知、其他產品的快捷入口(工作台)、獲取更多產品的應用市場等;
二、面向開發人員,它提供了很多的 “SaaS 開發者服務”,讓開發者可以簡單、快速地創建、部署和管理應用,它提供了完善的前后台開發框架、API 網關(ESB)、調度引擎、公共組件等模塊,幫助開發者快速、低成本、免運維地構建支撐工具和運營系統。PaaS 平台為一個應用從創建到部署,再到后續的維護管理提供了完善的自助化和自動化服務,如日志查詢、監控告警、運營數據等,從而使開發者可以將全部精力投入到應用的開發之中。主要功能有:支持多語言的開發框架 / 樣例、免運維托管、SaaS 運營數據可視化、企業服務總線(API 網關)、可拖拽的前端服務(MagicBox)等。
三、面向系統維護人員(系統管理員),它提供了用戶管理(含角色管理)、服務器基本信息維護、第三方服務可視化管理、API 權限控制等功能,更好地維護和管理平台的可用性。
目前,藍鯨 PaaS 平台已正式對外開源,GitHub 地址: https://github.com/Tencent/bk-PaaS
配置平台
藍鯨配置平台是一款面向應用的 CMDB,在 ITIL 體系里,CMDB 是構建其它流程的基石,而在藍鯨智雲體系里,配置平台就扮演着基石的角色,為應用提供了各種運維場景的配置數據服務。它是企業 IT 管理體系的核心,通過提供配置管理服務,以數據和模型相結合映射應用間的關系,保證數據的准確和一致性;並以整合的思路推進,最終面向應用消費,發揮配置服務的價值。
目前,藍鯨配置平台已正式對外開源,GitHub 地址: https://github.com/Tencent/bk-cmdb
作業平台
作業平台(JOB)是一套基於藍鯨智雲管控平台 Agent 管道之上的基礎操作平台,具備萬級並發處理能力。除了支持腳本執行、文件拉取 / 分發、定時任務等一系列可實現的基礎運維場景以外,還運用流程化的理念很好的將零碎的單個任務組裝成一個作業流程。而每個任務都可做為一個原子節點,提供給其它系統和平台調度,實現調度自動化。
除了批量執行的萬級高並發性能優勢,作業平台還支持復雜的運維操作場景,定制作業功能將一個操作流程制作成完整的作業任務,豐富的 API 開放接口使得作業任務原子化,提供給其它系統或平台進行調度,進一步擴大了業務使用場景。
作業平台分為 Web 層和后台任務調度層,並通過消息隊列來消費任務,任務執行依賴底層的管控平台,管控平台采用 C/S 架構,用戶只需要在目標機上安裝藍鯨 Agent,即可通過作業平台實現腳本執行或文件分發。
管控平台
藍鯨管控平台,是整個藍鯨平台的底層管控系統,是藍鯨所有其他服務的基礎,是藍鯨服務體系與用戶機器的連接器。
在整個藍鯨體系中,藍鯨管控平台作為藍鯨的底層管控通道,沒有提供獨立的接口供用戶直接訪問調用,而是通過藍鯨 esb 能力向上提供服務,供上層平台或者 SaaS 去實現場景賦能,藍鯨管控平台主要提供了三種類型的服務能力:文件傳輸能力、實時任務執行能力、數據采集與傳輸的能力。
從網絡框架層面來看,藍鯨管控平台分為兩層網絡架構,分別為 服務層 和 業務代理層 ,服務層由三種不同類型的服務集群構成:控制任務執行的 TaskServer 集群、負責數據采集傳輸服務的 DataServer 集群以及提供文件高速傳輸服務的 FileServer 集群,業務代理層則是部署在業務服務器上的藍鯨Agent,承載了服務層提供的三種服務。
Agent:藍鯨智能 Agent,可以安裝在業務需要管控的 實體機、虛擬機或者容器里面 ,BK Agent 是藍鯨管控平台提供三大服務能力的實際執行者。
PA:藍鯨管控平台跨雲代理節點,為雲區域 BK Agent 提供代理轉發服務,提供跨雲區域機器管控能力。
TaskServer:藍鯨管控平台任務及控制服務端程序,該程序提供對集群內 Agent 的管理能力,並支持對 Agent 批量下發和執行發命令或腳本。
FileServer:藍鯨管控平台文件傳輸控制服務端程序,該程序對指定范圍內 Agent 節點提供 BT 種子服務,保證對傳輸的安全性、不同區域及業務模塊間的隔離性,並控制 BT 傳輸在有限的貪婪特性范圍內。
DataServer:藍鯨管控平台數據傳輸服務端程序,該服務端主要提供對 Agent 采集的數據進行匯聚、分類、流轉能力。對於普通的千兆網卡機器,BK DataServer 能夠提供百兆級別的數據處理能力。
Redis:Redis 在本系統中提供工作區數據緩存作用。
Zookeeper:Zookeeper 主要提供對集群的管理能力,包括集群中不同節點間的相互發現,有效性探測等。
容器管理平台
藍鯨容器服務(BCS,Blueking Container Service)是 高度可擴展、靈活易用的容器管理服務。
藍鯨容器服務支持兩種不同的集群模式,分別為原生 Kubernetes 模式和基於 Mesos 自研的模式。
用戶無需關注基礎設施的安裝、運維和管理,只需要調用簡單的 API,或者在頁面上進行簡單的配置,便可對容器進行啟動、停止等操作,查看集群、容器及服務的狀態,以及使用各種組件服務。
用戶可以依據自身的需要選擇容器編排的方式,以滿足業務的特定要求。
BCS 是統一的容器部署管理解決方案,為了適應不同業務場景的需要,BCS 內部同時支持基於 Mesos 和基於 K8S 的兩種不同的實現。
BCS 由 BCS SaaS 和 BCS 后台 組成,以下為對應的架構圖。
BCS SaaS 架構圖
BCS SaaS 功能結構圖
BCS SaaS 作為 BCS 的上層產品,包含已開源的項目管理系統(bcs-projmgr)、容器服務產品層主體功能模塊(bcs-app)、底層的配置中心模塊(bcs-cc)以及未開源的監控中心,同時它依賴藍鯨體系下的其他產品服務(如 PaaS、CMDB 等)。
SaaS 依賴的服務介紹:
-
bk-PaaS: 為 BCS SaaS 提供了 4 大服務(統一登錄、開發者中心、ESB 和應用引擎),其中 bcs-app 由應用引擎托管
-
bk-bcs-services: BCS 底層服務。作為后台服務,bk-bcs-services 給 bcs-app 提供了集群搭建,應用編排等豐富的底層接口,更多詳見下 BCS 后台架構圖 。
-
bk-cmdb: 藍鯨配置平台。bcs-app 的集群管理功能涉及的業務和主機信息來源於配置平台
-
bk-iam: 藍鯨權限中心,BCS SaaS 基於 bk-iam,實現了用戶與平台資源之間的權限控制
-
bk-Habor: 藍鯨容器管理平台鏡像倉庫服務。bcs-app 使用 bk-Habor 提供的 API,實現了業務鏡像的查詢與配置功能
BCS SaaS 部署拓撲圖
SaaS 包含 bcs-projmgr, bcs-app, bcs-cc 三個模塊。
SaaS 依賴的后端服務 bk-bcs-services 也已開源,bk-iam 等灰色標注的系統暫未開源,需要依托藍鯨獨立部署版本進行搭建。
BCS 后台架構圖
下圖為 BCS 以及 Mesos 集群的整體架構圖:BCS Client 或者業務 SaaS 服務通過 API 接入,API 根據訪問的集群將請求路由到 BCS 下的 Mesos 集群或者 K8S 集群。
Kubenetes 容器編排的說明:
- BCS 支持原生 K8S 的使用方式。
- K8S 集群運行的 Agent(bcs-k8s-agent) 向 BCS API 服務進行集群注冊。
- K8S 集群運行的 Data Watch 負責將該集群的數據同步到 BCS Storage。
Mesos 編排的具體說明:
- Mesos 自身包括 Mesos Master 和 Mesos Slave 兩大部分,其中 Master 為中心管理節點,負責集群資源調度管理和任務管理;Slave 運行在業務主機上,負責宿主機資源和任務管理。
- Mesos 為二級調度機制,Mesos 本身只負責資源的調度,業務服務的調度需要通過實現調度器(圖中 Scheduler)來支持,同時需實現執行器 Executor(Mesos 自身也自帶有 Executor)來負責容器或者進程的起停和狀態檢測上報等工作。
- Mesos(Master 和 Slave)將集群當前可以的資源以 offer(包括可用 CPU、MEMORY、DISK、端口以及定義的屬性鍵值對)的方式上報給 Scheduler,Scheduler 根據當前部署任務來決定是否接受 Offer,如果接受 Offer,則下發指令給 Mesos,Mesos 調用 Executor 來運行容器。
- Mesos 集群數據存儲在 ZooKeeper,通過 Datawatch 負責將集群動態數據同步到 BCS 數據中心。
- Mesos Driver 負責集群接口轉換。
- 所有中心服務多實例部署實現高可用:Mesos driver 為 Master-Master 運行模式,其他模塊為 Master-Slave 運行模式。服務通過 ZooKeeper 實現狀態同步和服務發現。
總結
本人本着學習和選擇比較重要的部分進行摘抄和總結官網,詳細見官方文檔:https://bk.tencent.com/docs/