自动化运维工具介绍
運維目標有三個階段,第一是追求穩定性,第二是追求標準化,第三是追求自動化。對于第三階段來說,什么是運維自動化呢?簡單地講,運維自動化就是將日常重復性工作按照事先設定好的規則,在一定時間范圍內自動化運行,而不需要人工參與。接下來簡單介紹運維自動化工具,要了解運維平時用到的自動化工具,就需要了解運維人員的日常工作有哪些。
一、運維的日常工作
運維的日常工作可以總結為以下四個部分,分別是:
(1) 系統安裝(OS Provision)
(2) 應用程序配置(Configuration)
(3) 命令執行與控制(Command and Control)
(4) 程序發布(Deployment)
接下來一一拆解。
1.1 系統安裝(OS Provision)(批量系統部署)
運維的工作是運行和維護,那首先就需要有服務器主機。當一批服務器采購回來時,首先要做的是為這批主機安裝操作系統。如果只是為一兩臺主機安裝系統,那還可以使用手動的方式安裝,但如果是安裝一批主機的話那效率就太低了,因此需要有便于同時安裝多臺操作系統的安裝工具,也就是支持批量部署系統操作。批量系統部署有兩種方式,一種是在裸機(bare metal)上使用安裝工具部署系統,另一種是在虛擬機(virtual machine)通過虛擬機實例安裝系統,以下分別介紹這兩種部署方式的安裝工具。
① 在裸機上安裝(bare metal)
在裸機上安裝時使用的安裝工具常用的有 pxe 和 cobbler。
| 安裝工具 | 介紹 |
| pxe | 預執行環境/預引導環境,pxe 技術能在主機未安裝操作系統時,借助于網卡自身的 ROM 中的代碼功能扮演成 DHCP 服務器的客戶端并自己通過網絡獲取一個 IP 地址;還可以扮演成文件服務器的客戶端來獲取 bootloader 程序文件。pxe 的缺陷是只能預引導一種操作系統,例如不能同時預引導 CentOS 6/CentOS 7/ubuntu/... 中的其中兩種操作系統。 |
| cobbler | cobbler 是 pxe 的二次封裝,cobbler 能夠整合多個預引導環境(操作系統環境)到一個鏡面下。使用 cobbler 工具時需要硬件設備支持 pxe 技術。 |
②在虛擬機上安裝(virtual machine)
在虛擬機上安裝就更加方便,需要安裝系統時只需要創建虛擬機實例,然后下載一個模板文件就可以安裝完操作系統了,在這個模板文件包含了操作系統的配置。
1.2 應用程序部署(Configuration)(批量程序部署)
服務器是用來提供服務的,所以為服務器裝完了操作系統后,首先要做的是的部署應用程序并提供服務,這一步驟稱為應用程序部署(Configuration),包括了應用程序的安裝、配置和啟動。在這一步驟中常用的運維工具有 Puppet、Saltstack、Chef、Cfengine、Ansible 等。其中 Puppet 是由 Ruby 研發,SaltStack、Ansible 是由 Python 研發。
其中,Puppet 和 Saltstack 更適用于管理大規模主機的場景,最好是管理的主機數量超過 100 臺,否則難以發揮出 Puppet 和 Saltstack 的優勢,而且可能使用成本大于收益。對于管理小規模主機的場景,則簡單輕量級的 Ansible 更適用。另外,Puppet 學習曲線較陡峭,而 Ansible 入門非常簡單。
這一部分的運維工具都支持冪等性,即前一次命令的執行不會影響后一次命令的執行。
1.3 命令執行與控制(Command and Contorl)(批量執行命令)
在平時的運維工作中,需要手動完成一些管理和控制操作時,可能需要在一批服務器的每臺服務器上都執行一批命令。因此為了簡化運維工作,就有了一些運維工具可以幫助同時控制多臺主機,并在每臺主機上執行運維人員指定的一批命令操作。在這一部分中常用的運維工具有 Fabric、Func 和 Ansible 等。其中 Fabric 是由 Python 開發的輕量級工具。相比于 Fabric,Func 是一個重量級的運維工具。
1.4 程序發布(Deployment)
程序發布,就是在主機上用新版本的程序替換舊版本的程序,簡而言之是給服務程序換版本。在程序發布這一環節上,由于各個公司的應用業務不同,導致程序的發布流程、發布模式和發布過程中需要注意的細節是不一樣的。所以程序發布幾乎沒有一個通用的工具來實現,發布工具基本都是各個公司自行研發的。
1.4.1 程序發布的方式
程序發布的方式可以總結為以下三種。
(1) 手動發布 ==> 人工發布
(2) 通過腳本發布 ==> 使用腳本也可以發布程序,但使用腳本時有以下兩個缺陷。
① 程序環境發生變化時,腳本可能也需要隨之靈活修改。如果腳本沒有修改完善,可能會出現問題。
② 腳本自身能夠提供的功能比較有限。例如在跨主機進行通信時,需要借助于外部服務程序并基于 SSH 協議進行通信,而腳本自身很難開發出基于網絡通信的組件。
(3) 通過發布程序發布 ==> 又稱運維程序,是公司內部專門研發出來的運維框架。
1.4.2 程序發布的三個要求
合格的腳本發布的整個流程需要滿足三個要求,這三個要求可以類比于在飛機上換發動機的場景。這三個要求如下。
(1) 不能影響用戶體驗。
(2) 系統不能停機。
(3) 不能導致系統故障或造成系統完全不可用。
1.4.3 灰度模型
程序發布過程中需要基于灰度模型發布。灰度模型就是讓一批主機下線,其它主機仍然向外提供服務,當這一批下線的主機更換程序版本完畢后,如果沒有問題就開始上線提供服務,接著換另一批主機下線,以此類推。灰度模型有兩種方式:
(1) 基于主機 ==> 例如先讓 20% 的主機下線更換程序,上線后再換另一批 20% 的主機,以此類推。
(2) 基于用戶 ==> 例如部分提供會員服務的網站中,可以在保障會員用戶的用戶體驗、不保障免費用戶體驗的前提下進行程序發布。
1.4.4 程序發布路徑
在程序發布過程中,可以為程序目錄創建一個鏈接目錄,這樣便于管理程序版本。例如,在程序發布前,程序版本是 tuangou-1.1,而程序目錄?/webapps/tuangou-1.1 的鏈接目錄是?/webapps/tuangou。在執行程序版本更換時(假設更換為 tuangou-1.2),只需要將鏈接目錄的鏈接路徑修改為 /webapps/tuangou-1.2 即可。
創建鏈接目錄的好處,是可以方便更換程序版本,并且在高版本程序出現bug時,可以快速“回滾”,把對用戶的影響降到最低。
1.4.5 程序發布流程
程序發布流程可以總結如下。
在調度器上下線一批主機(標記為維護模式) --> 關閉服務 --> 部署新版本 --> 啟動服務 --> 在調度器上啟用這一批主機。
以上在運維日常中提到的運維工具都可以稱為自動化運維工具,而自動化運維工具有 agent 和 agentless 類,接下來分別介紹。
二、運維工具的分類
運維工具根據在被管理端上是否裝有 agent 程序,將運維工具分為 agent 和 agentless 兩種類別。什么是 agent 程序呢?agent 的中文為“代理”之意,對于擁有 agent 程序的運維工具而言,當管理端(管理節點)通過網絡管理被管理的主機時,被管理端主機上需要運行一個代理程序(agent 程序),并以管理員身份運行。當管理端向被管理端發送一個或多個要執行的命令時,被管理端的代理程序(agent 程序)負責代替管理端執行命令(因為 agent 程序是以管理員身份執行,所以以管理員身份代為執行其它命令)。這就是 agent 程序。
所以,運維工具的分類可總結如下。
① agent:在被管理端上裝有管理程序(在管理端上運行)的代理程序(agent 程序,以管理員身份運行),在管理端和被管理端之間基于安全的認證進行通信。常見的擁有 agent 程序的運維工具有 Puppet、Func 等。
② agentless:在被管理端上無需任何配置,由管理端配置好后即可使用。管理端和被管理端之間通常基于 SSH 協議進行通信(基于 OpenSSH),也就是兩者之間的底層通信依賴于系統軟件。雖然基于 SSH 協議進行通信較為簡單,但容易成為安全漏洞(一旦管理端被劫持,則被管理的主機的信息也會遭到泄露)。
轉載于:https://blog.51cto.com/xuweitao/1950210
總結
- 上一篇: 联合国发布净零指南 联想成唯一入选的中国
- 下一篇: 早报:阿里巴巴公布最新财报 劳斯莱斯利润