本文講的是<b>CoreOS Fest 系列之第二篇: Systemd、Go、Calico、Sysdig</b>,【編者的話】在 CoreOS Fest 第二天的會議中,演講者展示了多個開源項目和工具,包括 Systemd 和 CoreOS 、 Go 語言和容器、 Calico 項目、 Sysdig 等。
不僅是會議的内容吸引人,更引人注意的是,在過去的一年多時間内,社群開發了大量支援 Linux 容器的新工具。在 Linux 領域,如此快的發展速度,前所未見。在以容器為核心的新型基礎設中, systemd 是一個基礎元件,它是 Linux 的新型初始化系統,支援容器的開箱即用。
他首先指出,這次并不是代表 Red Hat 官方的報告。然後,他花了很多時間介紹 Red Hat 的 systemd 團隊。這個團隊并不是一個産品團隊,他說:「我們自認為是一個研究部門,而不是一個産品團隊」。
這種表态解釋了 systemd 選擇某些技術的原因,例如,選擇 Btrfs 作為 systemd-nspawn 模闆和容器的主要檔案系統。「人們都說 btrfs 是一個不穩定的檔案系統。但是, btrfs 項目團隊正在努力解決該檔案系統存在的基礎性問題」,他說。而且,在一個不穩定的檔案系統上運作容器,這是可以接受的,因為資料被儲存在外部的卷上,而不是在容器内(譯者注:即沒有儲存在這個不穩定的檔案系統上)。
在 systemd 中,管理容器的主要工具是 systemd-machined 及其指令行工具 machinectl 。有了它,使用者能夠列出所有的容器,啟動和關停容器,甚至互動登入到容器中。 systemd-machined 實際上是容器的注冊中心,任何容器都可以注冊。 systemd-machined 配合 systemd ,執行 <code>systemd-run -M</code> ,就能在容器中執行任何指令。 systemd-machined 運作的容器,會出現在 <code>ps</code> 指令的清單或者 GNOME 的系統監控器中。
Go 語言始于 2007 年 Google 公司的一個内部項目,共有 3 個開發者。現在, go 語言項目的貢獻者已經超過 500 人。 Go 是一個使用 BSD 許可的開源項目,但是仍然由 Google 公司把持,所有的貢獻者都需要與 Google 公司簽署貢獻者許可協定( Contributor License Agreement, CLA )。 Go 逐漸成為實作可擴充基礎設施的「自動化語言」。之前, 人們已經普遍使用 go 語言實作網絡代理、雲伺服器管理工具、分布式搜尋引擎和備援資料存儲。很自然地,人們繼續選擇 go 實作容器工具應用。
由于 CoreOS 與 go 的緊密聯系, Brad Fitzpatrick 的報告主題是 go 語言的持續建構基礎設施。他是 LiveJournal, memcached 和 OpenID 的開發者,現在是 Google 公司 go 語言團隊的一員。他展示了在很多平台上測試 go 語言的自動建構平台。建構平台剛開始時是一個 Google 應用引擎( Google Application Engine )應用,加上桌子上一排的移動裝置,然後發展成今天這個樣子。他還講述了持續建構基礎設施的曆史和工作機制。
「還記得三層架構嗎?」 Curtis 抱怨說,「管理者現在還是這樣管理網絡。第一層是外部網絡,中間是 web 資源所在的隔離區( demilitarized zone, DMZ),最後是資料層,要求保證最嚴格的安全」。
編排好網絡中的容器,運作微服務,這種模式打破了三層模型。首先,微服務是根據服務的提供者而不是服務的安全特征劃分的;其次,編排架構假設資料中心網絡是無區分的,也不支援安全分層的概念;最重要的是,你得為幾百個微服務定義安全政策和區域,這不像以前,網絡管理者隻要設定幾十個政策和區域就行了。 Curtis 說,「這就像是一個動物園,所有圍牆都被推到了」。
然而,就安全而言,微服務也為帶來了機會。每個微服務隻做一件事情,它的安全需求也相對簡單。是以,可以更細緻地劃分服務,又不增加整體的複雜性, calico 就是這麼做的。
Calico 為每個容器或者虛拟機配置設定一個獨立的 IP 位址,然後在每台實體主機上定義包含這些 IP 位址的 iptables 規則,實作了防火牆功能。 Calico 用儲存在 etcd 的标簽定義每個服務,用一個 JSON 格式的配置檔案定義允許通路目前服務的其它服務,以及這個服務是否可通過 Internet 通路。
原文釋出時間為: 2015-06-19
本文作者:bnuhero
本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。
原文标題:CoreOS Fest 系列之第二篇: Systemd、Go、Calico、Sysdig