Kubernetes Cluster易于准备且方便吗? 宣布插件操作员



shell操作员之后,我们介绍了他的哥哥-addon-operator 。 这是一个开源项目,用于在Kubernetes集群中安装系统组件,可以将其称为通用词-附加组件。

为什么根本没有添加?


众所周知,Kubernetes并不是一种多合一的成品,并且需要各种添加来构建“成人”集群。 Addon-operator将帮助安装,配置和保持这些附加组件为最新。

同事driusha一份报告中披露了群集中对其他组件的需求 。 简而言之,目前使用Kubernetes的情况是,对于简单的安装,您可以“试玩”现成的组件,对于开发人员和测试,您可以添加Ingress,但是对于完整的安装,您可以说“您的生产已经准备就绪”,您需要添加十几种不同的附加组件:用于监视的内容,用于日志的内容,不要忘记入口和证书管理器,选择节点组,添加网络策略,使用sysctl和pod autoscaler设置进行调试...



与他们合作的具体细节是什么?


如实践所示,这种情况不仅限于一种安装。 为了舒适地使用群集,需要对附加组件进行更新,禁用(从群集中删除),并且您需要在将某些组件安装到生产群集中之前对其进行测试。

那么也许Ansible在这里足够了吗? 可能吧 但是,在一般情况下,如果没有设置,功能完善的添加就不会存在 。 这些设置可能会根据群集选项(aws,gce,azure,bare-metal,do,...)而有所不同。 某些设置无法预先设置-必须从集群中获取。 而且集群不是静态的:对于某些设置,您将必须遵循更改。 这里Ansible已经不见了:我们需要一个驻留在集群中的程序,即 Kubernetes运算符。

那些尝试过运行Shell操作程序的人会说,借助于Shell操作程序的钩子 ,可以完全解决安装和更新加载项以及跟踪设置的任务。 您可以编写一个脚本来执行条件kubectl apply和监视,例如,ConfigMap(将在其中存储设置)。 这大约是在addon-operator中实现的。

在addon-operator中如何组织?


创建新解决方案时,我们遵循以下原则:

  • 附加安装程序必须支持模板和声明性配置 。 我们不执行安装附加组件的魔术脚本。 Addon-operator使用Helm安装附加组件。 要安装,您需要创建一个图表并突出显示将用于配置的值。
  • 设置可以在安装过程生成 ,也可以从集群中获取 ,也可以通过监视集群资源来接收更新 。 可以使用钩子来实现这些操作。
  • 设置可以存储在群集中 。 为了将设置存储在集群中,将创建一个ConfigMap / addon-operator,并且Addon-operator监视此ConfigMap的更改。 Addon-operator允许钩子使用简单约定访问设置。
  • 加法取决于设置 。 如果设置已更改,则Addon-operator会以新值推出Helm-chart。 Helm图表的并集,其值以及我们称为模块的钩子(有关更多详细信息,请参见下文)。
  • 分期 。 没有魔术释放脚本。 更新机制类似于常规应用程序-将加载项和加载项运算符收集到映像中,进行测试并推出。
  • 控制结果 。 Addon-operator可以为Prometheus提供指标。

addon-operator中的addon是什么?


可以将添加项视为可以向群集添加新功能的所有内容。 例如,安装Ingress是附加组件的一个很好的例子。 它可以是任何具有自己的CRD的操作员或控制器:prometheus-operator,cert-manager,kube-controller-manager等。 或一些小的但简化的操作-例如,秘密复印机,将注册表秘密复制到新的名称空间或sysctl调谐器,在新节点上配置sysctl参数。

Addon-operator提供了一些用于实现附加组件的概念:

  • Helm图表用于将各种软件安装到群集中,例如Prometheus,Grafana,nginx-ingress。 如果所需组件具有Helm图表,那么使用Addon-operator进行安装将非常简单。
  • 值的存储 。 舵图通常具有许多不同的设置,这些设置会随着时间而变化。 Addon-operator支持这些设置的存储,并且能够监视它们的更改,以便用新值重置Helm-chart。
  • 挂钩是Addon-operator在事件上运行并访问值存储的可执行文件。 该挂钩可以监视集群中的更改并更新值存储中的值。 即 借助挂钩,您可以通过在群集中进行更改来从群集中收集值,从而在启动时或根据计划或连续发现来进行查找以从群集中收集值。
  • 模块是Helm图表,值存储和挂钩的并集。 可以打开和关闭模块。 禁用模块将删除Helm图表的所有发行版。 模块可以动态打开自己,例如,如果包括了他需要的所有模块,或者发现在挂钩中找到了必要的参数,则可以使用启用了辅助功能的脚本来完成。
  • 全局挂钩 这些是“独立的”钩子,它们不包含在模块中,并可以访问全局值存储,全局值存储区的值可用于模块中的所有钩子。

这些部分如何协同工作? 考虑一下文档中的图片:



两种工作方案:

  1. 全局挂钩由事件触发-例如,当集群中的资源更改时。 该挂钩处理更改并将新值写入全局值存储。 Addon-operator注意到全局存储已更改,并启动了所有模块。 每个模块都使用其挂钩来确定是否需要将其打开并更新其值存储。 如果启用了该模块,则Addon-operator将开始安装Helm-chart。 在这种情况下,Helm图可以访问模块存储和全局存储中的值。
  2. 第二种情况更简单:模块挂钩由事件触发,更改模块值存储中的值。 插件操作员会注意到这一点,并使用更新后的值启动Helm图表。

该插件可以实现为单个挂钩或一个Helm-chart, 甚至实现为多个从属模块 -这取决于集群中安装的组件的复杂性以及所需的配置灵活性。 例如,在存储库( /示例 )中有一个sysctl-tuner附加组件,该附加组件既可以实现为带有钩子和Helm图表的简单模块,又可以使用值存储来实现,这使得可以通过编辑ConfigMap添加设置。

更新投放


关于Addon-operator安装的组件更新的组织结构的几句话。

要在集群中运行Addon-operator,您需要钩子和头盔图表文件的形式收集带有附加内容的映像 ,添加addon-operator二进制文件以及钩子所需的所有内容: bashkubectljqpython等。 此外,可以将该映像作为常规应用程序部署到群集中,并且很可能您将希望组织此或该标记方案。 如果群集很少,则与应用程序相同的方法可能适用:新发行版,新版本,遍历所有群集并为Pods纠正映像。 但是,在将集群部署到可观数量的情况下,从渠道进行自我更新的概念更适合我们。

我们将其安排如下:

  • 通道本质上是任何人都可以设置的标识符(例如,dev / stage / ea / stable)。
  • 频道名称是图像标签。 当您需要向频道发布更新时,会收集一个新图像并用频道名称标记。
  • 当新图像出现在注册表中时,Addon-operator将重新启动并以新图像开始。

Kubernetes文档中所述,这不是最佳实践。 不推荐这样做,但是我们谈论的是一个驻留在一个集群中常规应用程序 。 在Addon-operator的情况下,应用程序是分散在群集中的许多Deployment,并且自我更新非常有帮助,并可以简化生命。

通道有助于测试 :如果有辅助群集,则可以在stage通道上对其进行配置,并在对每个stable通道进行部署之前对其进行滚动更新。 如果ea通道上的集群发生错误,则可以在对该集群的问题进行调查的同时将其切换为stable 。 如果集群从活动支持中退出,它将切换到其“冻结”通道-例如, freeze-2019-03-20

除了更新挂钩和Helm图表外,您可能还需要更新第三方组件 。 例如,您注意到条件节点导出器中存在错误,甚至想出了如何修补它。 然后,我们打开PR,等待新发行版遍历所有群集并增加映像的版本。 为了不无限期等待,您可以在接受PR之前收集您的node-exporter并切换到该节点。

通常,可以在没有Addon-operator的情况下完成此操作,但是使用Addon-operator,可以在一个存储库中看到用于安装node-exporter的模块,您可以保留Dockerfile在此处构建映像,过程中的所有参与者都更容易理解发生...并且如果有多个群集,则测试PR和汇总新版本会变得更加容易!

这种组件更新的组织可以与我们成功合作,但是您可以实现任何其他合适的方案,因为在这种情况下,Addon-operator是一个简单的二进制文件

结论


Addon-operator中实现的原理使您可以建立透明的过程来在集群中创建,测试,安装和更新加载项,类似于开发普通应用程序的过程。

可以将模块(Helm-chart +挂钩)格式的Addon-operator加载项公开。 我们作为Flant公司,计划在夏季以此类补充的形式展示我们的成就。 加入GitHub( shell-operatoraddon-operator )上的开发,尝试根据示例文档进行添加 ,等待Habré和我们的YouTube频道上的新闻!

更新(6月14日) :如果您有会说addon-operator的说英语的同事,则可以在我们在Medium上的博客中找到相应的公告。

聚苯乙烯


另请参阅我们的博客:

Source: https://habr.com/ru/post/zh-CN455543/


All Articles