当前位置: 首页 > 网络应用技术

触摸您以教您使用Kubebuilder开发操作员

时间:2023-03-08 21:50:15 网络应用技术

  假设NGINX QPS(一秒钟内处理的请求数)为500。如果QPS访问对外部访问的访问达到600,为了确保服务的质量,必须扩展NGINX以共享请求。

  在Kubernetes环境中,如果外部请求超过单个POD的处理极限,我们可以增加吊舱数量以实现水平膨胀。

  假设我们的服务是无国籍服务,让我们使用KubeBuilder开发操作员来模拟我们提到的场景。

  在开发操作员之前,我们需要提前考虑CRD资源对象。例如,我们希望通过以下CR资源创建运营商:

  首先,初始化项目。这是Kubebuilder来建造我们的脚手架:

  创建脚手架后,然后定义资源API:

  这样,我们项目的初始化就完成了。总体代码结构如下:

  然后根据我们上面设计的ElasticWeb对象编辑操作员的结构。修改文件中的结构和结构。该结构主要用于记录当前群集实际支持的总QP:

  同样,为了打印日志以便我们阅读的方便,我们添加了一种方法:

  请注意,每次修改都完成,您需要执行make命令重新加工代码:

  接下来,我们可以转到控制器的和解功能以实现自己的业务逻辑。

  首先创建目录控制器下方的文件,以根据我们的对象生成相应的和平与更新状态。

  尽管上面有许多代码,但逻辑非常简单。它基于我们的ElasticWeb来构建和资源对象。结构完成后,当我们创建ElasticWeb时,我们可以在控制器的调和函数中进行逻辑处理。

  同时,我们需要陈述添加的RBAC语句,并将RBAC语句添加到“和解”函数注释中。

  接下来,我们首先安装CRD对象,让我们的kubernetes系统识别我们的elasitcweb对象:

  然后运行控制器:

  控制器成功启动后,我们可以创建CR,将示例CR资源列表修改为以下YAML:

  此外,打开终端以创建上述资源对象:

  创建完成后,我们可以查看相应的ElasticWeb对象:

  信件还将自动创建部署和服务资源列表:

  现在,我们需要在部署上观看。服务的创建包含在创建部署的逻辑中,因此部署更改,我们需要重新调整。当然,我们只需要手表才能由ElasticWeb.update在文件中的功能:

  我们发现在日志打印日志中,工人计数为1。此时,我们还可以更新该功能:

  同样,我们发现输出日志不够直观。主函数中有一个ZAP,我们可以在此处设置它:

  我们的弹性实例,我们可以使用kubectl命令列出此对象:

  但是此信息太简单了。如果我们想查看此对象正在使用的镜像以及部署了多少副本,我们仍然需要检查命令,这太麻烦了。这次,我们可以在CRD定义的结构类型中使用此注释来告诉kubebuilder添加我们需要添加到CRD的信息。添加一排新评论,如下所示:

  有几种不同的评论选择。在这里,我们只使用其中之一:

  添加注释后,我们需要运行该命令以重新生成CRD并安装它,然后我们尝试再次列出CRD。

  您可以看到现在列出的数据有一列数据,但是没有人列出。这是因为当我们添加自定义列时,我们不会显示其他默认列(除外)要显示此列,我们还需要将相应的注释信息添加到ETCDCluster的结构中,如下所示:

  运行命令行并再次检查CRD数据:

  如果我们仍然想获得当前应用程序的状态,我们还可以通过添加相应的信息来添加相应的信息,但是状态数据是由JSONPATH属性获得的。

  如果您认为这里添加了太多信息,如果我们想隐藏一个字段并在需要时显示字段怎么办?

  目前,需要优先属性。如果未配置此属性,则默认值为0,是默认情况显示的数据的列。当使用参数时,将显示。例如,我们向端口添加一个属性:

  重新运行命令后,再次检查CRD:

  有关更多详细信息,请检查CRD文档上的其他ProprinterColumns字段。

  现在,我们已经完成了开发工作,测试工作已在本地完成。目前,我们需要将运营商部署到Kubernetes环境。

  首先,我们需要修改文件,需要添加GO MOD的代理配置:

  下一步是登录到Docker。此处使用的Docker集线器可以直接在命令行中登录。

  着陆成功后,您可以制作镜子。

  请注意,如果您使用的是Mac M1计算机,则需要修改一个小点。

  下一步是建造并将镜子推到镜子仓库:

  推动成功后,可以根据指定的图像将控制器部署到群集:

  同样,可以在此处拉下镜像,可以在此处用于更换。

  您可以直接修改或使用Docker标签重命名。

  部署完成后,系统将自动创建名称空间,并且控制器中的所有内容都在此名称空间下。

  最后,如果您想从集群中卸载操作员:它也很简单:

  参考:https://xinchen.blog.csdn.net/article/details/113836090

  原始:https://juejin.cn/post/7099354856078442509