騰訊藍鯨使用筆記


概述

本人在使用藍鯨過程有些許心得,所以專門寫一個學習筆記供大家參考和學習,當然也為了我日后可以隨意參閱。

騰訊藍鯨智雲,簡稱藍鯨,是騰訊互動娛樂事業群(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 等)。

-w2020

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 等灰色標注的系統暫未開源,需要依托藍鯨獨立部署版本進行搭建。

-w2020

BCS 后台架構圖

下圖為 BCS 以及 Mesos 集群的整體架構圖:BCS Client 或者業務 SaaS 服務通過 API 接入,API 根據訪問的集群將請求路由到 BCS 下的 Mesos 集群或者 K8S 集群。

-w2020

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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM