從運(yùn)維的角度看CoreOS
CoreOS和自動(dòng)化運(yùn)維
CoreOS是一個(gè)基于Docker的輕量級(jí)容器化Linux發(fā)行版,專為大型數(shù)據(jù)中心而設(shè)計(jì)旨在通過輕量的系統(tǒng)架構(gòu)和靈活的應(yīng)用程序部署能力簡化數(shù)據(jù)中心的維護(hù)成本和復(fù)雜度。CoreOS作為Docker生態(tài)圈中的重要一員,日益得到各大云服務(wù)商的重視,目前已經(jīng)完成了A輪融資,發(fā)展風(fēng)頭正勁, 一流的云服務(wù)商都會(huì)提供對(duì) CoreOS 的支持。
作為國內(nèi)最專業(yè)的OpenStack云服務(wù)商UnitedStack的一名運(yùn)維工程師,我會(huì)更多地從運(yùn)維的角度來看待這個(gè)操作系統(tǒng)。我認(rèn)為,作為一個(gè)工程師來說,理性看待一項(xiàng)技術(shù)非常重要。
判斷一個(gè)服務(wù)器操作系統(tǒng)優(yōu)秀與否,我會(huì)首先看以下方面:
1. 操作系統(tǒng)的服務(wù)管理
服務(wù)管理對(duì)于一個(gè)操作系統(tǒng)來說非常重要,因?yàn)槲覀兩a(chǎn)環(huán)境的操作系統(tǒng)是要跑服務(wù)的,服務(wù)管理的效率直接影響了運(yùn)維的效率。
CoreOS使用了Systemd來管理機(jī)器級(jí)別的服務(wù),Systemd是一個(gè)功能極其強(qiáng)大的工具,別的不多說,直接上圖,配置從冗長的Shell腳本換成了配置文件式的定義。
狀態(tài)所示的內(nèi)容也比用Sysv的系統(tǒng)豐富了很多(注:上半部分是Sysv的服務(wù)管理,下半部分是Systemd的服務(wù)管理)
在以前的操作系統(tǒng)上,只有對(duì)機(jī)器級(jí)別服務(wù)的管理,沒有對(duì)集群級(jí)別的服務(wù)管理。對(duì)集群級(jí)別的服務(wù)管理需要借助第三方工具,比如Puppet和Zabbix。而CoreOS采用了Fleet和Etcd,F(xiàn)leet用于集群服務(wù)管理,etcd用于提供集群服務(wù)狀態(tài)的一致性存儲(chǔ),這無疑是加分項(xiàng)。
2. 操作系統(tǒng)的包管理
當(dāng)我們運(yùn)維大量服務(wù)器的時(shí)候,包管理非常重要,因?yàn)檐浖墓芾碇苯佑绊懥瞬渴穑粋€(gè)方便的包管理會(huì)給運(yùn)維省掉不少事,不用總是讓運(yùn)維打包,運(yùn)維會(huì)感謝你的。
關(guān)于包管理,我的幾個(gè)看法是:
沒有包管理就是最好的包管理,相信運(yùn)維們都被在不同操作系統(tǒng)上打包需要學(xué)習(xí)多套包管理折磨過。
利用Docker Image打包最大的好處在于隔離的Runtime和文件系統(tǒng),各個(gè)服務(wù)之間不容易出現(xiàn)依賴兼容性不一致的情況。
打成Docker Image開發(fā)自己就可以完成,如同Git式的鏡像管理符合開發(fā)人員的思維。
3. 操作系統(tǒng)采用的內(nèi)核
每一個(gè)公司都會(huì)都會(huì)選用不同合適的內(nèi)核,越穩(wěn)定的內(nèi)核越不會(huì)出問題,越新的內(nèi)核支持的特性就越多,所以選擇合適的內(nèi)核非常重要。
CoreOS使用了幾乎是最新的穩(wěn)定版的內(nèi)核,擁有了最多的Feature,在內(nèi)核的穩(wěn)定性上我持保留意見。
4. 操作系統(tǒng)的安全機(jī)制
如果你運(yùn)維的服務(wù)器半夜被入侵一次你就知道安全是多么重要了。
- CoreOS的安全機(jī)制包括:
- 自動(dòng)更新:自動(dòng)更新修復(fù)漏洞一直是運(yùn)維工程師安全法寶之一,CoreOS自動(dòng)更新增加了不少便利。
- usr 目錄只有制度權(quán)限,用戶無法寫數(shù)據(jù)到系統(tǒng)目錄下,這意味著封掉了后門的程序的可乘之機(jī)。
- Docker的默認(rèn)Iptables設(shè)置省去運(yùn)維工程師的Iptables配置工作。
- CoreOS提供的Fleet是一個(gè)集群服務(wù)管理工具,這改變了我們管理服務(wù)的方式:
- 它在機(jī)器和服務(wù)之間構(gòu)建一個(gè)虛擬化層,把服務(wù)按照用戶要求調(diào)度到不同的機(jī)器上。
- 通過ETCD,F(xiàn)leet可以完成對(duì)服務(wù)健康狀態(tài)的管理和監(jiān)控并且根據(jù)這些狀態(tài)來調(diào)度服務(wù)。
采用了Systemd作為機(jī)器層面的服務(wù)管理工具,借助Systemd的Unit配置文件,F(xiàn)leet可以完成集群層面的服務(wù)腳本編寫。
Fleet提供了容災(zāi)機(jī)制,當(dāng)集群中有Worker因?yàn)槟承┰驋斓簦現(xiàn)leet會(huì)把該Worker上的容器調(diào)度到其他可以被調(diào)度的Worker上。
從運(yùn)維角度來看,F(xiàn)leet是一個(gè)相當(dāng)優(yōu)秀的集群服務(wù)管理工具。容災(zāi)機(jī)制,集群狀態(tài)管理,Systemd是它的亮點(diǎn)。
寫在最后的話
如果讀者想試一下CoreOS,可以利用API和Userdata在UOS上創(chuàng)建一個(gè)CoreOS集群把玩一下,試一下CoreOS集群的災(zāi)備機(jī)制,之后的文章會(huì)寫相關(guān)的實(shí)驗(yàn)內(nèi)容。我會(huì)把CoreOS和自動(dòng)化運(yùn)維的專題放到下一篇文章里去。謝謝。