5

使用 Sveltos 进行 Kubernetes 附加组件生命周期管理

 1 year ago
source link: https://www.51cto.com/article/753758.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用 Sveltos 进行 Kubernetes 附加组件生命周期管理

作者:科技狠活与软件技术 2023-05-05 16:32:50
Sveltos 简化了 Kubernetes 附加组件跨集群部署,基于集群运行时自动升级并提供事件驱动的工作流自动化框架。
Sveltos 简化了 Kubernetes 附加组件跨集群部署,基于集群运行时自动升级并提供事件驱动的工作流自动化框架。
e62c65c99ad8b5c9657192261e669146180870.jpg

Kubernetes 本身并不是一个完整的解决方案。要构建生产集群,您需要各种附加组件。如果您要管理多个集群,那不是一件容易的事。

Sveltos是一个开源项目,它提供声明式 API,允许跨多个 Kubernetes 集群部署 Kubernetes 附加组件。Helm 图表和资源 YAML 都可以传递给 Sveltos。

例如,只需发布以下 ClusterProfile 实例就足以在一组托管集群中部署 Kyverno Helm 图表:

c1f632b65267eca487e20929decd89e3758403.jpg

或者,如果您有 Kubernetes 资源 YAML,只需使用数据创建一个 ConfigMap(如果数据是机密的,则为 Secret),然后让 Sveltos 引用这样的 ConfigMap(Secret)实例。

kubectl create configmap contour-gateway --from-file=<File with contour YAML>
629d20a61f217be75a1431687f00bf6da15e57.jpg

让事情变得更复杂的是,有时,您需要部署的附加组件取决于集群运行时状态。

例如,您已经在一组集群中部署了 Calico v3.24。当这些集群升级到 Kubernetes v1.25 时,您希望 Calico 也升级到 v3.25。

如果您正在管理数十个这样的集群,那么在升级 Kubernetes 版本时手动升级 Calico 并不理想。为此,您需要一个自动化解决方案。

e1d48d16116070c600a305d4e22e596b1621e4.jpg

然后简单地创建以下分类器实例:

4565ab493a116ee05b3687a434891365aeafea.jpg

以上分类器实例将让 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。

当托管集群中的事件导致需要部署附加组件时,事情可能会变得更加复杂。例如,每当某个命名空间中的服务被创建时,添加一个 HTTPRoute 以通过网关 API 公开此类服务。

Sveltos Events 是一个用于 Kubernetes 的事件驱动的工作流自动化框架,可帮助您在各种事件上触发 K8s 附加组件部署。

  1. 定义事件是什么(Sveltos 支持 Lua 脚本);
  2. 定义发生此类事件时要部署的附加组件。插件可以表示为模板,Sveltos 将在部署时使用来自托管集群的信息实例化这些插件。
a1f9f7219b4e9d0d0386293eeb70e27efb24c7.jpg

此 EventSource 将事件定义为在命名空间 eng 中创建/删除服务,暴露端口 443 或端口 8443。

当托管集群中发生此类事件时,我们要部署一个 HTTPRoute 实例:

08bc89c48cd02ae2fdd329418108079fe153a8.jpg

如您所见,要部署的内容是在 ConfigMap 中定义的,并以模板的形式表示。

资源包含每个托管集群中与上面定义的 EventSource 匹配的所有服务实例。

责任编辑:华轩 来源: 今日头条

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK