韓佳辰 白君芬
摘要:分析研究了Ansible技術的工作原理、體系架構以及在網(wǎng)絡系統(tǒng)運維中的應用優(yōu)勢。同時,通過實例闡述了如何在Linux內(nèi)核下合理使用Ansible技術對企業(yè)網(wǎng)絡進行自動化運維管理,為大數(shù)據(jù)下的自動化運維技術的進一步發(fā)展提供了研究思路并起到了一定的借鑒作用。
關鍵詞:Ansible;架構;腳本;Linux;自動化運維
中圖分類號:TP393 ? ? ? ?文獻標識碼:A
文章編號:1009-3044(2022)31-0071-03
隨著大數(shù)據(jù)時代的來臨,企業(yè)網(wǎng)絡中的應用系統(tǒng)慢慢增大,不同的應用系統(tǒng)需要的運行環(huán)境、Web服務器、數(shù)據(jù)庫以及運行維護方式等都會不同,網(wǎng)絡系統(tǒng)異構性大。另外,隨著虛擬化技術的成熟[1],企業(yè)內(nèi)的IT建設速度激增,需要運維的網(wǎng)絡設備也越來越多,這都加大了企業(yè)網(wǎng)絡系統(tǒng)運行和維護工作的難度,因此原有的依靠人力或者腳本進行網(wǎng)絡系統(tǒng)運維的方式已無法滿足企業(yè)需求,而自動化運維技術Ansible不僅可以批量完成網(wǎng)絡系統(tǒng)運維任務,降低人力成本,而且運維的效率和可靠性極高,因此Ansible技術在網(wǎng)絡系統(tǒng)建設與運維中具有獨特的優(yōu)勢和潛力[2-3]。
1 Ansible技術概述
Ansible是基于Python語言開發(fā)的一款輕量級自動化運維工具,它默認采用SSH(Secure Shell) 安全外殼協(xié)議的方式管理客戶端,在主控端部署Ansible環(huán)境,通過SSH遠程管理被控主機(節(jié)點)。Ansible提供了各種模塊對客戶端進行批量管理,包括執(zhí)行命令、安裝軟件、執(zhí)行特定任務等。與其他運維軟件相比,Ansible具有以下應用優(yōu)勢:
1) 部署簡單,只需在主控端部署Ansible環(huán)境,被控端無須做任何操作。默認通過SSH協(xié)議對設備進行管理,配置簡單,功能強大,擴展性強。
2) 支持API及自定義模塊,可通過Python輕松擴展,通過Playbook(腳本)來定制強大的配置、狀態(tài)管理。
3) 對云計算平臺、大數(shù)據(jù)有很好的支持。提供一個功能強大、可操作性強的Web管理界面和REST API接口—AWX接口。
4) Ansible中的配置文件和腳本都是使用YAML語言編寫的,作為專門用來編寫配置文件的YAML語言,其功能強大,方便讀寫。
1.1 Ansible技術原理
Ansible技術是基于模塊工作的,真正具有批量部署能力的是它所運行的模塊。Ansible架構主要包括核心引擎、主機清單、核心模塊、自定義模塊、腳本、插件、連接插件模塊[4-5]。Ansible架構如圖1所示。
其中:主機清單模塊負責定義Ansible的主機策略;核心模塊負責執(zhí)行特定任務或匹配一個特定狀態(tài);自定義模塊負責對Ansible進行擴展;腳本模塊定義Ansible任務的文件,可以將多個任務定義在一個腳本文件中,由Ansible執(zhí)行;插件模塊用于補充模塊功能,完成記錄日志、郵件等功能;連接插件模塊負責實現(xiàn)各個主機的連接,實現(xiàn)與被管節(jié)點通信[3,6]。
1.2 Ansible對各種類型主機的管理
Ansible可以同時管理搭建了Red Hat系列Linux系統(tǒng)、Debian系列Linux系統(tǒng)與Windows系統(tǒng)的主機,如圖2所示。
2 Ansible技術運用
2.1 Ansible安裝
1) 安裝前的準備工作
在安裝之前準備3臺主機,主機信息如表1所示。
在表1示例中,localhost主機是Ansible的管理機,Ansible1與Ansible2是被管理的遠程主機(節(jié)點),安裝Ansible時只在管理機(192.168.175.141) 安裝即可,需要注意的是在安裝之前需要關閉防火墻與SELinux(強制訪問控制系統(tǒng))。
2) 使用yum install命令安裝Ansible
①主機中安裝包含Ansible軟件包的EPEL源,命令如下:
[root@localhost~]# yum install epel-release
②安裝Ansible,命令如下:
[root@localhost~]# yum-y install ansible
2.2 配置SSH無密碼登錄
使用ssh-keygen與ssh-copy-id兩個命令來設置Linux主機SSH無密碼登錄,其中,ssh-keygen生成一對密鑰(公鑰和密鑰);ssh-copy-id把本地主機的公鑰復制到目標主機上,并對遠程的用戶目錄設置合適的權限。
1) 生成一對密鑰。在localhost主機,使用ssh-keygen命令生成一對密鑰,命令如下:
[root@localhost~]# ssh-keygen -t rsa
2) 將公鑰下發(fā)到遠程主機。使用ssh-copy-id命令將公鑰下發(fā)到節(jié)點,命令如下:
[root@localhost~]# ssh-copy-id root@192.168.175.135
3) 保管私鑰。公鑰下發(fā)完畢后,使用ssh-add命令將私鑰交由192.168.175.135管理,命令如下所示:
[root@localhost~]# ssh-add.ssh/id_rsa
再執(zhí)行命令[root@localhost~]# ssh 192.168.175.135,驗證配置是否成功,如果能直接無密碼進入目標主機,就說明SSH無密碼登錄配置成功,再以同樣的方式配置另一臺192.168.175.136主機。
2.3 Ansible應用實例
編寫ansible腳本(playbook) ,實現(xiàn)httpd(代理服務器) 角色,代碼如下:
#創(chuàng)建角色相關的目錄
mkdir -pv /data/ansible/roles/httpd/{tasks,handlers,files}
#創(chuàng)建角色相關的文件
cd /data/ansible/roles/httpd/
vim tasks/main.yml
- include: group.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: index.yml
- include: service.yml
vim ?tasks/user.yml
- name: create apache user
user: name=apache system=yes shell=/sbin/nologin home=/var/www/ uid=80 group=apache
vim ?tasks/group.yml
- name: create apache group
group: name=apache system=yes gid=80
vim tasks/install.yml
- name: install httpd package
yum: name=httpd
vim tasks/config.yml
- name: config file
copy: src=httpd.conf dest=/etc/httpd/conf/ backup=yes
notify: restart
vim tasks/index.yml
- name: index.html
copy: src=index.html dest=/var/www/html/
vim tasks/service.yml
- name: start service
service: name=httpd state=started enabled=yes
vim handlers/main.yml
- name: restart
service: name=httpd state=restarted
#在playbook中調用角色
vim ?/data/ansible/role_httpd.yml
# httpd role
- hosts: websrvs
remote_user: root
roles:
- httpd
#運行playbook
ansible-playbook ?/data/ansible/role_httpd.yml
3 Ansible技術應用方面的問題及解決方法
3.1 Ansible技術應用方面的問題
Ansible技術的應用都是使用命令在節(jié)點上執(zhí)行任務,而命令使用起來比較復雜,同時每執(zhí)行一次任務都需要重復輸入,這種命令代碼難于重用和分享的局域性,會導致重復工作和效率低的問題。 針對此類問題,Ansible技術提供了playbook腳本和role角色來用于實現(xiàn)代碼重用和分享。
3.2 解決方法
3.2.1 playbook腳本
playbook腳本即一個可以被 Ansible執(zhí)行的YAML文件,用戶通過ansible命令直接調用yml語言編寫的playbook,playbook是由一條或多條“play”組成的列表,每條play都有一個任務(task) 相對應的操作,任務調用模塊modules,應用在主機清單上,通過ssh遠程連接,控制遠程主機或者網(wǎng)絡設備,playbook腳本包含以下3個基本部分。
1) 指定節(jié)點和用戶
因為每一個playbook都需要指定針對哪些節(jié)點進行運維,并且以哪個用戶來執(zhí)行任務,所以這就需要指定節(jié)點和用戶,指定節(jié)點使用hosts關鍵字,指定用戶使用users關鍵字。
2) 任務列表
任務列表即要執(zhí)行的任務的隊列,指定任務列表的關鍵字為tasks。任務列表中的每個任務都通過調用 Ansible模塊完成,任務按預先定義的先后順序執(zhí)行。
3) Handlers
Handlers也是通過對Ansible模塊進行調用,實現(xiàn)處理某些動態(tài)事件。Handlers中的模塊調用與任務列表中的任務不同,任務默認按定義順序執(zhí)行,而Handlers只有在被觸發(fā)時才會執(zhí)行。
顯而易見,playbook腳本通過對Ansible模塊進行調用,就可以實現(xiàn)代碼的重復使用和分享。
3.2.2 role角色
role是Ansible中的一個非常重要的角色,它可以重復使用一組文件,實現(xiàn)更完整的功能。role是Ansible引入的新特性,用于結構化、層次性地組織playbook。roles能夠根據(jù)層次型結構自動裝載tasks、變量文件以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡而言之,roles就是通過分別將文件、變量、模塊、任務及處理器放置于單獨的目錄中、并可以便捷地include它們的一種機制。role角色一般用于基于主機構建服務的場景中、但也可以是用于構建守護進程等場景中。例如:在安裝配置Linux平臺使用最廣泛的Web服務Apache服務器時,既需要安裝、啟動、復制模板等任務,也需要生成httpd.conf和index.html的模板文件,以及定義handlers來實現(xiàn)重啟。這些任務、配置文件、handlers都可以放在一個role中,形成一套完整的功能,以供不同的playbook使用。
同時,Ansible不僅大力支持在playbook中使用role,而且提供了一個分享role的平臺Ansible Galaxy(https://galaxy.ansible.com) ,在這個網(wǎng)站上,用戶可以上傳自己的role,也可以下載別人的role來使用,因此能夠很好地提高運維效率。
4 結束語
Ansible是基于安全性、高可靠性設計的輕量級自動化運維工具,功能強大,部署便捷,簡單易學,因此應用前景廣泛。隨著云計算的不斷發(fā)展,越來越多的互聯(lián)網(wǎng)公司需要對企業(yè)服務器進行自動化部署與運維,最終實現(xiàn)配置管理、服務及時開通、應用部署和流程編排等目的,針對傳統(tǒng)數(shù)據(jù)中心逐漸過渡為云數(shù)據(jù)中心,以及對云數(shù)據(jù)中心中大量服務進行更快速地部署,更準確地服務狀態(tài)監(jiān)控的需求,就必須要在具有配置管理和遠程執(zhí)行的能力基礎上,提供各種工具來管理服務器的基礎架構,從而幫助企業(yè)快速構建虛擬化環(huán)境下的數(shù)據(jù)中心,提高服務運維的效率,保障服務運行的質量。
參考文獻:
[1] 王曉天.基于虛擬化技術的云數(shù)據(jù)中心構建及自動化運維管理[J].軟件工程,2020,23(11):27-29.
[2] 李沁蔓.基于Ansible的服務器自動化運維技術研究與實現(xiàn)[J].電子設計工程,2020,28(13):23-26,31.
[3] 李湘林,向全,韋美雁,等.基于Ansible自動化運維系統(tǒng)批量部署LAMP架構的設計與實現(xiàn)[J].大眾科技,2021,23(3):1-4.
[4] 沈尚博,袁泉.基于Ansible的自動化運維工具設計與實現(xiàn)[J].信息與電腦(理論版),2020,32(1):120-122.
[5] 劉佳,高琪琪,劉飄,等.基于Ansible的自動化部署與運維[J].河南科技,2020(26):14-16.
[6] 隋利鋒,曾慶輝.大規(guī)模服務器環(huán)境下自動化運維探索[J].當代金融家,2022(5):150-151.
【通聯(lián)編輯:王力】
收稿日期:2022-08-09
作者簡介:韓佳辰(2004—) ,女,河南滑縣人,本科在讀,主要研究方向為計算機應用及自動化技術;白君芬(1974—) ,女,河北石家莊人,副教授,碩士,主要研究方向為網(wǎng)絡安全及計算機類教育。