如何基於Python構建一個可擴充套件的運維自動化平臺
嘉賓簡介
劉天斯
從事網際網路運維工作已13年,目前就職於騰訊-互動娛樂部,負責遊戲大資料的運營,曾就職於天涯社群,擔任首席架構師/系統管理員。
熱衷開源技術的研究,包括系統架構、運維開發、負載均衡、快取技術、資料庫、NOSQL、分散式儲存、訊息中介軟體、大資料及雲端計算、Mesos、Docker、DevOps等領域。擅長大規模叢集的運維工作,尤其在自動化運維方面有著非常豐富的經驗。同時熱衷於網際網路前沿技術的研究,活躍在國內社群、業界技術大會,充當一名開源技術的傳播與分享者。
導言
受 Reboot 邀約與大家聊聊運維自動化的議題,與大家一起探討如何基於Python構建一個可擴充套件的運維自動化平臺,也希望能與大家一起交流,共同成長。
此次分享將通過平臺具備功能、架構設計、模組定製、安全審計、C/S結構的實現等幾個方面內容來展開。
為什麼選擇Python?
幾點優勢:預設安裝且跨平臺、可讀性好且開發效率高、豐富的第三方庫(開發框架、各類API、科學計算、GUI等)、社群活躍&眾多開發者。
Python在騰訊的現狀,根據去年內部提交元件語言統計,除去2、3、4前端技術,Python在高階程式語言中排第3位。應用在系統運維、業務邏輯、運營平臺、測試工具、資料探勘等領域,騰訊大名鼎鼎的“藍鯨”運維PAAS平臺就是基於Python語言來構建。
一、平臺介紹
OMServer 一個集中式的Linux叢集管理(基礎)平臺(《
1、平臺截圖:
2、平臺採用到的第三方庫:
Django - 一個開放原始碼的Web應用框架,由Python寫成,採用了MVC的軟體設計模式;
rpyc - 一個 Python 實現的RPC和分散式計算的工具。支援同步和非同步操作、回撥等;
saltstack 、ansible 、func - 基本
Mysql - 是一個非常流行的關係型資料庫管理系統。
二、平臺架構設計
1、OMServer架構圖
大家對這個架構應該不會感到陌生,三層結構也是目前主流的運營平臺架構。
2、架構說明
OMServer平臺為三層架構,分別為WEB互動層、分散式計算層、叢集管理服務層。
1)、第一層:即為WEB互動層,典型的B/S架構,以供管理員操作的互動平臺,也是OMServer的核心,基於Django開發;
2)、第二層:分散式計算層,提供與主控端的連線通道,採用的是rpyc傳輸協議,協議操作流程:前端模組引數->加密傳輸->任務執行->返回結果集->解密輸出。
3)、第三層:叢集管理服務層,整合Python主流的遠端操作元件(支援Saltstack、Anaible、Func),對被控端(業務伺服器叢集)進行管理,其中主控端可以根據不同IDC環境,採用多地多點的管理方式,可提升冗餘度及執行效率。主控端操作模組以不同Python檔案加以區分,便於維護,可靈活定製操作邏輯及橫向擴充套件等特點。
3、平臺架構優勢
1)管理端多機支援,可按不同IDC劃分;
2)安全性高,加密傳輸、定義私有通訊規範(TCP);
3)支援多種管理客戶端接入(WEB、桌面、移動);
4)呼叫Python元件的高階特性(Playbook、State);
5)功能擴充套件效能力強,模組定製化。
4、架構操作流程
上圖將三個層次的互動流程進行串連,可以清晰瞭解OMServer架構的操作流程,結束了傳統式直連APP Server的操作,更加規範我們的操作事件,一定程度可以避誤一些潛在的誤操作。
5、整合遠端操作Python元件
分別兩個步驟:
1、提前配置主控端與被控端的信任關係,一般為證書或SSH 認證;
2、通過OMServer主控端封裝好的任務模組與API介面,實現定製化的任務下發及執行。
三、平臺模組定製
1、任務模組定製的思路
1)任務模組 – 即為一個“操作事件”為顆粒的任務,如過載配置、部署快取服務、停止Nginx服務等原子操作;
2)新增模組的步驟:
-
定義任務模組“輸入引數”,採用HTML Form元素,可以為輸入、下拉、單複選框等元素;
- 編寫後臺模組程式碼,其中執行部分由Saltstack或Ansible的Client_API來實現;
- 任務模組核心程式碼,只需要5行程式碼就可以實現一個SHELL指令碼下發、執行的功能。
3)執行模組的步驟 - 選擇任務模組 & 操作物件 -> 指定輸入引數 -> 執行 -> 返回執行結果。
2、當我們的平臺已經具備可定製、擴充套件操作的能力,運維的核心工作就聚焦以下幾點:
1)平臺功能改進、升級,需要具備DevOps能力;
2)根據業務運營需求,做任務功能模組的編寫的工作;
3)日常工作梳理(標準、流程化建設),更好將原子操作串成流程。
4)系統、業務的調優,服務業務。
四、安全審計的實現
1、安全審計技術架構
安全審計功能模組分兩部分,一部分為操作事件前臺展示,另部分為部署在伺服器側的採集Agent,通過CGI介面上報至資料庫儲存,可對上報的資料作關鍵字監控,發現異常可以觸發告警。
2、Agent上報實現原理
實現原理非常簡單,通過修改Linux系統環境配置檔案/etc/profile,定義history事件相關環境變數,捕捉所有Linux登入使用者會話中的操作事件及指令,實時通過OMAudit_agent.py中的HTTP GET CGI向資料庫寫操作事件流水。
管理前臺頁面通過定時重新整理,獲取最新的操作事件。
五、C/S結構的實現
1、OMServer桌面版截圖
2、OMServer桌面版架構
桌面版OManager基於Wxpython + XRC構建,為兩層結構,一層為桌面客戶端,另一層為叢集管理端,同時相容OMServer管理端,通訊依然採用rpyc協議,與OMServer有以下幾點區別:
3、後續優化
1)整合ansible或saltstack高階功能,如ansibleplaybook;
2)將多個任務模組打包成模板對列,實現原子操作與運維變更流程的結合;
3)引用任務排程Celery,支援更大併發;
4)任務對列支援暫停、中止、重執行功能,實現操作可控。
5)提供與CMDB訪問對接,通用性更強。
Q&A
Q1:個人可以完成運維自動化平臺嗎,需要哪些技術?
當然可以,騰訊內部對運維人員都有一個要求,就是要具備開發能力。Python簡單,容易入手,強烈推薦。
Q2:分享中有提到 CS 架構中安全性高,請問具體高在哪些方面,是什麼原因呢?
一般CS客戶端部署在管理員電腦,通過私有網路、協議與主控端效互,B/S部署在節點與業務叢集同區域,不一樣同網段,另外黑客對WEB層的攻擊遠高於桌面客戶端,網路隔離在這時候顯得尤為重要了。
Q3:自行研發tglog對於海量日誌傳輸是否主要走的udp協議?如果是走的udp協議,怎麼去解決一些資料包傳輸中資料亂序以及資料反序列化問題,或者做了哪些協議層面的優化?
是的,主要走的是UDP協議。tglog同時也是一套資料日誌的規範,約束開發人員打日誌的標準。
目前未碰到資料亂序以及資料反序列化問題,以前面臨一個比較大的問題是丟包情況,尤其在流量高峰期時段更為明顯。
後面在核心、IO優化得到緩解,但無法規避,所以我們對比較重要的日誌採用TCP傳輸。比如玩家消費流水。
Q4:規範化、標準化遇到最大問題是什麼?我們遇到就是無法行政干涉開發如何寫程式碼?有什麼好的方式去引導規範?尤其是開發有很繁重的開發任務.
這已經不是運維層面推動的事情,必須升級到運維及開發的上層領導,開發任務繁重不是理由,上線後出問題一樣得不償失,提前丟擲風險,讓開發人員認真做好上線前的評估。
Q5:運維管理系統安全性這塊有什麼好的思路?
1、網路的隔離,避免直接暴露在公網;
2、辦公電腦需要有一套標準的日常安全規範,尤其是運維辦公機;
3、平臺編碼人員需要有較好的安全意識;
4、多關注業界安全、漏洞事件。
==========================================
相關推薦
如何基於Python構建一個可擴充套件的運維自動化平臺
嘉賓簡介 劉天斯 從事網際網路運維工作已13年,目前就職於騰訊-互動娛樂部,負責遊戲大資料的運營,曾就職於天涯社群,擔任首席架構師/系統管理員。 熱衷開源技術的研究,包括系統架構、運維開發、負載均衡、快取技術、資料庫、NOSQL、分散式儲存、訊息中介軟體、大
python全棧開發devops運維自動化方向初到高級在線課程分享
devops 運維自動化 python全棧開發 bootstrap 適用人群面向想要devops方向發展的全棧python運維開發工程師課程概述課程範圍:我們的課程由淺入深包含C01到C05五個等級;包含前後端知識,覆蓋培養一個合格python全棧工程師所需要的所有技能;還有Ca系列附加課對開
烏雲章華鵬:如何構建高效的安全運維服務平臺
如何構建高效的安全運維服務平臺 大家好,我是烏雲的章華鵬,今天和大家分享的話題是“高效安全運維服務平臺的構建”,包括:企業的資料安全問題,運維安全中面臨的網路、系統服務、應用相關配置等問題。 企業安全的核心是資料安全 當我們在討論如何構建安全運維服務平
運維自動化平臺
運維平臺運維平臺 目前主要實現功能: 代碼發布系統(tomcat,java,php) 在線編輯saltstack配置文件,並提交到倉庫 通過salt api 實現添加固定資產(主機) 在線實時查看日誌 通過salt api 批量執行命令/模塊 ? 運行環境 CentOS Linux release 7
中小型運維團隊如何設計運維自動化平臺
前言 我給中小型運維團隊的定義是整個團隊人數(所有運維工程師 + 運維開發工程師)為 20 人以下,一般這樣的團隊,能為自動化投入的資源也許就 1、2 個開發人員。 BAT 等大公司的 DevOps 平臺功能涵蓋的範圍非常全面而且各種高大上,這麼龐大的體系對於中小型運維團隊,要靠手頭頂多 2 名運維
攜程運維自動化平臺,上萬伺服器變更也可以很輕鬆
給大家分享的主題是基於 StackStorm 的攜程運維自動化平臺。 今年5月,勒索病毒爆發,席捲全球,影響了政府部門、醫療機構、公共交通、學校、企業等等,給全世界帶來了巨大損失。 如果有投資眼光的人,遇到這個事情,考慮的可能是購買比特幣。而作為運維工程師,考慮的只是如何防止病毒影響自己公司的業
一個可供借鑑的中小企業運維管理平臺架構樣本
作者介紹 戰學超,青島航空運維經理、高階架構師。曾任職於NEC軟體、海爾B2B平臺鉅商匯,負責企業資料平臺構建、B2B電商平臺數據管理與搭建、企業運維管理平臺搭建。擁有豐富DBA、系統運維架構經驗,熟悉運維管理、資料庫架構、資料平臺搭建、虛擬化、私有云部署、自動化運維等。 我今天要跟大家分享的主題
python構建一個項目
arch mkdir js xml clu win 也會 .gz 技術 auth 二、實驗步驟 2.1 實驗準備 我們的實驗項目名為 factorial。 $ mkdir factorial $ cd factorial/ 2.2 主代碼 我們給將要創建的 Python
運維自動化之系統安裝(基於PXE)
/dev/ def workman httpd服務 roo cond dhcp mount dhcp服務 1.安裝流程及架構 2.搭建環境前準備:關閉防火墻,關閉selinux,如果是centos6最好也把NetworkManager關閉 3.準備ks應答文件
一個9年運維走過的艱辛之路
運維歷程 運維 python開發 django開發大家好,很久沒有寫文章了,今天突然有了寫一篇自己這9年運維歷程的一篇文章,希望可以幫助到才進入運維這行或者還在初、中級階段的朋友。入行篇: 我2008年7月份和幾個同學為了學到前沿的知識因此到了深圳步入了it這行,我當時在上大學的時候一直覺的linu
用 Python 構建一個極小的區塊鏈
計算機 特定 使用 lock 為我 並且 沒有 python學習 為什麽 雖然有些人認為區塊鏈是一個早晚會出現問題的解決方案,但是毫無疑問,這個創新技術是一個計算機技術上的奇跡。那麽,究竟什麽是區塊鏈呢? 區塊鏈 以比特幣(Bitcoin)或其它加密
基於機器學習的可擴充套件HCGraph演算法
HCGraph 是Leviatom網路的核心演算法。在前面的文章中, 我們介紹過該演算法利用Gossip 協議族構建全網信任模型。HCGraph利用類似於HashGraph的Gossip以及Gossip about Gossip協議來實現高效的信任關係傳遞。利用該協議,我們可以在獲得一個比
「附經驗」一個傳統IT運維人的CKA認證之旅
近期,來自EasyStack易捷行雲CKA培訓班的一批學員一次性通過Linux基金會和CNCF基金會聯合推出面向全球的Kubernetes技術認證——CKA認證考試,該認證是目前容器技術領域內極具含金量和代表性的認證之一,以下是高分學員董建華針對此次培訓和考試的經驗總結,
iOS開發UI篇——一個可擴充套件性極強的樹形控制元件
一、簡介 樹形控制元件在多列列表、多級選單中使用比較常見,比如:國家-省份-城市 多級選擇、學校-專業-班級 多級選擇等等。然而IOS自帶控制元件中並不存在樹形控制元件,我們要在IOS開發中使用樹形控制元件,通常需要自己擴充套件UITableView列表控制元件。現在在這裡開源一個自己寫的高擴充套件性,高複用
iOS開發UI篇--一個可擴充套件性極強的樹形控制元件
一、簡介 樹形控制元件在多列列表、多級選單中使用比較常見,比如:國家-省份-城市 多級選擇、學校-專業-班級 多級選擇等等。然而IOS自帶控制元件中並不存在樹形控制元件,我們要在IOS開發中使用樹形控制元件,通常需要自己擴充套件UITableView列表控制元件。現在在這裡開源一個自己寫的高擴充套件性,高複
使用 Redis 和 Python 構建一個共享單車的應用程式
學習如何使用 Redis 和 Python 構建一個位置感知的應用程式。 我經常出差。但不是一個汽車狂熱分子,所以當我有空閒時,我更喜歡在城市中散步或者騎單車。我參觀過的許多城市都有共享單車系統,你可以租個單車用幾個小時。 大多數系統都有一個應用程式來幫助使用者定位和
基於webpack構建一個React應用
1,建立一個空白檔案 React-music-player 2,使用npm init 建立一個package.json檔案,並安裝相關依賴 "dependencies": { "autoprefixer": "^9.0.2", "pubsub-js": "^1.6.0",
夕陽橋斷 Linux(centos6.5)下安裝jenkins Jenkins 的前身是 Hudson 是一個可擴充套件的持續整合引擎。 通俗的來講,jenkins就是一個可以實現自動化部署的一個插
夕陽橋斷 Linux(centos6.5)下安裝jenkins Jenkins 的前身是 Hudson 是一個可擴充套件的持續整合引擎。 通俗的來講,jenkins就是一個可以實現自動化部署的一個外掛, 對於我來說,也是應用在系統部署上。 1
一個實現瀏覽器網頁與本地程式之間進行雙向呼叫的輕量級、強相容、可擴充套件的外掛開發平臺—本網通
通過本網通外掛平臺可實現在網頁中的JavaScript指令碼無障礙訪問本地電腦的硬體、呼叫本地系統的API及相關元件,同時可徹底解決ActiveX元件在Chrome、FireFox、Opera、Edge、Safari等瀏覽器各版本的相容使用問題。 系統相容性:
Python 運維自動化之伺服器資訊採集
主要是採集伺服器的CPU,記憶體,硬碟,網路等資訊。 用到的主要模組psutil還有subprocess,要注意管道問題(subprocess.popen函式的引數注意使用)。 上程式碼 1 def test2(): 2 fnull = open(os.devnull, 'w')