?

Linux內核下Ansible自動化運維技術的研究與應用

2022-05-30 02:41韓佳辰白君芬
電腦知識與技術 2022年31期
關鍵詞:腳本架構

韓佳辰 白君芬

摘要:分析研究了Ansible技術的工作原理、體系架構以及在網絡系統運維中的應用優勢。同時,通過實例闡述了如何在Linux內核下合理使用Ansible技術對企業網絡進行自動化運維管理,為大數據下的自動化運維技術的進一步發展提供了研究思路并起到了一定的借鑒作用。

關鍵詞:Ansible;架構;腳本;Linux;自動化運維

中圖分類號:TP393 ? ? ? ?文獻標識碼:A

文章編號:1009-3044(2022)31-0071-03

隨著大數據時代的來臨,企業網絡中的應用系統慢慢增大,不同的應用系統需要的運行環境、Web服務器、數據庫以及運行維護方式等都會不同,網絡系統異構性大。另外,隨著虛擬化技術的成熟[1],企業內的IT建設速度激增,需要運維的網絡設備也越來越多,這都加大了企業網絡系統運行和維護工作的難度,因此原有的依靠人力或者腳本進行網絡系統運維的方式已無法滿足企業需求,而自動化運維技術Ansible不僅可以批量完成網絡系統運維任務,降低人力成本,而且運維的效率和可靠性極高,因此Ansible技術在網絡系統建設與運維中具有獨特的優勢和潛力[2-3]。

1 Ansible技術概述

Ansible是基于Python語言開發的一款輕量級自動化運維工具,它默認采用SSH(Secure Shell) 安全外殼協議的方式管理客戶端,在主控端部署Ansible環境,通過SSH遠程管理被控主機(節點)。Ansible提供了各種模塊對客戶端進行批量管理,包括執行命令、安裝軟件、執行特定任務等。與其他運維軟件相比,Ansible具有以下應用優勢:

1) 部署簡單,只需在主控端部署Ansible環境,被控端無須做任何操作。默認通過SSH協議對設備進行管理,配置簡單,功能強大,擴展性強。

2) 支持API及自定義模塊,可通過Python輕松擴展,通過Playbook(腳本)來定制強大的配置、狀態管理。

3) 對云計算平臺、大數據有很好的支持。提供一個功能強大、可操作性強的Web管理界面和REST API接口—AWX接口。

4) Ansible中的配置文件和腳本都是使用YAML語言編寫的,作為專門用來編寫配置文件的YAML語言,其功能強大,方便讀寫。

1.1 Ansible技術原理

Ansible技術是基于模塊工作的,真正具有批量部署能力的是它所運行的模塊。Ansible架構主要包括核心引擎、主機清單、核心模塊、自定義模塊、腳本、插件、連接插件模塊[4-5]。Ansible架構如圖1所示。

其中:主機清單模塊負責定義Ansible的主機策略;核心模塊負責執行特定任務或匹配一個特定狀態;自定義模塊負責對Ansible進行擴展;腳本模塊定義Ansible任務的文件,可以將多個任務定義在一個腳本文件中,由Ansible執行;插件模塊用于補充模塊功能,完成記錄日志、郵件等功能;連接插件模塊負責實現各個主機的連接,實現與被管節點通信[3,6]。

1.2 Ansible對各種類型主機的管理

Ansible可以同時管理搭建了Red Hat系列Linux系統、Debian系列Linux系統與Windows系統的主機,如圖2所示。

2 Ansible技術運用

2.1 Ansible安裝

1) 安裝前的準備工作

在安裝之前準備3臺主機,主機信息如表1所示。

在表1示例中,localhost主機是Ansible的管理機,Ansible1與Ansible2是被管理的遠程主機(節點),安裝Ansible時只在管理機(192.168.175.141) 安裝即可,需要注意的是在安裝之前需要關閉防火墻與SELinux(強制訪問控制系統)。

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) 將公鑰下發到遠程主機。使用ssh-copy-id命令將公鑰下發到節點,命令如下:

[root@localhost~]# ssh-copy-id root@192.168.175.135

3) 保管私鑰。公鑰下發完畢后,使用ssh-add命令將私鑰交由192.168.175.135管理,命令如下所示:

[root@localhost~]# ssh-add.ssh/id_rsa

再執行命令[root@localhost~]# ssh 192.168.175.135,驗證配置是否成功,如果能直接無密碼進入目標主機,就說明SSH無密碼登錄配置成功,再以同樣的方式配置另一臺192.168.175.136主機。

2.3 Ansible應用實例

編寫ansible腳本(playbook) ,實現httpd(代理服務器) 角色,代碼如下:

#創建角色相關的目錄

mkdir -pv /data/ansible/roles/httpd/{tasks,handlers,files}

#創建角色相關的文件

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技術的應用都是使用命令在節點上執行任務,而命令使用起來比較復雜,同時每執行一次任務都需要重復輸入,這種命令代碼難于重用和分享的局域性,會導致重復工作和效率低的問題。 針對此類問題,Ansible技術提供了playbook腳本和role角色來用于實現代碼重用和分享。

3.2 解決方法

3.2.1 playbook腳本

playbook腳本即一個可以被 Ansible執行的YAML文件,用戶通過ansible命令直接調用yml語言編寫的playbook,playbook是由一條或多條“play”組成的列表,每條play都有一個任務(task) 相對應的操作,任務調用模塊modules,應用在主機清單上,通過ssh遠程連接,控制遠程主機或者網絡設備,playbook腳本包含以下3個基本部分。

1) 指定節點和用戶

因為每一個playbook都需要指定針對哪些節點進行運維,并且以哪個用戶來執行任務,所以這就需要指定節點和用戶,指定節點使用hosts關鍵字,指定用戶使用users關鍵字。

2) 任務列表

任務列表即要執行的任務的隊列,指定任務列表的關鍵字為tasks。任務列表中的每個任務都通過調用 Ansible模塊完成,任務按預先定義的先后順序執行。

3) Handlers

Handlers也是通過對Ansible模塊進行調用,實現處理某些動態事件。Handlers中的模塊調用與任務列表中的任務不同,任務默認按定義順序執行,而Handlers只有在被觸發時才會執行。

顯而易見,playbook腳本通過對Ansible模塊進行調用,就可以實現代碼的重復使用和分享。

3.2.2 role角色

role是Ansible中的一個非常重要的角色,它可以重復使用一組文件,實現更完整的功能。role是Ansible引入的新特性,用于結構化、層次性地組織playbook。roles能夠根據層次型結構自動裝載tasks、變量文件以及handlers等。要使用roles只需要在playbook中使用include指令即可。簡而言之,roles就是通過分別將文件、變量、模塊、任務及處理器放置于單獨的目錄中、并可以便捷地include它們的一種機制。role角色一般用于基于主機構建服務的場景中、但也可以是用于構建守護進程等場景中。例如:在安裝配置Linux平臺使用最廣泛的Web服務Apache服務器時,既需要安裝、啟動、復制模板等任務,也需要生成httpd.conf和index.html的模板文件,以及定義handlers來實現重啟。這些任務、配置文件、handlers都可以放在一個role中,形成一套完整的功能,以供不同的playbook使用。

同時,Ansible不僅大力支持在playbook中使用role,而且提供了一個分享role的平臺Ansible Galaxy(https://galaxy.ansible.com) ,在這個網站上,用戶可以上傳自己的role,也可以下載別人的role來使用,因此能夠很好地提高運維效率。

4 結束語

Ansible是基于安全性、高可靠性設計的輕量級自動化運維工具,功能強大,部署便捷,簡單易學,因此應用前景廣泛。隨著云計算的不斷發展,越來越多的互聯網公司需要對企業服務器進行自動化部署與運維,最終實現配置管理、服務及時開通、應用部署和流程編排等目的,針對傳統數據中心逐漸過渡為云數據中心,以及對云數據中心中大量服務進行更快速地部署,更準確地服務狀態監控的需求,就必須要在具有配置管理和遠程執行的能力基礎上,提供各種工具來管理服務器的基礎架構,從而幫助企業快速構建虛擬化環境下的數據中心,提高服務運維的效率,保障服務運行的質量。

參考文獻:

[1] 王曉天.基于虛擬化技術的云數據中心構建及自動化運維管理[J].軟件工程,2020,23(11):27-29.

[2] 李沁蔓.基于Ansible的服務器自動化運維技術研究與實現[J].電子設計工程,2020,28(13):23-26,31.

[3] 李湘林,向全,韋美雁,等.基于Ansible自動化運維系統批量部署LAMP架構的設計與實現[J].大眾科技,2021,23(3):1-4.

[4] 沈尚博,袁泉.基于Ansible的自動化運維工具設計與實現[J].信息與電腦(理論版),2020,32(1):120-122.

[5] 劉佳,高琪琪,劉飄,等.基于Ansible的自動化部署與運維[J].河南科技,2020(26):14-16.

[6] 隋利鋒,曾慶輝.大規模服務器環境下自動化運維探索[J].當代金融家,2022(5):150-151.

【通聯編輯:王力】

收稿日期:2022-08-09

作者簡介:韓佳辰(2004—) ,女,河南滑縣人,本科在讀,主要研究方向為計算機應用及自動化技術;白君芬(1974—) ,女,河北石家莊人,副教授,碩士,主要研究方向為網絡安全及計算機類教育。

猜你喜歡
腳本架構
酒駕
基于FPGA的RNN硬件加速架構
功能架構在電子電氣架構開發中的應用和實踐
數據庫系統shell腳本應用
快樂假期
LSN DCI EVPN VxLAN組網架構研究及實現
一種基于FPGA+ARM架構的μPMU實現
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合