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