原生雲計算:你所不知道的 Kubernetes 特性和工具
開放容器計劃(OCI)和原生雲計算基金會(CNCF)的代表說,Kubernetes 和容器可以在降低程序員和系統管理成本的同時加速部署進程,從被忽視的 Kubernetes 特性(比如命令空間)開始,去利用 Kubernetes 和它的相關工具運行一個原生雲架構。
Kubernetes 不止是一個雲容器管理器。正如 Steve Pousty,他是 Red Hat 支持的 OpenShift 的首席開發者,在 Linux 基金會的開源峰會上的講演中解釋的那樣,Kubernetes 提供了一個 「使用容器進行原生雲計算的通用操作平台」。
Pousty 的意思是什麼?先讓我們複習一下基礎知識。
開源容器計劃(OCI)和 原生雲計算基金會 (CNCF)的執行董事 Chris Aniszczyk 的解釋是,「原生雲計算使用開源軟體棧將應用程序部署為微服務,打包每一個部分到其容器中,並且動態地編排這些容器以優化資源使用」。Kubernetes 一直在關注著原生雲計算的最新要素。這將最終將導致 IT 中很大的一部分發生轉變,如從伺服器到虛擬機,從 構建包 到現在的 容器。
會議主持人表示,數據中心的演變將節省相當可觀的成本,部分原因是它需要更少的專職員工。例如,據 Aniszczyk 說,通過使用 Kubernetes,谷歌每 10000 台機器僅需要一個網站可靠性工程師(LCTT 譯註:即 SRE)。
實際上,系統管理員可以利用新的 Kubernetes 相關的工具的優勢,並了解那些被低估的功能。
構建一個原生雲平台
Pousty 解釋說,「對於 Red Hat 來說,Kubernetes 是雲 Linux 的內核。它是每個人都可以構建於其上的基礎設施」。
例如,假如你在一個容器鏡像中有一個應用程序。你怎麼知道它是安全的呢? Red Hat 和其它的公司使用 OpenSCAP,它是基於 安全內容自動化協議 (SCAP)的,是使用標準化的方式表達和操作安全數據的一個規範。OpenSCAP 項目提供了一個開源的強化指南和配置基準。選擇一個合適的安全策略,然後,使用 OpenSCAP 認可的安全工具去使某些由 Kubernetes 控制的容器中的程序遵守這些定製的安全標準。
Red Hat 將使用 原子掃描 來自動處理這個過程;它藉助 OpenSCAP 提供者 來掃描容器鏡像中已知的安全漏洞和策略配置問題。原子掃描會以只讀方式載入文件系統。這些通過掃描的容器,會在一個可寫入的目錄存放掃描器的輸出。
Pousty 指出,這種方法有幾個好處,主要是,「你可以掃描一個容器鏡像而不用實際運行它」。因此,如果在容器中有糟糕的代碼或有缺陷的安全策略,它不會影響到你的系統。
原子掃描比手動運行 OpenSCAP 快很多。 因為容器從啟用到消毀可能就在幾分鐘或幾小時內,原子掃描允許 Kubernetes 用戶在(很快的)容器生命期間保持容器安全,而不是在更緩慢的系統管理時間跨度里進行。
關於工具
幫助系統管理員和 DevOps 管理大部分 Kubernetes 操作的另一個工具是 CRI-O。這是一個基於 OCI 實現的 Kubernetes 容器運行時介面。CRI-O 是一個守護進程, Kubernetes 可以用於運行存儲在 Docker 倉庫中的容器鏡像,Dan Walsh 解釋說,他是 Red Hat 的顧問工程師和 SELinux 項目領導者。它允許你直接從 Kubernetes 中啟動容器鏡像,而不用花費時間和 CPU 處理時間在 Docker 引擎 上啟動。並且它的鏡像格式是與容器無關的。
在 Kubernetes 中, kubelet 管理 pod(容器集群)。使用 CRI-O,Kubernetes 及其 kubelet 可以管理容器的整個生命周期。這個工具也不是和 Docker 鏡像捆綁在一起的。你也可以使用新的 OCI 鏡像格式 和 CoreOS 的 rkt 容器鏡像。
同時,這些工具正在成為一個 Kubernetes 棧:編排系統、容器運行時介面 (CRI)和 CRI-O。Kubernetes 首席工程師 Kelsey Hightower 說,「我們實際上不需要這麼多的容器運行時——無論它是 Docker 還是 rkt。只需要給我們一個到內核的 API 就行」,這個結果是這些技術人員的承諾,是推動容器比以往更快發展的強大動力。
Kubernetes 也可以加速構建容器鏡像。目前為止,有三種方法來構建容器。第一種方法是通過一個 Docker 或者 CoreOS 去構建容器。第二種方法是注入定製代碼到一個預構建鏡像中。最後一種方法是, 資產生成管道 使用容器去編譯那些 資產 ,然後其被包含到使用 Docker 的 多階段構建 所構建的隨後鏡像中。
現在,還有一個 Kubernetes 原生的方法:Red Hat 的 Buildah, 這是一個腳本化的 shell 工具 用於快速、高效地構建 OCI 兼容的鏡像和容器。Buildah 降低了容器環境的學習曲線,簡化了創建、構建和更新鏡像的難度。Pousty 說。你可以使用它和 Kubernetes 一起基於應用程序的調用來自動創建和使用容器。Buildah 也更節省系統資源,因為它不需要容器運行時守護進程。
因此,比起真實地引導一個容器和在容器內按步驟操作,Pousty 說,「掛載該文件系統,就如同它是一個常規的文件系統一樣做一些正常操作,並且在最後提交」。
這意味著你可以從一個倉庫中拉取一個鏡像,創建它所匹配的容器,並且優化它。然後,你可以使用 Kubernetes 中的 Buildah 在你需要時去創建一個新的運行鏡像。最終結果是,他說,運行 Kubernetes 管理的容器化應用程序比以往速度更快,需要的資源更少。
你所不知道的 Kubernetes 擁有的特性
你不需要在其它地方尋找工具。Kubernetes 有幾個被低估的特性。
根據谷歌雲全球產品經理 Allan Naim 的說法,其中一個是 Kubernetes 命名空間。Naim 在開源峰會上談及 「Kubernetes 最佳實踐」,他說,「很少有人使用命名空間,這是一個失誤。」
「命名空間是將一個單個的 Kubernetes 集群分成多個虛擬集群的方法」,Naim 說。例如,「你可以認為命名空間就是 姓氏 」,因此,假如說 「Simth」 用來標識一個家族,如果有個成員 Steve Smith,他的名字就是 「Steve」,但是,家族範圍之外的,它就是 「Steve Smith」 或稱 「來自 Chicago 的 Steve Smith」。
嚴格來說,「命名空間是一個邏輯分區技術,它允許一個 Kubernetes 集群被多個用戶、用戶團隊或者一個用戶的多個不能混淆的應用程序所使用。Naim 解釋說,「每個用戶、用戶團隊、或者應用程序都可以存在於它的命名空間中,與集群中的其他用戶是隔離的,並且可以像你是這個集群的唯一用戶一樣操作它。」
Practically 說,你可以使用命名空間去構建一個企業的多個業務/技術的實體進入 Kubernetes。例如,雲架構可以通過映射產品、地點、團隊和成本中心為命名空間,從而定義公司的命名空間策略。
Naim 建議的另外的方法是,去使用命名空間將軟體開發 流程 劃分到分離的命名空間中,如測試、質量保證、 預演 和成品等常見階段。或者命名空間也可以用於管理單獨的客戶。例如,你可以為每個客戶、客戶項目、或者客戶業務單元去創建一個單獨的命名空間。它可以更容易地區分項目,避免重用相同名字的資源。
然而,Kubernetes 現在還沒有提供一個跨命名空間訪問的控制機制。因此,Naim 建議你不要使用這種方法去對外公開程序。還要注意的是,命名空間也不是一個管理的「萬能葯」。例如,你不能將命名空間嵌套在另一個命名空間中。另外,也沒有跨命名空間的強制安全機制。
儘管如此,小心地使用命名空間,還是很有用的。
以人為中心的建議
從談論較深奧的技術換到項目管理。Pousty 建議,在轉移到原生雲和微服務架構時,在你的團隊中要有一個微服務操作人員。「如果你去做微服務,你的團隊最終做的就是 Ops-y。並且,不去使用已經知道這種操作的人是愚蠢的行為」,他說。「你需要一個正確的團隊核心能力。我不想開發人員重新打造運維的輪子」。
而是,將你的工作流徹底地改造成一個能夠使用容器和雲的過程,對此,Kubernetes 是很適用的。
使用 Kubernetes 的原生雲計算:領導者的課程
- 迅速擴大的原生雲生態系統。尋找可以擴展你使用容器的方法的工具。
- 探索鮮為人知的 Kubernetes 特性,如命名空間。它們可以改善你的組織和自動化程度。
- 確保部署到容器的開發團隊有一個 Ops 人員參與。否則,衝突將不可避免。
作者簡介:
Steven J. Vaughan-Nichols, Vaughan-Nichols & Associates 的 CEO
Steven J. Vaughan-Nichols,即 sjvn,是一個技術方面的作家,從 CP/M-80 還是前沿技術、PC 操作系統、300bps 是非常快的網際網路連接、WordStar 是最先進的文字處理程序的那個時候開始,一直從事於商業技術的寫作,而且喜歡它。他的作品已經發布在了從高科技出版物(IEEE Computer、ACM Network、 Byte)到商業出版物(eWEEK、 InformationWeek、ZDNet),從大眾科技(Computer Shopper、PC Magazine、PC World)再到主流出版商(Washington Post、San Francisco Chronicle、BusinessWeek) 等媒體之上。
via: https://insights.hpe.com/articles/how-to-implement-cloud-native-computing-with-kubernetes-1710.html
作者:Steven J. Vaughan-Nichols 譯者:qhwdw 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive