使用Puppet管理Kubernetes配置
來自: http://dockone.io/article/1019
Kubernetes是Google開源的容器集群管理系統,其提供應用部署、維護、 擴展機制等功能,利用Kubernetes能方便地管理跨機器運行容器化的應用。通過新的Puppet模塊,可以用類Puppet語言為Kubernetes管理Pods、RC、Services等。
Kubernetes入門
KubeCon大會上演示了Kubernetes取得的成果,它是Google開源的Linux容器集群管理工具,為企業管理其內部基礎設施而生。Kubernetes旨在通過引入一系列核心基本要素和API來簡化對復雜分布式系統的管理。諸如eBay、SoundCloud和RedHat等公司都在他們構建應用、系統和基礎設施時采納這種新的方式。現在通過新的Kubernetes的Puppet模塊,我們現在可以使用Puppet來管理Kubernetes的資源,諸如RCs、Pods和Services這些概念。
配置管理:旁白
當談論到Puppet和Kubernetes時,可以將之簡化為更高層次的話題——配置管理。有些人把配置管理(像Puppet這樣的工具)當作管理“host密集”型資源的一種方式,(這里說的host密集型資源指文件、服務、包、用戶和用戶組)。Kubernetes抽象出高層次的基本要素,如Pods和RCs,旨在簡化對分布式可伸縮系統的管理。得益于這些新的基本要素,也許我們就不再需要配置管理了。但是配置管理真的是一個非常廣泛的學科,可以追溯到二十世紀五十年代。我最喜歡的對配置管理系統能力的描述是來自于Military Handbook配置管理指南MIL-HDBK-61B,其描述是:
- 身份識別
- 控制
- 狀態統計
- 校驗和審計 </ul>
- 這將會更加快速便捷的管理Kubernetes資源的狀態,使用的源代碼可以和應用代碼一起用版本標記。
- 通過利用Puppet的內置報告和像PuppetDB這樣的工具可以非常容易獲得Kubernetes集群的真實狀態。
- 如果你已經使用Puppet,那么Kubernetes的Puppet模塊會提供便捷的方式來管理Kubernetes和你的其他基礎設施。 </ul>
與這些功能相關的問題在系統中是普遍存在的,在Kubernetes中同樣存在,并且目前只有部分能通過原生工具來解決———像管理配置漂移問題、使用一個單獨的、擁有良好精度的變更控制機制和在基礎設施中存在Kubernetes之外的模型等問題。這也變得更加重要,正如在多種多樣的生產環境中部署一樣,會有很多技術是相互支撐的。
使用Puppet管理Kubernetes
新的Kubernetes的Puppet模塊允許你使用Puppet的特定領域語言來管理Kubernetes的資源 - 即RCs、Services和Pods實例。這意味著:這個模塊還沒有安裝或是管理組成Kubernetes的各個組件,盡管這個領域已經有非常好的平臺可以提供服務,像OpenShift、來自CoreOS的Tectonic或是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 </ul>
并非所有這些都能通過API來創建,但是他們都有查詢Puppet資源的權利。例如,如果你想知道當前節點是否在Kubernetes集群中,你可以運行:
$ puppet resource kubernetes_node
Puppet資源也可被用來導出正在運行的集群的狀態到一個Puppet清單文件,在一段時間內,它可以用作維持集群狀態的基礎。
為什么是Puppet
使用Puppet管理Kubernetes在以下幾個方面超過了基礎的YAML文件:- Puppet語言支持邏輯和抽象,允許自己定義業務特定的用戶接口。你可以創建高層的types,然后實例化多個副本。
- Puppet的代碼可以被修改,然后Puppet會處理更新相關的資源。你不必描述資源的完整狀態,或通過命令行界面(CLI)手動修改個人資源。
- Puppet有工具驗證代碼和編寫單元測試以及分發和共享可重用的模塊。
- Puppet支持資源之間存在關系,所以你可以在必要時執行命令。通過新的應用的編排能力,你甚至可以在并沒有使用Kubernetes的部分基礎設施上跨節點執行命令。 </ul>
原文鏈接:Managing Kubernetes Configuration with Puppet(翻譯:張儀)
本文由用戶 HassanTJHM 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!