假设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