劉佳 高琪琪 劉飄 梁棟茂


摘 要:隨著云計算的不斷發(fā)展,越來越多的互聯(lián)網(wǎng)公司需要對企業(yè)服務(wù)器進行自動化部署與運維,最終實現(xiàn)配置管理、服務(wù)及時開通、應(yīng)用部署和流程編排等目的。Ansible便由此產(chǎn)生。
關(guān)鍵詞:云計算;流程編排;Ansible
中圖分類號:TP393.09文獻標識碼:A文章編號:1003-5168(2020)26-0014-03
Abstract: With the continuous development of cloud computing, more and more Internet companies need to automate deployment and operation and maintenance of enterprise servers, and ultimately achieve configuration management, timely service activation, application deployment and process orchestration. So Ansible was born.
Keywords: cloud computing;process orchestration;Ansible
Ansible是基于Python開發(fā)的一種自動化運維工具[1-2]。基于Ansible自動化的服務(wù)器部署與運維在配置管理領(lǐng)域已經(jīng)涌現(xiàn)出多種工具,配置管理的目標就是確保被管理的主機盡可能快速、按照正確方式達到配置文件中描述的狀態(tài),這對管理IT環(huán)境至關(guān)重要;服務(wù)即時開通主要針對數(shù)據(jù)中心、虛擬化環(huán)境、云計算中快速開通的新主機。幾乎所有云計算的服務(wù)商都有相應(yīng)的API接口,這些自動化工具通過API接口能夠迅速地創(chuàng)建主機實例。對于基于Linux或最近快速發(fā)展的容器技術(shù),應(yīng)用部署主要關(guān)注如何盡量實現(xiàn)零停機部署應(yīng)用。很多公司采用滾動式部署或者金絲雀部署,Ansible支持這兩種方式。流水線式部署也是很常見的,常見的工具包括ThoughtWorks Go、Atlassian Bamboo、大量插件支持;流程編排主要是進場部署時如何保證基礎(chǔ)架構(gòu)中的各種組件協(xié)調(diào)一致。這類工具有Ansible、Mcollective、Salt、Chef等。基于Ansible自動化的服務(wù)器部署與運維幫助了企業(yè)實現(xiàn)IT工作的自動化,降低人為操作失誤,提高業(yè)務(wù)自動化率和運維工作效率[3-5]。
1 項目研究目標及主要內(nèi)容
1.1 項目研究目標
項目研究目標如下:實現(xiàn)Ansible母機對主機清單內(nèi)批量化從屬機的控制以及彼此的網(wǎng)絡(luò)互通;實現(xiàn)通過Ansible母機對每一臺從屬機內(nèi)的用戶、組、權(quán)限的管理,并實現(xiàn)基本的文件創(chuàng)建、刪除、內(nèi)容修改等基礎(chǔ)運維;實現(xiàn)特定從屬機上硬件報告的生成、應(yīng)用軟件的安裝以及小型網(wǎng)頁主頁的顯示;實現(xiàn)服務(wù)器數(shù)據(jù)文件的加密與解密,保證企業(yè)內(nèi)部工程的安全性與可靠性。
1.2 主要內(nèi)容
主要研究內(nèi)容是通過自動化運維技術(shù)模擬中大型企業(yè)批量化服務(wù)器的部署與運維。首先要明確用戶對服務(wù)器的真正需求,在此基礎(chǔ)上對整體服務(wù)進行構(gòu)架,然后自頂向下,逐步細化,進行模塊化的具體功能設(shè)計。其次,要研究Ansible的基礎(chǔ)yml語言的組成與使用、Ansible的核心playbook劇本的編寫與應(yīng)用、相關(guān)軟硬件報告的生成、數(shù)據(jù)文件加密技術(shù)、部署與運維過程中使用的其他技術(shù)。
2 項目創(chuàng)新特色概述
2.1 成本優(yōu)勢
使用虛擬化技術(shù)進行Ansible自動化的服務(wù)器部署與運維,一方面減小了公司對服務(wù)器這類高成本硬件的需求,另一方面降低了分臺手動部署所形成的時間和人力成本。Ansible自動化的服務(wù)器部署與運維有著廉價的分配過程,需要時才分配,分配過程很廉價,為企業(yè)或?qū)W校服務(wù)器部署與運維提供了一種經(jīng)濟高效的解決方案。
2.2 管理優(yōu)勢
Ansible采用Python語言開發(fā),采用ssh通信,不需要安裝代理,沒有數(shù)據(jù)庫,同時沒有后臺駐留程序。但一切的前提是用戶安裝的是一個正常無精簡的Linux操作系統(tǒng),因為它仍然需要遠端機器上有sftp或scp,同時至少安裝了Python2.4版本,而且Python2.5及以下版本需要安裝Python的插件python-simplejson,才能使用更全面的功能。
3 項目研究技術(shù)路線
項目研究技術(shù)路線如圖1所示。
4 設(shè)計與制作的技術(shù)難點
4.1 技術(shù)原理
Ansible使用ssh連接到服務(wù)器運行配置好的任務(wù),無須安裝其他軟件,所有工作交給客戶端的Ansible負責(zé)。在管理工作站上安裝Ansible程序配置被管控主機的IP信息,被管控的主機無客戶端。Ansible自動化部署需要進行編排、自動驗證,自動資源配置以實現(xiàn)業(yè)務(wù)系統(tǒng)的自動化部署管理。Ansible自動化部署功能的實現(xiàn)涉及編排策略定義與識別、虛擬計算和網(wǎng)絡(luò)資源識別與控制等多項關(guān)鍵技術(shù)。本項目需要結(jié)合虛擬化平臺,以平臺上的API接口實現(xiàn)Ansible母機對每一臺從屬機內(nèi)的用戶、組、權(quán)限的管理,實現(xiàn)基本的文件創(chuàng)建、刪除、內(nèi)容修改等基礎(chǔ)運維,實現(xiàn)服務(wù)器數(shù)據(jù)文件的加密與解密,保證企業(yè)內(nèi)部工程的安全性與可靠性。
4.2 Ansible工作原理圖
Ansible工作原理如圖2所示。用戶輸入的指令通過Ansible的任務(wù)劇本playbook進行編排定義,并通過Ansible的核心執(zhí)行工具進行一系列處理,達到訪問主機和網(wǎng)絡(luò)的目的。
5 研究實施
Ansible有兩種任務(wù)執(zhí)行模式,即ad-hoc模式(點對點模式)以及playbook模式(劇本模式)。
Ansible執(zhí)行時,首先會讀取ansible.cfg配置文件,通過規(guī)則過濾inventory中定義的主機列表,使其加載任務(wù)對應(yīng)的模塊文件,然后通過ansible core將模塊或命令打包成Python腳本文件,將臨時腳本文件傳輸?shù)竭h程服務(wù)器,對應(yīng)執(zhí)行用戶的家目錄‘.ansible/tmp/xxx/xxx.py文件,再給文件加載執(zhí)行權(quán)限,最后執(zhí)行Python文件并返回結(jié)果。項目實施步驟如下。
1.安裝并配置Absible
yum install ansible
安裝完后修改配置文件:
# vim ansible.cfg /etc/ansible/ansible.cfg -o
[defaults]
inventory = /home/devops/ansible/inventory
remote_user = devops
ask_pass = False
roles_path =/home/devops/ansible/roles
[privilege_escalation]
become= Ture
become_method = sudo
become_user = root
become_ask_pass = False
2.使用公鑰認證
3.配置Linux主機ssh無密碼訪問
4.測試主機連通性:
[devops@workstation ansible]$ ansible -m ping liu
serverc | SUCCESS => {
“changed”:false,
“ping”: “pong”
}
servera | SUCCESS => {
“changed”:false,
“ping”: “pong”
}
serverb | SUCCESS => {
“changed”:false,
“ping”: “pong”
}
5.搭建ad-hoc建軟件倉庫
6.安裝軟件包
7.使用rhel-system-role
8.使用galaxy創(chuàng)建roles角色
9.創(chuàng)建并使用roles
10.配置Ansible劇本,劇本配置如下:
---
- hosts: all
tasks:
- name: Install Nginx Package
yum: name=nginx state=present
- name: Copy Nginx.conf
template: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf
owner=root group=root mode=0644 vaildate='nginx -t -c %s'
notify:
- ReStart Nginx Service
handlers:
- name: ReStart Nginx Service
service: name=nginx state=restarted
11.使用galxay角色
12.創(chuàng)建并使用磁盤分區(qū)
13.生成hosts文件
14.創(chuàng)建網(wǎng)站內(nèi)容目錄
6 結(jié)語
研究表明,Ansible母機可以實現(xiàn)對主機清單內(nèi)批量化從屬機的控制和網(wǎng)絡(luò)互通;實現(xiàn)對每一臺從屬機內(nèi)的用戶、組、權(quán)限的管理,實現(xiàn)基本的文件創(chuàng)建、刪除、內(nèi)容修改等基礎(chǔ)運維;實現(xiàn)特定從屬機上硬件報告的生成、應(yīng)用軟件的安裝以及小型網(wǎng)頁主頁的顯示;實現(xiàn)服務(wù)器數(shù)據(jù)文件的加密與解密,保證企業(yè)內(nèi)部工程的安全性與可靠性。
參考文獻:
[1]金窗,沈燦.Ansible自動化運維:技術(shù)與最佳實踐[M].北京:機械工業(yè)出版社,2016.
[2]北京馬哥教育科技有限公司.Ansible中文權(quán)威指南[EB/OL].(2020-07-20)[2020-07-28].http://www.ansible.com.cn/index.html.
[3]w3cschool.Ansible自動化運維教程[EB/OL].(2020-07-19)[2020-07-28].https://www.w3cschool.cn/automate_with_ansible.
[4]松濤,魏巍,甘捷.Ansible權(quán)威指南[M].北京:機械工業(yè)出版社,2016.
[5]workming.自動化運維工具Ansible詳細部署[EB/OL].(2014-11-20)[2020-07-28].https://blog.51cto.com/sofar/1579894.