使用 Sveltos 進行 Kubernetes 附加組件生命周期管理
Kubernetes 本身并不是一個完整的解決方案。要構建生產(chǎn)集群,您需要各種附加組件。如果您要管理多個集群,那不是一件容易的事。
Sveltos是一個開源項目,它提供聲明式 API,允許跨多個 Kubernetes 集群部署 Kubernetes 附加組件。Helm 圖表和資源 YAML 都可以傳遞給 Sveltos。
例如,只需發(fā)布以下 ClusterProfile 實例就足以在一組托管集群中部署 Kyverno Helm 圖表:
或者,如果您有 Kubernetes 資源 YAML,只需使用數(shù)據(jù)創(chuàng)建一個 ConfigMap(如果數(shù)據(jù)是機密的,則為 Secret),然后讓 Sveltos 引用這樣的 ConfigMap(Secret)實例。
kubectl create configmap contour-gateway --from-file=<File with contour YAML>
讓事情變得更復雜的是,有時,您需要部署的附加組件取決于集群運行時狀態(tài)。
例如,您已經(jīng)在一組集群中部署了 Calico v3.24。當這些集群升級到 Kubernetes v1.25 時,您希望 Calico 也升級到 v3.25。
如果您正在管理數(shù)十個這樣的集群,那么在升級 Kubernetes 版本時手動升級 Calico 并不理想。為此,您需要一個自動化解決方案。
然后簡單地創(chuàng)建以下分類器實例:
以上分類器實例將讓 Sveltos 通過自動添加來管理集群標簽:
- 標簽 kubernetes: v1–24 到任何運行 Kubernetes 版本 v1.24.x 的集群
- 標簽 kubernetes: v1–25 到任何運行 Kubernetes 版本 v1.25.x 的集群。
由于這些標簽和上面的 ClusterProfile 實例:
- calico 版本 v3.24.5 將部署在任何運行 Kubernetes 版本 v1.24.x 的集群中
- calico 版本 v3.25.0 將部署在任何運行 Kubernetes 版本 v1.25.x 的集群中
您無需采取任何行動。隨著集群的升級,Sveltos 也會升級 Calico。
當托管集群中的事件導致需要部署附加組件時,事情可能會變得更加復雜。例如,每當某個命名空間中的服務被創(chuàng)建時,添加一個 HTTPRoute 以通過網(wǎng)關 API 公開此類服務。
Sveltos Events 是一個用于 Kubernetes 的事件驅動的工作流自動化框架,可幫助您在各種事件上觸發(fā) K8s 附加組件部署。
- 定義事件是什么(Sveltos 支持 Lua 腳本);
- 定義發(fā)生此類事件時要部署的附加組件。插件可以表示為模板,Sveltos 將在部署時使用來自托管集群的信息實例化這些插件。
此 EventSource 將事件定義為在命名空間 eng 中創(chuàng)建/刪除服務,暴露端口 443 或端口 8443。
當托管集群中發(fā)生此類事件時,我們要部署一個 HTTPRoute 實例:
如您所見,要部署的內(nèi)容是在 ConfigMap 中定義的,并以模板的形式表示。
資源包含每個托管集群中與上面定義的 EventSource 匹配的所有服務實例。