ysinternals Suite是微軟官方發(fā)布的系統(tǒng)工具包,其中包含數(shù)十款實用的綠色系統(tǒng)工具軟件,個個身懷絕技,是你維護Windows系統(tǒng)不可或缺的好幫手。
最新版Sysinternals Suite工具包包含69款系統(tǒng)工具的32位和64位版本,都是綠色軟件,無需安裝即可使用。把它放在你的U盤里,那就是你的隨身系統(tǒng)工具箱。
Sysinternals Suite工具包內(nèi)的各系統(tǒng)工具簡介
最新版微軟系統(tǒng)工具包Sysinternals Suite下載地址
微軟官網(wǎng)
https://download.sysinternals.com/files/SysinternalsSuite.zip
PS: 如果你想保持Sysinternals Suite工具為最新版本,可以使用PowerShell腳本自動更新Sysinternals Suite系統(tǒng)工具。參考下一篇文章。
Sysinternals Suite工具包更新日志(倒序)
2017年2月17日
更新了7個工具,優(yōu)化了這些工具對Win10創(chuàng)造者更新版的支持。這7個工具是:Sysmon v6、Autoruns v13.7、AccessChk v6.1、Process Monitor v3.32、Process Explorer v16.2、LiveKd v5.61、BgInfo v4.21。
更多深度文章,請關(guān)注云計算頻道:https://yq.aliyun.com/cloud
1.DevOps之基礎(chǔ)設(shè)施即代碼(Infrastracture as Code)
什么是DevOps呢?按照維基百科的定義,DevOps(Development和Operations的組合詞)是一種重視“軟件開發(fā)人員(Dev)”和“IT運維技術(shù)人員(Ops)”之間溝通合作的文化、運動或慣例。透過自動化“軟件交付”和“架構(gòu)變更”的流程,來使得構(gòu)建、測試、發(fā)布軟件能夠更加地快捷、頻繁和可靠。
在缺乏DevOps能力的組織中,開發(fā)與運營之間存在著信息“鴻溝”──例如運營人員要求更好的可靠性和安全性,開發(fā)人員則希望基礎(chǔ)設(shè)施響應(yīng)更快,而業(yè)務(wù)用戶的需求則是更快地將更多的特性發(fā)布給最終用戶使用。這種信息鴻溝就是最常出問題的地方。而DevOps的引入能對產(chǎn)品交付、測試、功能開發(fā)和維護(包括──曾經(jīng)罕見但如今已屢見不鮮的──“熱補丁”)起到意義深遠的影響。
DevOps包含四個核心的部分,文化、自動化、度量和分享,而本文的重點是自動化。自動化的目標是就是將整個交付流程盡其所能的自動化,當然也包含基礎(chǔ)設(shè)施管理的自動化,這也就意味著你的基礎(chǔ)設(shè)施的管理不是通過手工的方式或者執(zhí)行腳本來完成,而在傳統(tǒng)的IT環(huán)境下,基礎(chǔ)的硬件環(huán)境和軟件環(huán)境的設(shè)置作為基礎(chǔ)設(shè)施的關(guān)鍵部分是很難自動化的,但是隨著云計算的興起,通過可以機器處理的定義文件而不是物理硬件配置或使用交互式配置來管理和派生計算基礎(chǔ)設(shè)施(進程,裸機服務(wù)器,虛擬服務(wù)器等)及其配置的過程變得越來越流行,也就是通過代碼來管理基礎(chǔ)設(shè)施,而這就是所謂的基礎(chǔ)設(shè)施即代碼(Infrastracture as Code)簡寫為IaC。
IaC相比傳統(tǒng)的方式,具有以下優(yōu)點:
自服務(wù)性-如果基礎(chǔ)設(shè)施是通過代碼定義的時候,那么整個流程都可以做到自動了,開發(fā)人員在需要的時候就就可以自己發(fā)布,而不必等待運維人員來發(fā)布。
快捷而安全-由于整個部署過種都是自動化的,計算機執(zhí)行的速度比人更快而且更完全。
文檔化-在傳統(tǒng)的方式下,基礎(chǔ)設(shè)施的狀態(tài)只存在于單個系統(tǒng)管理人員頭腦中,而IaC以任何人都可以閱讀的源代碼的方式來保存基礎(chǔ)設(shè)施的狀態(tài),也就說是源代碼具有了文檔的功能。
版本管理-你還可以將你的IaC代碼使用版本控制工具管理起來,也就意味著你的基礎(chǔ)設(shè)施變更歷史是可以追蹤的,這樣當出現(xiàn)問題的時候,就可以通過查找歷史來快速的定位和診斷問題。
可檢驗-因為基礎(chǔ)設(shè)施的狀態(tài)是以代碼的形式管理的,這樣任何變更都可以通過代碼審查或者提前運行測試來檢驗。
可重用-你還可以將你的代碼封裝成模塊,這樣當有不同需求的時候,你就可以組裝不同的模塊來完成你的工作,而不是所有的情況都需要重頭開始。
2.IaC的基石,鏡像制作
隨著越來越多的人認識到IaC的優(yōu)勢,各式各樣的IaC工具被開發(fā)出來,它們分為以下四類:
Ad Hoc Script
配置管理工具
服務(wù)模板工具
編排工具
作為一種最直接的方式,人們使用通用語言編寫各種Ad Hoc的腳本語言來完成基礎(chǔ)設(shè)施的自動化工作,這種方式對于簡單,一次性的工作很方便,但是對于復(fù)雜和長期的項目,你會發(fā)現(xiàn)維護這些腳本是一場惡夢。于是象Chef,Puppet和Ansible等配置管理工具出現(xiàn),它們在通用語言的基礎(chǔ)上定義相應(yīng)的語法規(guī)則來安裝和管理服務(wù)器上的軟件,這些工具定義的代碼和Ad Hoc腳本語言非常相似,但是它們強制要求代碼具有結(jié)構(gòu)化,一致性,可預(yù)測性,文檔化和清晰的參數(shù)命名,而且它們能夠遠程管理大量的服務(wù)器。隨著虛擬化和云計算的興起,Packer,Docker等服務(wù)模板工具出現(xiàn),模板工具的背后是鏡像,相比于啟動大量的服務(wù)器,然后在使用配置管理工具運行同樣代碼來重復(fù)安裝軟件和設(shè)置系統(tǒng),鏡像技術(shù)只需要捕獲一個完整服務(wù)器包含操作系統(tǒng),軟件,文件和配置等經(jīng)檢驗過的狀態(tài)快照,然后通過Terraform等編排工具基于鏡像來快速的創(chuàng)建服務(wù)器,數(shù)據(jù)庫等等,這極大的提高了基礎(chǔ)設(shè)施創(chuàng)建和管理的效率,因此鏡像技術(shù)構(gòu)成了主流云平臺不可缺少的組成部分,而作為基礎(chǔ)設(shè)施創(chuàng)建的第一步,鏡像制作自然而然的構(gòu)成了IaC的基石。
3.鏡像制作的利器Packer
所謂的鏡像,就是一個包含預(yù)先配置好操作系統(tǒng)和預(yù)裝軟件的靜態(tài)單元,通過它可以快速的創(chuàng)建新的虛擬機運行實例,不同的平臺支持不同的鏡像格式,例如AWS的EC2支持AMIs,VMware支持VMDK/VMX,Alicloud的ECS支持RAW和VHD格式等等。各云平臺都提供了大量的基礎(chǔ)鏡像供用戶使用,但是隨著云平臺用戶成熟度的增加,用戶對鏡像個性化的需要越來越強烈,同時出于商業(yè)的考慮,用戶也希望自己的系統(tǒng)具有在不同云平臺之間遷移的能力,當然也包含個性化的鏡像遷移的能力。盡管各大云平臺都提供了WEB界面工具使得用戶可以手工創(chuàng)建自定義鏡像,也開放了相應(yīng)的API使得通過自動化的腳本來創(chuàng)建個性化的自定義鏡像成為可能。但是都存在一定的局限性而難以滿足用戶的最終需求,Packer就在這種背景下誕生了。
3.1 Packer是什么
Packer是一個從單一的模板文件來創(chuàng)建多平臺一致性鏡像的輕量級開源工具,它能夠運行在常用的主流操作系統(tǒng)如Windows、Linux和Mac os上,能夠高效的并行創(chuàng)建多平臺例如AWS、Azure和Alicloud的鏡像,它的目的并不是取代Puppet/Chef等配置管理工具,實際上,當制作鏡像的時候,Packer可以使用Chef或者Puppet等工具來安裝鏡像所需要的軟件。通過Packer自動化的創(chuàng)建各種平臺的鏡像是非常容易的。
使用Packer來創(chuàng)建鏡像有如下優(yōu)點:
基礎(chǔ)設(shè)施部署訊捷:Packer鏡像允許您在幾秒鐘內(nèi)啟動完成配置和已配置的機器,而不是幾分鐘或幾小時。 這不僅有利于生產(chǎn),也有利于開發(fā),因為開發(fā)虛擬機也可以在幾秒鐘內(nèi)啟動,而無需等待通常更長的配置時間。
可移植性:因為Packer為多個平臺創(chuàng)建相同的映像,您可以在Alicloud中運行生產(chǎn),在像OpenStack的私有云中分階段測試,以及在桌面虛擬化解決方案(如VMware或VirtualBox)中開發(fā)。 每個環(huán)境運行相同的機器映像,提供最終的可移植性。
穩(wěn)定性的改進:Packer在構(gòu)建映像時安裝和配置機器的所有軟件。 如果這些腳本中有錯誤,它們將被早期捕獲,而不是在啟動機器后幾分鐘。
更好的可測試性: 在構(gòu)建機器映像之后,可以快速啟動該機器映像,并且通過冒煙測試以驗證鏡像是可以正常工作的。
良好的可擴展性: Packer使用插件機制,可以很方便的根據(jù)需要來擴展功能,并與許多流行的技術(shù)和工具集成。
是HashiCorp公司生態(tài)系統(tǒng)的一部分
3.2 Packer的組成及及原理
Packer包含構(gòu)建器(Builder),(派生器)Provisioner,(后處理器)Post-Processor三個組件,通過JSON格式的模板文件,可以靈活的組合這三種組件并行的、自動化的創(chuàng)建多平臺一致的鏡像文件。為單個平臺生成鏡像的單個任務(wù)稱為構(gòu)建,而單個構(gòu)建的結(jié)果也稱為工件(Artifact),多個構(gòu)建可以并行運行。
Builder又稱構(gòu)建器,能夠為單個平臺創(chuàng)建鏡像。構(gòu)建器讀取一些配置并使用它來運行和生成鏡像。作為構(gòu)建的一部分調(diào)用構(gòu)建器以創(chuàng)建實際生成的鏡像。常見的構(gòu)建器包括VirtualBox,Alicloud ECS和Amazon EC2。構(gòu)建器可以以插件的形式創(chuàng)建并添加到Packer中。
Provisioner(派生器),這一組件在Buider創(chuàng)建的運行的機器中安裝和配置軟件。他們執(zhí)行使鏡像包含有用軟件的主要工作。常見的派生器包括shell腳本,Chef,Puppet等。
Post-Processors(后處理器),它使用構(gòu)建器或另一個后處理器的結(jié)果來創(chuàng)建新工件的過程。例如壓縮后處理器壓縮工件,上傳后處理器上傳工件等。
Packer創(chuàng)建鏡像的原理其實并不復(fù)雜,以阿里云的鏡像創(chuàng)建過程為例:
1.阿里云構(gòu)建器讀取配置文件,根據(jù)配置文件定義,通過阿里云提供的API提交創(chuàng)建相應(yīng)的ECS實例,配置網(wǎng)絡(luò)和安全規(guī)則的請求。
2.阿里云控制系統(tǒng)根據(jù)API請求創(chuàng)建ECS實例,配置好網(wǎng)絡(luò)和安全規(guī)則等等。
3.派生器讀取配置文件,通過SSH或者WINRM等遠程協(xié)議連接上ECS實例,按照模板文件的要求安裝和配置軟件。
4.當ECS實例安裝和配置好所需要的軟件之后,構(gòu)建器發(fā)出捕獲實例狀態(tài)創(chuàng)建鏡像的請求。
5.阿里云控制系統(tǒng)根據(jù)請求創(chuàng)建鏡像,創(chuàng)建過程完成后或者創(chuàng)建的過程中有任何錯誤發(fā)生,構(gòu)建器會根據(jù)配置模板的要求來保留或者清除相應(yīng)的臨時資源。
6.如果配置有后處理器,可以對前面步驟產(chǎn)生的鏡像作進一步的處理,例如通過packer-post-processor-alicloud-import后處理器,可以將本地的鏡像導(dǎo)入到ECS鏡像系統(tǒng)中
在了解了Packer的原理和優(yōu)勢之后,我們就可以通過實踐來學習如何使用它來創(chuàng)建自己的鏡像。
3.3 Packer的安裝
首先從Packer官網(wǎng)(https://www.packer.io/downloads.html)下載對應(yīng)操作系統(tǒng)的安裝包,本文以Mac OS X x64為例,點擊如下圖的官網(wǎng)鏈接(https://releases.hashicorp.com/packer/0.12.3/packe\_0.12.3\_darwin_amd64.zip )下載packer安裝包
然后打開終端,導(dǎo)航到下載目錄下,執(zhí)行如下命令,如果得到如下圖的輸出,packer就安裝好了:
#unzip packer_0.12.3_darwin_amd64.zip#sudo mv packer /usr/local/bin/#packerusage: packer [--version] [--help] <command> [<args>]Available commands are:
由于阿里云的packer插件提交還在流程中,所以還需要從阿里云的開源工具站點(https://github.com/alibaba/opstools)下載阿里云的packer插件(https://github.com/alibaba/packer-provider/releases/download/V1.1/packer-builder-alicloud-ecs_darwin-amd64.tgz),然后執(zhí)行如下命令,如果輸出如下,插件就安裝好了:
#tar -xvf packer-builder-alicloud-ecs_darwin-amd64.tgz#sudo mv bin/packer-builder-alicloud-ecs /usr/local/bin/# ls /usr/local/bin | grep packerpacker packer-builder-alicloud-ecs packer-post-processor-alicloud-import
3.4 Packer實例
下面通過創(chuàng)建一個包含Redis數(shù)據(jù)庫的鏡像的簡單實例來學習如何使用Packer。
1. 首先打開常用的文件編輯器,輸入如下內(nèi)容,將其中<<...>>部分替換成你自己的實際值,并且存儲為alicloud.json模板文件:
{ "builders": [{ "type":"alicloud-ecs", "access_key":"<<Your Access Key>>", "secret_key":"<<Your Secret Key>>", "region":"cn-beijing", "image_name":"packer_basic", "source_image":"centos_7_2_64_40G_base_20170222.vhd", "ssh_username":"root", "instance_type":"ecs.n1.tiny", "io_optimized":"true"
2. 打開命令行終端,輸入如下命令:
# packer build aliclouod.json
3. 十幾分鐘后,你就可以在自定義鏡像列表里看到剛剛創(chuàng)建好的鏡像packer_basic
4.阿里云的Packer插件開發(fā)
阿里云的插件開發(fā)起步較晚,雖然已經(jīng)向官方提交了PR,但是還沒有合并的主流中去,所以目前只能以外掛的插件方式運行,當前已經(jīng)支持從基礎(chǔ)鏡像創(chuàng)建新的自定義鏡像和上傳本地基于KVM創(chuàng)建的鏡像到ECS鏡像列表,現(xiàn)在國內(nèi)對于Packer插件的文檔也比較少,如果讀者需要更詳細的實戰(zhàn)資料,可以參考如下兩篇博客,也歡迎讀者能夠在阿里云Packer官方插件資源庫提出需求或者貢獻力量。
實戰(zhàn)Packer創(chuàng)建chef server鏡像(https://yq.aliyun.com/articles/72043)
Packer創(chuàng)建阿里云本地鏡像(https://yq.aliyun.com/articles/72218)
5. Packer應(yīng)用場景分析
應(yīng)用場景1:
官方提供的基礎(chǔ)鏡像只能提供有限的操作系統(tǒng)版本組合,而有些專有云用戶需要特定版本的操作系統(tǒng)鏡像,通過工單的形式周期過長,用戶難以接受,而由用戶自己制作基礎(chǔ)鏡像的不但技術(shù)要求高,從本地上傳到鏡像列表的操作也很復(fù)雜,用戶很難制作出能夠正常運行的基礎(chǔ)鏡像,而使用packer,其post-processor能夠自動的將本地鏡像上傳到鏡像列表中,通過提供一些基礎(chǔ)模板,用戶只需要修改模板文件的源ISO,就可以創(chuàng)建出指定版本的基礎(chǔ)鏡像,極大的降低了鏡像制作的門檻。
應(yīng)用場景2:
在鏡像市場中有許多第三方鏡像,ISV制作鏡像中包含的內(nèi)容是什么,對阿里云及用戶都是不透明的,我們無法清晰的看到鏡像中是否有隱患或不安全的內(nèi)容,為了確保安全,只能進行大量的安全掃描,一方面,使得ISV發(fā)布鏡像的周期較長,另一方面,通過掃描二進制文件,很難完全避免安全風險。而通過packer模板文件制作的鏡像,我們可以清晰的看到腳本中執(zhí)行的命令,相比二進制文件,安全掃描也容易得多,而且也方便ISV做鏡像的版本管理,以及多平臺的鏡像制作,提高鏡像制作的效率,不需要ISV一遍一遍的手工制作。
應(yīng)用場景3:
在彈性伸縮(ESS)中,鏡像的生成是否方便高效起著重要的作用,當檢測到工作負載達到閥值的時候,需要使用鏡像來生成新的實例,當彈性伸縮的應(yīng)用數(shù)量達到一定規(guī)模的時候,通過手工來創(chuàng)建鏡像是難以接受的。特別是當需要升級應(yīng)用時,如果使用傳統(tǒng)的方式,直接在運行時實例上在線升級應(yīng)用,一方面,在線升級的速度較慢,而且會影響在線用戶的檢驗,另一方面,當出現(xiàn)錯誤的時候,回滾也比較困難,很容易形成較長時間的當機,而采用Packer,結(jié)合Jenkins和Terraform等工具,能夠?qū)?yīng)用的從代碼到鏡像升級,產(chǎn)生更新后實例的過程完全自動化。當Jenkins檢測到有代碼提交時,可以觸發(fā)Packer根據(jù)模板使用更新后代碼創(chuàng)建新的鏡像,然后Jenkins觸發(fā)Terraform來創(chuàng)建新ECS實例,將新實例加入伸縮組,并將舊實例移出伸縮組,這樣就完成了應(yīng)用的更新,當檢測到新代碼出現(xiàn)問題的時候,又可以將舊實例重新加入伸縮組而移除新實例來完成回滾。
6.展望
誠然,引入新的機制,會引入相應(yīng)的學習曲線,對于packer來說,編寫可用的鏡像模板文件不是一件簡單的事情,但是隨著開源的盛行,很多常用的的模板都能夠從github上找到,例如如下資源庫(https://github.com/chef/bento)中就包含大量的模板,當然,由于阿里云的packer插件支持才剛剛起步,所以也歡迎大家以阿里云官方packer插件資源庫(https://github.com/alibaba/packer-provider)來貢獻一份力量。
參考文獻
DevOps https://zh.wikipedia.org/wiki/DevOps
OReilly Terraform Up & Running
https://www.packer.io/docs/