【作者】陳曉,,某銀行自動化運維項目架構(gòu)師,、項目經(jīng)理,主要負責自動化運維管理平臺,、監(jiān)控平臺以及流程平臺的建設(shè)和維護,。 1.自動化運維建設(shè)背景隨著IT技術(shù)的快速發(fā)展,IT系統(tǒng)的運維復雜度不斷增加,,IT部門的體量不斷擴大,,傳統(tǒng)的人工操作和借助管理流程的方式已不能滿足日益增長的運維工作量。而智能時代的到來,,無論是DevOps的思想還是AIOps思想,,自動化就像人的“手”一樣,決定著最終這些技術(shù)思想的是否能夠落地,,決定著未來一個IT運維的生產(chǎn)力,。 而從銀行IT架構(gòu)、運維的特殊性考慮,,也需要結(jié)合銀行自身的特點,,對于雙模的架構(gòu)、雙模的運維方式也要兼?zhèn)湓诜€(wěn)態(tài)和敏態(tài)下的自動化運維方案,。 自動化運維可以帶來的益處:
基于以上業(yè)務(wù)發(fā)展的需要以及自動化運維的收益,,結(jié)合自身IT發(fā)展的形勢,,某銀行在自動化運維方面進行了探索和實踐。 2.自動化運維平臺設(shè)計2.1需求分析
2.2系統(tǒng)架構(gòu)1.總體設(shè)計思路系統(tǒng)運維自動化的應(yīng)用架構(gòu)及關(guān)鍵業(yè)務(wù)流程的總體規(guī)劃及設(shè)計如下: 建設(shè)自動化作業(yè)管理平臺是本項目的主要工作目標,,底層對接資源層,,使用各類技術(shù)工具以實現(xiàn)自動化操作,橫向?qū)优渲霉芾砥脚_,、流程平臺,、監(jiān)控平臺和數(shù)據(jù)管理平臺,貫穿整體統(tǒng)一運維管理框架,,以實現(xiàn)自動化部署,、批量變更、配置發(fā)現(xiàn),、自動巡檢,、資源管理的功能。 2.總體應(yīng)用邏輯架構(gòu)設(shè)計下圖是系統(tǒng)運維自動化的總體邏輯架構(gòu)圖 解釋說明: 整體架構(gòu)分為資源層,、工具層,、平臺層和應(yīng)用層。底層根據(jù)企業(yè)特點,,目前主要是基于私有云環(huán)境以及物理裸機,,私有云主要使用VmWare和OpenStack等虛擬化平臺,而容器平臺也逐漸將作為一種資源類型納入到資源層的管控中,。而基于金融行業(yè)的特殊性,,物理裸機的部署依舊占用比重很大,。在設(shè)計上依舊需要考慮物理裸機的自動化部署。 在工具層根據(jù)底層資源的類型以及特性選擇相應(yīng)的技術(shù)工具,,如X86服務(wù)器的部署選擇Cobbler,,HPUnix服務(wù)器選擇Ux-ignite,而虛擬化平臺選擇Ansible,、虛擬化平臺API或是命令對接的方式實現(xiàn)資源的自動化部署和資源管控,。對接流程管理平臺主要實現(xiàn)環(huán)境交付和變更的半自助服務(wù),以及實現(xiàn)資源管控的流程信息的分類和管理,。對接監(jiān)控信息實現(xiàn)故障自愈以及資源回收,。對接配置平臺,是通過信息的自動發(fā)現(xiàn)保證配置信息的準確性,。 在平臺層建立自動化作業(yè)管理平臺,,也是本期實施的主要部分。在金融企業(yè)內(nèi)部基本已建立了流程平臺,、配置平臺,、監(jiān)控平臺。作業(yè)管理平臺,,主要面向運維人員,,可提供自動化操作和配置界面。 而在應(yīng)用場景方面,,主要需要解決的問題,,一是環(huán)境的自動化部署交付、二是批量變更,、三是主機信息的自動化發(fā)現(xiàn),、四是自動化巡檢、五是資源管控,。 3.關(guān)鍵應(yīng)用實施方案物理服務(wù)器部署根據(jù)實際需求情況,,由于物理服務(wù)器的操作系統(tǒng)版本沒有高度統(tǒng)一,如RedHat,、CentOS,、Exsi等各類版本,故物理服務(wù)器一站式部署的實質(zhì)是要形成X86物理資源池,,再按需下發(fā)部署操作系統(tǒng),。 要實現(xiàn)Cobbler的自動化下推操作系統(tǒng),必須提供DHCP網(wǎng)絡(luò)環(huán)境,,根據(jù)現(xiàn)有的網(wǎng)絡(luò)環(huán)境,,按如下方案實施:
具體網(wǎng)絡(luò)結(jié)構(gòu)如下圖: 4.主要工具簡介CobblerCobbler 是一個系統(tǒng)啟動服務(wù)(boot server),可以通過網(wǎng)絡(luò)啟動(PXE)的方式用來快速安裝,、重裝物理服務(wù)器和虛擬機,,支持安裝不同的 Linux 發(fā)行版和 Windows。該工具使用python開發(fā),,小巧輕便(才15k行代碼),,使用簡單的命令即可完成PXE網(wǎng)絡(luò)安裝環(huán)境的配置,同時還可以管理DHCP,,DNS,,以及yum包鏡像。 Cobbler 使用命令行方式管理,,也提供了基于 Web 的界面管理工具(cobbler-web),,還提供了API接口,可以方便二次開發(fā)使用,。 Ignite-UXIgnite-UX是HP-UX的系統(tǒng)管理工具,,可以利用該工具通過鏡像備份恢復的方式從網(wǎng)絡(luò)引導并安裝HP-UX操作系統(tǒng),。 WSUSWSUS是個微軟推出的網(wǎng)絡(luò)化的補丁分發(fā)方案,是個免費的工具,。WSUS支持微軟公司全部產(chǎn)品的更新,。通過WSUS這個內(nèi)部網(wǎng)絡(luò)中的Windows升級服務(wù),所有Windows更新都集中下載到內(nèi)部網(wǎng)的WSUS服務(wù)器中,,而網(wǎng)絡(luò)中的客戶機通過WSUS服務(wù)器來得到更新,。這在很大程度上節(jié)省了網(wǎng)絡(luò)資源,避免了外部網(wǎng)絡(luò)流量的浪費并且提高了內(nèi)部網(wǎng)絡(luò)中計算機更新的效率,。WSUS采用C/S模式,,客戶端已被包含在各個WINDOWS操作系統(tǒng)上。從微軟網(wǎng)站上下載的是WSUS服務(wù)器端,。通過配置,,將客戶端和服務(wù)器端關(guān)聯(lián)起來,就可以自動下載補丁了,。這個配置幾乎就是使用WSUS的全部工作了,。 Ansibleansible是自動化運維工具,基于Python開發(fā),,集合了眾多運維工具(puppet,、cfengine、chef,、func,、fabric)的優(yōu)點,實現(xiàn)了批量系統(tǒng)配置,、批量程序部署,、批量運行命令等功能。 3.Ansible的應(yīng)用在整個自動化運維管理平臺中,,除了集成部分由專業(yè)開發(fā)團隊外包集成外,,Ansible是由我們目前研究的方向和目標。而基于Ansible基本實現(xiàn)了自動化運維平臺的后端核心部分,,下面的章節(jié)主要就Ansible研究和探索的內(nèi)容進行分享和探討,。 3.1Ansible的特點Ansible在官網(wǎng)中被定義為Ansible is a radically simple IT automation engine。說明Ansible是一款極其簡單的IT自動化工具,,在0.X的版本中甚至使用Stupid Simple來形容Ansible是令人發(fā)指的簡單,。可見Ansible這塊自動化工具非常注重Simple的理念,。 雖然Ansible注重使用的簡單,,但它自身并不簡單,它擁有豐富穩(wěn)定的內(nèi)置模塊和開放的API接口,。目前在Ansible2.3的版本中已經(jīng)擁有了1014個內(nèi)置模塊(數(shù)據(jù)更新至2017年9月6日),。而由于其開源生態(tài)非常好使得其內(nèi)置模塊支持的覆蓋面非常廣: 系統(tǒng)層:Linux,、Windows、AIX等,,對應(yīng)的模塊有acl,、cron、pip,、yum,、shell、command,、file,、copy、user,、lvol等等,。 虛擬化:OpenStack、VMware,、Docker,、CloudStack、LXC等,,對應(yīng)的模塊glance_image,、os_server、vmware_vmkernel,、docker等等,。 商業(yè)化軟件:F5、ASA,、Citrix,、Eos等 系統(tǒng)應(yīng)用層:Apache、Jboss,、Zabbix,、Rabbitmq,、SVN,、GIT、Mysql,、Mariadb等,,對應(yīng)的模塊apache2_module、jboss,、zabbix_group,、rabbitmq_binding、subversion,、git等 Ansible與Puppet和Saltstack的對比 目前主流的自動化配置管理工具主要有Ansible,、Puppet和SaltStack,,這三款自動化開源工具的主要優(yōu)劣勢如表一所示,而近年來Ansible也成為了自動化配置管理工具的“網(wǎng)紅”,,其在GitHub中的社區(qū)關(guān)注度見表二,。 GitHub社區(qū)活躍度: 3.2Ansible的技術(shù)能力Ansible在Linux下的技術(shù)能力作為開源系統(tǒng)和軟件,Linux系統(tǒng)是Ansible支持最佳的操作系統(tǒng),。我們使用Ansible在Linux下對部分模塊進行了測試和實際的運用,。結(jié)果表明,模塊的豐富程度很高可以覆蓋絕大多數(shù)自動化運維場景,。無代理的特性Ansible的管控覆蓋快速,、輕便。穩(wěn)定性和容錯能力不錯,。在大量覆蓋千量級服務(wù)器發(fā)現(xiàn)了幾個不足是需要尋求一些更好的解決方案的,,一是Ansible會對中文字符集的操作系統(tǒng)支持上存在一些小問題,比如service模塊,;二是Ansible執(zhí)行命令時會在某些被控節(jié)點特定異常時掛住,,無法繼續(xù),即使采用異步模式,;三是性能并不是特別好,,需要調(diào)優(yōu)或?qū)で笃渌鉀Q方案。未調(diào)優(yōu)情況下,,管控千量級服務(wù)器可以,,萬量級服務(wù)器難以勝任。在8C8G的服務(wù)器上對2000臺服務(wù)器執(zhí)行20并發(fā)的ping模塊(即單作業(yè)執(zhí)行)消耗時間大約3分鐘,。實際在進行ZabbixAgent批量安裝時,,我們的Playbook有20多個作業(yè),在安裝500臺服務(wù)器時使用的時間大約是20-30分鐘,。 常用Linux模塊(基本覆蓋90%的自動化場景):user: 用戶管理 group:用戶組管理 shell:調(diào)用shell file:文件,、目錄管理(包括權(quán)限、屬主) copy:文件復制(包括權(quán)限,、屬主) service:Linux服務(wù)管理 lineinfile:對于文本文件的處理,,可通過正則表達式進行替換、新增,、刪除等,,是配置文件調(diào)整的利器 template:下發(fā)模版文件,可以隨變量變化在下發(fā)后自動生成適用于受控主機的配置文件,,是配置文件管理的利器,,特別適用于系統(tǒng)應(yīng)用軟件,比如mysql、jboss,、apache等 authorized_key:密鑰管理,,可以批量下發(fā)或管理ssh密鑰 unarchive:對zip、tar,、gzip等格式的包可以解壓 yum:使用yum管理器對包進行管理 lvg:lvm的pv和vg管理,,可以創(chuàng)建、調(diào)整,、刪除vg lvol:lvm的lv管理,,可以創(chuàng)建、調(diào)整,、刪除lv fssystem:文件系統(tǒng)管理 mount:文件系統(tǒng)掛載管理 Ansible在HPUX下的技術(shù)能力根據(jù)公司的實際情況,,Unix服務(wù)器主要是HPUX,AIX使用的比較少,。故對Ansible在HPUX的使用進行了測試,。 首先HPUX11.31下并未默認安裝python,故需要手動安裝python后才能接管,。而測試結(jié)果發(fā)現(xiàn)支持情況不佳,,HPUX下可以使用少部分的Linux的模塊,而使用到一些系統(tǒng)級的模塊時HPUX下無法支持,,比如service,、mount、lvg,、lvol等等,。所以不推薦Ansible在HPUX下直接使用。如果需要Ansible統(tǒng)一管控,,可以通過Ansible連接后調(diào)用腳本實現(xiàn)管控,。 Ansible在Windows下的技術(shù)能力Ansible連接Windows主機從技術(shù)實現(xiàn)上是利用了Windows的Powershell及.net庫,通過Python的pywinrm庫實現(xiàn)基于Windows的winrm協(xié)議遠程控制Windows主機,,而調(diào)用的Ansible的內(nèi)置模塊實質(zhì)均為Powershell腳本,,僅由python程序調(diào)用。 故Ansible連接Windows主機需要Powershell3.0及.net3.5,,所以WindowsServer2008需要進行升級,,而Windows2012及以上版本可以直接使用。 通過測試及實際運用發(fā)現(xiàn),,常規(guī)運維操作覆蓋能力不錯,。甚至使用Ansible進行WindowsHotFix補丁的安裝均可以實現(xiàn)。當然我們在選擇補丁安裝時最終還是選擇了微軟原生的WSUS進行集成,。 根據(jù)實際情況,目前依舊有不少應(yīng)用運行在WindowsServer2008上,升級.net需要應(yīng)用的測試,,工作量較大需要逐步推進,。而在WindowsServer2012及以上版本上,使用Ansible是沒有什么問題的,。 常用Windows模塊(基本覆蓋90%的自動化場景):win_user: windows用戶管理 win_group: windows用戶組管理 win_shell:調(diào)用windows內(nèi)部命令或腳本 win_file:管理windows文件,,包括復制、刪除,、創(chuàng)建等,,包括管理文件屬主、權(quán)限等 win_copy:復制windows文件,,包括復制,、刪除、創(chuàng)建等,,包括管理文件屬主,、權(quán)限等 win_service:管理windows的服務(wù),可以啟動,、停止,、設(shè)置自啟、禁止自啟 win_lineinfile:對文本文件通過正則表達式進行調(diào)整,,包括插入,、替換、刪除 win_unzip:可對zip壓縮包進行解壓,,win_zip可以進行打包 win_msi:對windows的msi包進行管理 Ansible在OpenStack下的技術(shù)能力Ansible可以作為OpenStack的自動化編排工具,,通過Ansible控制OpenStack的Controller節(jié)點,通過Ansible的內(nèi)置模塊os_server,、os_volume等模塊實現(xiàn)在OpenStack平臺上管理instance和存儲,。 從需求出發(fā)公司目前的需求僅為環(huán)境交付。所以在實際使用中,,我們根據(jù)用戶對環(huán)境的需求,,使用已經(jīng)編制好的AnsiblePlaybook調(diào)用不同的參數(shù)在OpenStack上創(chuàng)建實例、掛載磁盤,、進行安全加固,、安裝基礎(chǔ)軟件最終交付至用戶,與流程對接后可以實現(xiàn)半自助服務(wù),。 而在社區(qū)中也可以看到大量關(guān)于Ansible安裝OpenStack以及擴展的資料和實際使用情況,。本文在這里不做深入介紹。另外,,Git上也有不少Ansible在OpenStack上的實際案例,,比如使用Ansible的Playbook來實現(xiàn)整個OpenStack環(huán)境的自動化應(yīng)急演練,,檢測網(wǎng)絡(luò)、實例,、存儲,、以及實例上的資源異常時的系統(tǒng)健壯程度。 所以,,我們認為Ansible可以作為OpenStack的編排工具在公司進行推廣使用,。 Ansible技術(shù)能力總結(jié)Ansible的優(yōu)點主要是: 一、學習曲線平滑,,使用簡易,。具備一定腳本使用基礎(chǔ)的運維人員兩個月可以較為熟練的使用。 二,、無代理,,部署簡單。 三,、模塊豐富,,覆蓋面較廣,使用場景較多,。 四,、社區(qū)熱度高,資料豐富,。 Ansible的缺點是: 一,、性能相對較弱,需要優(yōu)化或更改連接模式提升性能,。 二,、HPUX、WindowsServer08支持較弱,。 三,、對于中文環(huán)境依舊存在一些弊端。 四,、日志記錄功能不夠強大,。 五、基于冪等設(shè)計,,回退機制弱,。 3.3Ansible的應(yīng)用場景目前公司Ansible已經(jīng)廣泛開始使用,目前應(yīng)用的場景主要是批量變更,、軟件安裝,、環(huán)境交付以及主機信息的自動發(fā)現(xiàn)。 批量變更主要應(yīng)用在Linux操作系統(tǒng)上,,根據(jù)實際運維需要我們應(yīng)用在Agent批量安裝,、用戶批量開設(shè),、配置批量更新等方面。 使用最多的是Zabbix和Flume的Agent批量安裝,,特別是Zabbix使用Ansible工具特別方便,,除了安裝Agent之外,,批量更改配置非常方便,,如使用Zabbix服務(wù)器或代理服務(wù)器地址更換、自定義Key的新增調(diào)整等等,。 在用戶開立方面也使用Ansible進行批量推送,。 同時,在配置方便除了Zabbix配置之外,,還在ELK的Syslog的配置上也已經(jīng)進行了應(yīng)用,。 在使用Ansible進行批量變更的時候,需要保證代碼進行充分測試,,雖然Ansible在使用上非常簡單,,但回退機制較弱。比如文件的批量更新,,雖然可以進行備份,,但無法將備份批量進行回退。 基礎(chǔ)設(shè)施即代碼的概念中最困難的一點是碎片服務(wù)器,,由于存在大量的存量服務(wù)器,,所以這個問題無法避免。這就需要企業(yè)內(nèi)部使用Ansible的時候一定要將Ansible作為一種軟件代碼進行管理,,建立開發(fā)測試發(fā)布機制,,保證代碼充分測試。在批量變更的時候?qū)ふ也煌愋偷脑O(shè)備進行試點后再逐步推送,。如果使用Ansible進行過一次推送后,,碎片的問題基本就不是問題了,今后可以較為放心的反復更新,。 關(guān)于開發(fā)測試發(fā)布機制,,我們目前以GitLab為工具建立了版本控制系統(tǒng),并定義了代碼遷入遷出規(guī)則,,嚴格根據(jù)流程開發(fā),、測試最后才能最終發(fā)布。 軟件安裝除了批量變更之外,,Ansible主要是實現(xiàn)基礎(chǔ)軟件的安裝,,比如mysql、oracle,、jboss等等,。在使用Ansible安裝此類軟件時將配置獨立出來,,這樣可以根據(jù)用戶需求獲取不同參數(shù),以實現(xiàn)不同配置的軟件,。 環(huán)境交付除了批量變更之外,,Ansible主要是實現(xiàn)基礎(chǔ)軟件的安裝,比如mysql,、oracle,、jboss等等。 在環(huán)境交付層面,,由于Ansible是基于操作系統(tǒng)或是虛擬化云平臺的,,所以在裸機部署上并不適用。在虛擬化云平臺上,,通過Ansible基于OpenStack和VMWare的模塊開設(shè)實例和虛機以及掛盤,,完成虛機的下放后,再進行軟件的安裝,。從Ansible的Playbook的設(shè)計上只需要將下放虛機掛盤操作作為一部分再集成前述的軟件安裝部分即可,。下放虛機掛盤的操作也可以由自動化運維平臺中集成各個虛擬化平臺的命令完成。 最后呈現(xiàn)的形式由用戶遞交環(huán)境申請信息,,標注需要什么配置的服務(wù)器,、幾臺、需要安裝什么樣的軟件,。遞交申請審批通過,,由自動化平臺自動運行部署后交付至用戶。 主機信息自動發(fā)現(xiàn)利用Ansible的現(xiàn)成連接通道以及自帶的facts模塊,,實現(xiàn)主機信息的自動發(fā)現(xiàn)和更新功能,,并將這些信息定期更新至配置平臺中,以輔助配置平臺的數(shù)據(jù)準確性,。由于Ansible的facts模塊采集的信息有限,,且基于Linux、HPUX以及Windows采集的內(nèi)容也稍有不同,,所以還是需要一些本地化的程序輔助,。 Facts中可以采集的信息主要包含了主機的一些基礎(chǔ)信息,如主機名,、IP地址,、網(wǎng)卡信息、CPU,、MEM以及操作系統(tǒng)版本等信息,。而從需求出發(fā),我們可能還關(guān)注基礎(chǔ)軟件的版本信息,、文件系統(tǒng)以及用戶的信息等等,。所以需要根據(jù)需求定義一些程序以獲取這些信息,。 我們目前采用如下圖,設(shè)計方法獲取主機信息,,根據(jù)需求編制Ansible的模塊,,比如獲取用戶的信息,定義新的模塊,,定義完成后即形成新的AnsibleAD-HOC命令,,通過一段程序獲取所有受控的主機的facts以及自定義的信息之后將其入庫,并同步更新至CMDB庫,。運維人員自己就可以根據(jù)自身的需求去定義需要的信息,,并且將其入庫,,無需專業(yè)的開發(fā)人員實施,。 其他場景Ansible的其他使用場景,主要是應(yīng)用的發(fā)布和變更,,利用Ansible本身與Git結(jié)合的能力,,考慮應(yīng)用的發(fā)布,社區(qū)中也有不少這樣的案例可以參考,。同時公司目前也在研究以Jenkins為主要工具的持續(xù)集成,、持續(xù)測試,Jenkins環(huán)境部署和應(yīng)用發(fā)布的部分考慮與Ansible對接實現(xiàn),。
|
|