這篇文章已超過一年。較舊的文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
使用 Puppet 管理 Kubernetes Pod、服務和副本控制器
熟悉 Puppet 的人可能已使用它來管理主機電腦上的檔案、套件和使用者。但 Puppet 首先是一個配置管理工具,而配置管理是一個比僅管理主機層級資源更廣泛的領域。配置管理的一個好的定義是,它旨在解決四個相關問題:識別、控制、狀態會計以及驗證與稽核。這些問題存在於任何複雜系統的運作中,而透過新的 Puppet Kubernetes 模組,我們開始研究如何為 Kubernetes 解決這些問題。
Puppet Kubernetes 模組
Puppet Kubernetes 模組目前假設您已擁有一個 啟動並執行 的 Kubernetes 叢集;它的重點是管理 Kubernetes 中的資源,例如 Pod、副本控制器和服務,而不是(目前尚未)管理底層的 kubelet 或 etcd 服務。以下是一小段程式碼片段,以 Puppet 的 DSL 描述一個 Pod。
kubernetes_pod { 'sample-pod':
ensure => present,
metadata => {
namespace => 'default',
},
spec => {
containers => [{
name => 'container-name',
image => 'nginx',
}]
},
}
如果您熟悉 YAML 檔案格式,您可能會立即認出其結構。該介面有意與之相同,以協助不同格式之間的轉換 — 事實上,為此提供支援的程式碼是從 Kubernetes API Swagger 定義自動產生的。執行上述程式碼(假設我們將其另存為 pod.pp)非常簡單,如下所示
puppet apply pod.pp
身份驗證使用標準 kubectl 配置檔案。您可以在模組的 README 中找到完整的安裝說明。
Kubernetes 具有多種資源,從 Pod 和服務到副本控制器和服務帳戶。您可以在 Puppet 中的 Kubernetes guestbook 範例 文章中看到模組管理這些資源的範例。這示範了如何轉換標準的 hello-world 範例以使用 Puppet 程式碼。
然而,使用 Puppet 的主要優勢之一是,您可以為 Kubernetes 管理的應用程式建立自己的更高階且更特定於業務的介面。例如,對於 guestbook,您可以建立如下內容
guestbook { 'myguestbook':
redis_slave_replicas => 2,
frontend_replicas => 3,
redis_master_image => 'redis',
redis_slave_image => 'gcr.io/google_samples/gb-redisslave:v1',
frontend_image => 'gcr.io/google_samples/gb-frontend:v3',
}
您可以在 Puppet 部落格文章 在 Puppet 中為 Kubernetes 建構您自己的抽象化 中閱讀有關使用 Puppet 的定義類型以及查看更多程式碼範例的資訊。
結論
相較於僅使用標準 YAML 檔案和 kubectl,使用 Puppet 的優勢在於
- 能夠建立您自己的抽象化,以減少重複並製作更高階的使用者介面,例如上述的 guestbook 範例。
- 使用 Puppet 的開發工具來驗證程式碼和編寫單元測試。
- 與其他工具(例如 Puppet Server)整合,以確保您的程式碼模型與叢集的狀態相符,並與 PuppetDB 整合以儲存報告和追蹤變更。
- 能夠針對 Kubernetes API 重複執行相同的程式碼,以偵測任何變更或修正配置漂移。
同樣值得注意的是,大多數大型組織將擁有非常異質的環境,運行各種軟體和作業系統。擁有一個統一這些離散系統的單一工具鏈可以使採用像 Kubernetes 這樣的新技術變得更加容易。
可以肯定地說,Kubernetes 提供了一組極佳的原語,可用於建構雲原生系統。借助 Puppet,您可以解決在生產環境中運行任何複雜系統時出現的一些運營和配置管理問題。如果您試用該模組並想了解未來還希望支援哪些內容,請告訴我們您的想法。