使用Puppet管理Kubernetes配置

GeoRust 10年前發布 | 35K 次閱讀 Puppet 虛擬化 Kubernetes

來自: http://dockone.io/article/1019

Kubernetes是來自谷歌的集群管理(工具),它使容器在一個非常大的基礎設施的部署、管理和擴容變得非常簡單。通過新的Puppet模塊,可以用類Puppet語言為Kubernetes管理Pods,RCs,Services等。

Kubernetes入門

最近的KubeCon大會演示了在很短一段時間內Kubernetes取得的迅速發展,它是Google開源的Linux容器集群管理工具,為企業如何管理其內部基礎設施而構建。Kubernetes旨在通過引入一系列核心基本要素和API來簡化對復雜分布式系統的管理。諸如eBay, SoundCloud和RedHat等許多公司都在討論在他們構建應用,系統和基礎設施時采納這種新的方式。

對Puppet而言,常對管理新的事物感興趣,像對Kubernetes著力于促使集成它精心設計的基本要素和穩健的API。通過新的Kubernetes的Puppet模塊,我們現在可以使用Puppet來管理Kubernetes的資源諸如RCs,Pods和Services這些概念。

配置管理:旁白

當談論到Puppet和Kubernetes時,有效地簡化為更高層次的話題:配置管理。有些人把配置管理(像Puppet這樣的工具)當作管理“host密集”型資源的一種方式,(這里說的host密集型資源指文件,服務,包,用戶和用戶組)。Kubernetes抽象出高層次的基本要素,如Pods和RCs,旨在簡化分布式可伸縮的系統的管理。本文闡述有了這些新的基本要素便不再需要配置管理。

但是配置管理真的是一個非常廣泛的學科,可以追溯到二十世紀五十年代。我最喜歡的對配置管理系統能力的描述來自于Military Handbook配置管理指南MIL-HDBK-61B,中所描述的:

  • 身份識別
  • 控制
  • 狀態統計
  • 校驗和審計

與這些功能相關的問題像Kubernetes系統一樣存在,并且目前只有部分通過原生工具來解決 - 像管理配置漂移的問題,通過使用單獨的良好精度的變更控制機制,和在基礎設施中存在Kubernetes之外的模型等。這也變得更加重要正如在多種多樣的生產環境中部署一樣,存在很多技術相互支撐。

使用Puppet管理Kubernetes

新的Kubernets的Puppet模塊允許你使用Puppet的特定領域語言來管理Kubernetes的資源 - 即RCs,Services和Pods實例。這意味著:

  • 這將會更加快速便捷的管理Kubernetes資源的狀態,使用的源代碼可以和應用代碼一起用版本標記。
  • 通過利用Puppet的內置報告和像PuppetDB這樣的工具可以非常容易獲得Kubernetes集群的真實狀態。
  • 如果你已經使用Puppet,那么Kubernetes的Puppet模塊會提供便捷的方式來管理Kubernetes和你的其他基礎設施。

這個模塊還沒有安裝或是管理組成Kubernetes的各個組件,盡管這個領域已經有非常好的平臺可以提供服務,像OpenShift,Tectonic來自CoreOS或是GCE。

這個模塊允許在Puppet中定義Kubernetes的資源,然后根據需求在一段時間內使用Puppet來創建和更新這些資源。

Puppet代碼的用戶接口便是仿照Kubernetes的YAML格式。這個接口讓用過Kubernetes API的人同樣覺得熟悉,并且同時在Puppet中提供低層構建模塊來創建高層類型。

kubernetes_pod { 'sample-pod':

ensure => present,

metadata => {

namespace => 'default',

},

spec => {

containers => [{

name => 'container-name',

image => 'nginx',

}]

},

}

模塊現在支持以下類型:

* kubernetes_pod

* kubernetes_service

* kubernetes_replication_controller

* kubernetes_node

* kubernetes_event

* kubernetes_endpoint

* kubernetes_namespace

* kubernetes_secret

* kubernetes_resource_quota

* kubernetes_limit_range

* kubernetes_peristent_volume

* kubernetes_persistent_volume_claim

* kubernetes_component_status

* kubernetes_service_account

并非所有這些都能通過API來創建,但是所有均可用于查詢Puppet資源的權利。例如,如果你想知道當前節點是否在Kubernetes集群中,你可以運行:

$ puppet resource kubernetes_node

Puppet資源也可被用來導出正在運行的集群的狀態到一個Puppet清單文件,它可以用作在一段時間內維持集群狀態的基礎。

為什么是Puppet

使用Puppet管理Kubernetes在以下幾個方面超過了基礎的YAML文件:

* Puppet語言支持邏輯和抽象,允許自己定義業務特定的用戶接口。你可以創建高層的types,然后實例化多個副本。

* Puppet的代碼可以被修改,然后Puppet會處理更新相關的資源。你不必描述資源的完整狀態,或通過命令行界面(CLI)手動修改個人資源。

* Puppet有工具驗證代碼和編寫單元測試,以及分發和共享可重用的模塊。

* Puppet支持資源之間存在關系,所以你可以在必要時執行命令。通過新的應用的編排能力,你甚至可以在并沒有使用Kubernetes的部分基礎設施跨節點執行命令。

例子和反饋

在第二篇博文中,我們將展示一個完整的實踐例子,把權威的Kubernetes使用手冊中的的 Hello World例子向Puppet轉變。

讓我們知道你對模塊的想法,告訴我們你想要看到哪些其他的類似的結合或例子。

更多拓展

* Want to manage Kubernetes with Puppet? There's a module for that.

* The Kubernetes Guestbook Example in Puppet

* Building your Own Abstractions for Kubernetes in Puppet

</div>

 本文由用戶 GeoRust 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!