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