使用Puppet管理Kubernetes配置

HassanTJHM 8年前發布 | 15K 次閱讀

來自: 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中同樣存在,并且目前只有部分能通過原生工具來解決———像管理配置漂移問題、使用一個單獨的、擁有良好精度的變更控制機制和在基礎設施中存在Kubernetes之外的模型等問題。這也變得更加重要,正如在多種多樣的生產環境中部署一樣,會有很多技術是相互支撐的。

    使用Puppet管理Kubernetes

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

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

      這個模塊還沒有安裝或是管理組成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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!