使用Shell-operator轻松创建Kubernetes运营商:一年中的项目进度





Kubernetes运营商是扩展此容器平台功能的便捷机制,理所当然地赢得了运营工程师及其支持者的广泛认可。我们讨论在遥远的2017年如何安排和工作。去年4月,我们提出了开源Shell-operator项目,该项目大大简化了创建Kubernetes运营商的过程。



为此,开发了一个框架,该框架允许您在K8s集群中发生某些事件的情况下运行任意脚本(使用Bash,Python等)。



在过去的时间里,shell操作员已经获得了用户群(请参见本文末尾的详细信息),当然还有新功能。在最近发布之际v1.0.0-beta.11 (有关beta状态,请参见下文),我们决定谈论自发布第一个公开版本以来该项目在其存在期间的发展。



关于设备和用途



但是,让我们首先简要说明一下shell运算符的工作方式以及原则上为什么需要它的原因。



Shell-operator在Kubernetes集群的Pod中运行。它在那里显示为:



  • Go二进制文件,用于订阅K8s API中的事件并启动钩子(为它们提供有关所发生事件的详细信息);
  • 一组挂钩,每个挂钩都是Bash脚本,Python脚本或任何其他可执行文件。


挂钩:



  • 它们自己确定所需的事件和对象。
  • 在K8中发生这些事件时执行必要的操作。


因此,shell运算符是Kubernetes API中的事件与用于处理它们的脚本之间的一层。



图片



为什么根本创建了shell运算符?运算符是Kubernetes中“做正确的事”的标准,但是要完全开发它们(使用适当的SDK在Go中)并不容易。诸如shell-operator这样简单的框架的存在大大降低了进入该区域的门槛,使您能够快速而有效地解决集群中的小操作问题。而且,同样重要的是,以正确的方式进行操作。



我们在谈论什么任务?在项目存储库中可以找到使用shell运算符的现成示例。在我们Flant,我们将其用作图书馆(是的,这也是可能的!)它成为addon-operator的基础,该插件在Kubernetes中管理其他组件。



注意:此开源项目(插件操作员)的公告可在此处找到在“ 扩展和补充Kubernetes报告中,我们详细讨论了其出现的原因,与shell运算符的关系以及操作原理。



现在介绍一下过去一年中介绍给Shell操作程序的主要更改。



重大创新



在shell运算符的第一个版本中,只有一个对象可用于该钩子-与集群中的事件关联的对象。在addon-operator中使用的钩子的演变导致该钩子订阅了一个对象更改,但是调用kubectl以获得其他对象的最新列表为了删除不必要的调用kubectl并由此加快钩子的工作速度,已实现了几种访问当前对象列表的可能性:



  • 同步 +事件模式,当启动时的挂钩接收到实际对象列表时,仅可处理一个对象。默认情况下启用此模式-我们可以说结果类似于operator-sdk 协调循环
  • snapshot', . (Snapshot’ Kubernetes, .)
  • snapshot'. , , , .
  • 也有可能监视资源,但不对资源的变化做出反应,即 “累积快照”。例如,钩子可以对CustomResource中的更改做出反应,并且仍然可以接收实际的ConfigMap对象,而无需进行额外的调用kubectl(请参阅标志executeHookOnSynchronization有关详细信息executeHookOnEvent。)


其他重大创新:



  • 由于在shell运算符中转换为使用动态 Kubernetes 客户端,因此可以订阅任何现有的kind(Kubernetes API中的资源类型),包括定制资源。
  • (. queue). endpoints.
  • .
  • « », namespace’ .
  • scraping' Prometheus'. .
  • , shell.




  • YAML- ( JSON).
  • JSON logrus (. LOG_TYPE ).
  • listen-address hostNetwork: true.
  • rate limit (qps, burst) Kubernetes API.
  • kube-server Kubernetes API.
  • .
  • jqFilter libjq-go, jq.
  • zombie reaper, SIGCHLD -, Bash-. — tini.
  • 已经实现了各种简化,以将shell运算符连接为库。
  • 更新版本kubectl(从1.13到1.17.4),并基于alpine-3.11进行了装配。


现状和计划



Shell-operator项目仍处于beta测试阶段尽管如此,如上所述,我们还是非常频繁地将其用作插件操作员的基础-该工具在许多(100+)K8s集群中不断使用。



为了稳定地将shell运算符作为公共项目发布,我们计划(至少):



  • 添加e2e测试(#63),
  • 实施多架构构建(#184),
  • 将client-go更新到0.18.0,实现context并最终处理client-go(#188)中的对象缓存


社区认可



多年来,我们已经看到了社区对shell操作员的明显兴趣:





我们也很高兴地宣布,在即将于8月举行的虚拟会议KubeCon + CloudNativeCon Europe 2020上,将有关于Shell 操作程序的报告。有关详细信息,请参见活动网站



感谢您对shell运算符的关注!如果您有任何疑问,请在评论中或在tg-channel @kubeoperator中提问



聚苯乙烯



另请参阅我们的博客:






All Articles