趙春平,苗志鋒
(廣西水利電力職業技術學院,廣西 南寧 530023)
隨著我國進入數字經濟時代,各高校普遍增設云計算技術、大數據技術等新興專業,培養符合產業數字化轉型升級需要的高素質技術技能型人才。而Linux 作為云計算平臺的基石底座,拓展了虛擬化和容器化的計算生態。根據智聯招聘、Boss 直聘等網站數據,云計算和大數據的相關技術技能崗位群中,掌握“Linux 服務器管理和運維”成為一種重要職業技能和任職要求。
高職信息類專業中,“Linux 服務器管理與運維”課程面向服務器領域的多任務場景,如:系統安裝和服務進程管理、服務器部署管理等。為使學習者聚焦任務實施本身,教師需要為每臺主機的每個場景任務提前配置必要的一致性實訓基礎環境。但Ansible 框架更常用于生產環境的自動化部署。對于高職實訓環境的批量自動部署還存在不適應的地方,主要表現在:生產環境部署好后會持續運行,但實訓環境在課后會重置,對于多場景的任務普遍依賴的通用前序任務友好度差和一致性差。學習者重復手動設置,耗時又缺乏成就感,且擠占了課堂寶貴的核心任務時間。因此,迫切需要提供一種批量自動化的部署方式,協助教師根據每次任務場景需要在課前統一推送設置部署。
隨著阿里云等國內公有云計算平臺的興起,國內外針對自動化批量部署的研究和探索成果日益增多。中國移動通信集團信息技術中心的孫翠鋒面向電信云平臺資源池優化,提出基于節點度量和多維參數估計的云環境下云平臺虛擬機批量部署算法,優化了部署模型,提高了云環境下云平臺虛擬機動態尋優、批量轉發轉換和自適應控制能力[1],為實訓室內批量部署提供了虛擬化思路。黃巨濤等[2]針對電力行業信息系統在數據庫和中間件國產化后的運維需求,提出了一種基于Ansible 工具設計電力云平臺的自動化部署系統,改善了大文件傳輸的效率。隋利鋒等[3]針對某地市商業銀行的生產環境中服務器運維場景,提出了運用Ansible 框架,實現Linux 服務器運維任務標準化、模版化和自動化的實踐探索。李湘林等[4]針對各大公司企業對網頁web 框架的批量新增需求,設計了一種基于Ansible 自動化運維系統批量部署LAMP 架構,實現集中控制服務器,運用了智能運維思路來建設維護云中心的體系以滿足很多企業在LAMP 部署上的發展需要。
通過現狀研究分析可以得出:(1)云平臺服務提供商在云服務的資源虛擬化配置模型和部署算法上進行研究和改進;(2)電信、銀行等生產環境信息化程度高、部署運維壓力大的企業是批量自動部署研究和實踐的先行者,在產品選型、部署研究上提供了良好的、可借鑒的實踐方法;(3)批量部署的主要為不同應用需要的Linux 的服務器,輔助部分VRP 的網絡設備,個性定制性強。但針對職業院校實訓教學場景的批量部署研究較少,面向虛擬機的LInux 服務器客戶端實訓主機的批量部署研究較少。
在“Linux 服務器管理”課程的實踐教學環境中,主要是面向實訓環境中的多主機提供一種批量的自動化部署,從而實現主機基礎環境和前序任務的一致性。部署框架Ansible 是企業IT 平臺的自動化部署和運維平臺和工具中的主流選項,它基于Python 開發,采用無侵入方式,提供了一種集成IT 系統的多節點配置管理、遠程執行特定任務的應用部署功能。無侵入式部署能夠簡化運維中的配置管理與流程控制方式,利用推送方式對受控的客戶系統加以配置,幾乎所有配置工作都可在主服務器端完成[4]。用戶可以通過調用內置module 來執行任務和批量部署。它的主要組件如下,框架結構見圖1。

圖1 Ansible 結構
(1)通信連接插件connection plugins:負責Ansible 主控主機和受控端主機信。Ansible 與Windows 通信通過powershell 和winrm 遠程管理服務,與其他系統一般則采用ssh 服務協議。
(2)受控主機清單host inventory:指定操作的主機或主機集合。默認在/etc/ansible/hosts 配置文件里面定義監控的主機范圍。
(3)各種功能模塊modules,模塊是具體負責任務的執行單元。除通信、調度、日志等核心模塊外,可以調用command 模塊,如可以在受控主機上執行shell命令,復制上傳文件,安裝軟件等配置任務;可以通過Python 來實訓自定義功能模塊完成擴展任務。
(4)ad-hoc 執行模式,任務執行只用到單個模塊,無論單臺執行還是多臺批量執行,都可以稱為ad-hoc 模式,相當于在受控主機的bash 中的一條shell 命令。如果任務關聯用到多個模塊,可使用playbook 劇本模式。
(5)playbook 劇本模式,是Ansible 主要管理方式,也是Ansible 功能強大的關鍵所在。playbook 通過YAML 語言任務腳本配置文件,設置受控主機清單,連接登錄方式,在tasks 區塊部分將多個task 集合完成一類功能,來調度相應的module 實現具體運維任務。如Web 服務的安裝部署、數據庫服務器的批量備份等。基本等價于通過組合多條ad-hoc 操作實現的批量處理的配置文件。
以某高職信息技術實訓基地云計算基礎實訓室為例,機房主機數量為50 臺學生用主機和1 臺教師機。安裝方式為在Window 宿主機的VMWare 虛擬機上安裝CentOS7 Linux 服務器操作系統。其中windows 主機稱為宿主機,虛擬機中的Linux 服務器稱為客戶機或受控端主機。教師機的Linux 客戶機作為Ansible 主控端。
Linux 應用軟件安裝方式,優先連接本地軟件源倉庫,在虛擬機本地搭建光盤軟件源倉庫的方式進行。一般不采用直接在線方式,一是官方鏡像默認在國(境)外,上游速率低耗時長;二是實訓室所有主機同時訪問安裝對校園網出口帶寬壓力極大。
假設本實訓室網絡地址段為:192.168.18.0/23。其中,windows 宿主機統一靜態配置192.168.18.0/23 的地址范圍,網關為192.168.18.1/23。Linux 客戶機需要設置2 塊網卡,其中一塊需為“host-only”模式,基于vmnet8 虛擬網卡,與Windows 宿主機實現一對一通信,地址范圍可以設置為192.168.110.X/24。windows宿主機可以通過SSH 客戶端遠程管理和配置服務器。第二塊網卡要選擇“Bridge”橋接模式,并復制宿主機物理網卡的狀態選項。IP 地址范圍與宿主機相同。使得Ansible 主機端能直接與受控主機通信,將指令和配置文件、腳本等發送到受控端執行。為方便區別和快速采集受控主機地址集合,選取192.168.19.0/23 網段作為受控地址范圍,進行手工設置地址。具體主機參數和地址配置見表1。

表1 主機參數和IP 地址配置
Ansible 框架平臺,針對受控主機操作任務的自動化部署,遵循如下步驟實現操作轉換。
(1)任務場景識別。結合課程實踐教學任務,梳理歸納各場景的模塊任務和基礎通用任務。如為受控端主機統一配置光盤鏡像軟件倉庫,為受控端主機的增加用戶和設置權限;批量發送特定配置文件給受控端主機等。
(2)過程分解序化。記錄整理某個場景任務或通用基礎任務,以通用任務——為受控端主機統一配置光盤鏡像軟件倉庫為例,在受控主機端本地shell 完成任務后,記錄所有操作步驟,形成初步的操作流程和可執行腳本。
(3)操作抽象程序化。對單機具體可行的操作腳本,提煉通用型、基礎型操作,形成原子操作,引入變量,形成可執行的程序化描述。同樣以軟件源倉庫為例,主要可以包括目錄創建、文件復制、設備掛載、配置修改、緩存更新等原子操作。
(4)模塊化自動化。結合上述步驟中的各原子操作,對應Ansible 框架中的內置模功能模塊,如shell(執行命令)、copy(復制文件)、mount(掛載設備)等。用yaml 配置文件創建playbook 劇本,列入受控主機清單,有序組合各功能模塊形成tasks 任務序列,在受控主機上批量執行。Ansible 自動部署流程見圖2。

圖2 Ansible自動部署流程示意圖
Ansible 作為主控端,需要通過SSH 協議與受控主機(集合)進行通信連接。需要在配置文件中設置的用戶名和密碼。在實訓環節中,所有受控端主機集合的用戶名和密碼是統一,可以在Ansible 配置文件中統一設置受控端主機(集合)的SSH 遠程登錄名和密碼。設置代碼如下:
為增強通信連接的安全性,為Ansible 通信設置無密互信登錄。無密互信通信原理,在主控端為ssh生成RSA 算法的公鑰、私鑰的秘鑰把文件保存在root用戶主目錄下。用私鑰加密的通信協議數據,可以用成對的公鑰解密。因此需要在主控端將自己的公鑰分發到各受控主機上。
主要步驟為:(1)在Ansible 主控端生成RSA 秘鑰對;(2)配置受控主機集合,設置SSH 登錄用戶名和密碼;(3)利用authorized_key 模塊進行分發。在密碼登錄配置的基礎上,編寫playbook 劇本模式,實現分發的批量操作。劇本內容如下:
在CentOS7 中,采用yum 軟件包管理器對應用軟件和工具庫進行安裝、卸載、升級等管理。yum 安裝時需要從配置啟用的“軟件源倉庫”中拉取軟件包、依賴包進行安裝。軟件源倉庫既包括在線的網絡源倉庫,又可以基于光盤鏡像構建本地軟件源倉庫。
3.4.1 在客戶機本地配置yum 倉庫步驟分解
虛擬機默認連接本地CentOS-DVD.iso 光盤鏡像文件?;谠搃so 文件構建本地軟件源倉庫的核心配置原理為:將軟件源倉庫配置文件的baseurl 參數設置指向到本地光盤鏡像路徑,再有yum 包管理器生成元數據索引,供yum 在安裝、查詢、升級和卸載操作中應用。
任務實施可以包括光盤掛載、配置修改、元數據生成等三大步驟:
(1)光盤掛載。在Linux 中,設備被看作文件進行讀寫處理。光盤鏡像文件要先掛載映射到目錄下,可能被Linux 文件系統識別讀取。因此,在約定的便存儲外設掛載目錄/media 下創建掛載點目錄。將光盤設備文件/dev/sr0 掛載到掛載點目錄文件路徑上,通過掛載點讀取設備文件內容。掛載點命名要求規范,即/media/CentOS,與樣本配置文件中的baseurl 設定保持一致,減少后續配置中出錯的概率。
(2)配置軟件源倉庫。CentOS7 的yum 軟件倉庫配置目錄為/etc/yum.repos.d/,包含有網絡安裝、本地安裝等多種配置文件,對本地光盤鏡像軟件倉庫設置形成干擾。建議將其全部移除備份到其他目錄,如主目錄,只保留CentOS-Media.repo 配置文件,清理不存在的baseurl 路徑,確保[c7-media]倉庫是處于激活狀態。同樣,可以在Ansible 主控端保留正確模版文件,通過復制模塊將其推送分發給受控主機集合。
(3)重新生成元數據索引。當倉庫配置文件變更后,原有的元數據索引文件失效,存在不一致。可通過yum 對原倉庫索引的緩存進行全部清理重構,激活加載新的軟件源倉庫。
全部步驟完成,具體命令操作如下:
3.4.2 轉化并編制Playbook 劇本
對應本地的光盤掛載、配置修改、元數據生成的主要步驟,選取對應的Ansible 中功能模塊進行轉化和序化。
(1)生成掛載點。需要在受控主機上創建目錄,選用shell 模塊執行命令。語法原型為:Ansible host1 -m shell -a 'mkdir -p/media/CentOS'。其中,host1 為受控主機名或集合名。劇本模式中,結合name 和shell組合使用。
(2)掛載設備到掛載點。選用mount 功能模塊,遠程在受控端執行,將/dev/sr0 掛載到/media/CentOS目錄。
(3)清空倉庫配置目錄。選用shell 模塊執行mv命令。
(4)分發配置模版。除通過shell 模塊在各受控端主機一一修改配置文件外,更便捷的方式,是在Ansible 主控端準備一份已修改好的配置模塊文件,直接負責分發。采用copy 模塊來將源配置文件,統一發送到受控主機上指定目錄下。
(5)更新元數據索引。選用shell 模塊執行yum 組合命令?;蚩梢赃x用yum_repository 模塊,直接在線設置軟件源倉庫配置。
(6)列出受控主機集合。修改/etc/Ansible/hosts 文件。
本任務的playbook 劇本文件主要內容如下:
通過在Linux 課程實踐教學中,引入Ansible 自動部署框架,在課前為各任務場景批量執行命令、統一分發配置文件等,減少了學習者枯燥重復操作準備環節,為每臺主機配置有相同的條件和一致性的環境,使得學習者聚集到教學重點和難點,批量統一部署可以推廣應用到實踐考核基礎環境準備。兼顧了實訓管理員的初始實訓環境和教師的場景任務基礎環境的布置。同樣對于其他基于Linux 服務器的課程具有一定的借鑒意義。但如何將其用于其他系統,尤其是蘋果實訓機房的主機批量部署,目前還缺乏深入的研究,需要在后續研究計劃中進行實踐和研究。