一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于容器云自动添加代理的方法与流程

2022-03-23 04:37:35 来源:中国专利 TAG:


1.本发明涉及一种基于容器云自动添加代理的方法,属于云原生技术领域。


背景技术:

2.近年来,云原生技术逐渐升温,很多企业开始了云化转型之路,希望将传统应用迁移至云端。在云原生的技术方案中,应用被放置在一个敏捷的不可变基础设施中运行,使得应用可以完全在不同环境中无缝迁移,目前主流方法通过容器技术来实现。当容器数量庞大且分布在不同的机器时,如何管理大规模的容器便成为问题。为了解决这一问题,kubernetes应运而生,作为一个容器编排系统,其能够持续自动化管理容器化的应用,提高了运维人员的管理效率。
3.边车(sidecar)模式为对现有的服务增加额外功能,这些功能并不会影响业务逻辑,而是起到辅助的作用,例如收集日志、管理文件。将业务逻辑和辅助逻辑拆分成不同的应用,能够降低应用之间的耦合度和业务的复杂性,这是边车模式的优势。在kubernetes(容器云)中,体现在每个pod资源对象都会运行多个容器,这些容器彼此互相通信、共享文件系统,有承载特定业务功能的容器,也有起到辅助功能的容器,后者被称为边车(即一种内部代理)。由于辅助功能是通用的,因此边车可以复用于多个pod资源对象中,导致不同pod资源对象描述文件中边车的信息存在大量重复。运维人员需要在每个pod资源对象描述文件中都手动添加边车的信息,会导致大量的数据冗余,且降低了管理效率。
4.目前,如何解决手动添加大量重复的边车信息所导致的数据冗余、效率低下的问题,成为一个云原生技术领域急需解决的技术难题。


技术实现要素:

5.有鉴于此,本发明的目的是提供一种自动添加边车的方法,以解决运维人员在每个pod资源对象描述文件中都要手动添加大量重复的边车信息,所导致的数据冗余、效率低下的问题。
6.为了达到上述目的,本发明提供了一种基于容器云自动添加代理的方法,包括如下操作步骤:
7.步骤1、创建并初始化自动边车添加器进kubernetes集群;
8.步骤2、所述的自动边车添加器初始化成功后,在kubernetes集群中部署包含边车信息的configmap资源对象,所述的自动边车添加器监控kubernetes中的configmap资源对象,并保存其中包含的边车信息;
9.步骤3、向kubernetes集群创建pod资源对象,在所述pod资源对象持久化到kubernetes集群之前,若所述的自动边车添加器保存了所述pod资源对象指定的边车,则修改该pod资源对象描述文件,向其添加指定的边车信息。
10.所述步骤1进一步包括有:
11.步骤11、为所述自动边车添加器配置tls连接所需的公钥和私钥证书,以及拥有监
控configmap资源对象权限的服务账号即serviceaccount资源对象;
12.步骤12、部署deployment和service资源对象,指定自动边车添加器的参数,启动自动边车添加器服务,所述的自动边车添加器的参数包括:可监控的configmap资源对象需满足的标签键值对、pod资源对象指定添加边车的注解命名空间;
13.步骤13、通过部署mutatingwebhookconfiguration资源对象,配置创建pod资源对象的事件匹配规则、所述自动边车添加器的服务引用、验证所述自动边车添加器服务的tls连接的ca证书。
14.所述步骤2中自动边车添加器监控kubernetes中的configmap资源对象,并保存其中包含的边车信息的具体内容是:
15.所述自动边车添加器监控满足相应标签键值对的configmap资源对象,若其数据满足边车信息的格式,则保存之,并以边车的名字作为边车的唯一标识;边车信息包含如下字段:name、containers、initcontainers、volumes、volumemounts、env、hostaliases、serviceaccountname;其中name字段代表边车的名字,为字符串格式,是必选字段,作为边车的唯一标识;其余字段均为边车的具体信息,均是可选字段;
16.containers字段:边车包含的容器,可包含多个容器,为container v1 core格式;
17.initcontainers字段:边车包含的初始容器,可包含多个初始容器,为container v1 core格式;
18.volumes字段:边车包含的卷,可包含多个卷,为volume v1 core格式;
19.volumemounts字段:边车包含的卷挂载,可包含多个卷挂载,为volumemount v1 core格式;
20.env字段:边车包含的环境变量,可包含多个环境变量,为envvar v1 core格式;
21.hostaliases字段:边车包含的主机别名,可包含多个主机别名,为hostalias v1 core格式;
22.serviceaccountname字段:边车包含的服务账号名,为字符串格式。
23.所述步骤3进一步包括有:
24.步骤31、在pod资源对象描述文件写入指定添加边车的注解键值对,其中键为pod资源对象指定添加边车的注解命名空间即自动边车添加器的预置参数,值为边车的名字;指定添加边车的注解键值对的具体写法为:
25.《pod资源对象指定添加边车的注解命名空间》/request:边车1;边车2;......;边车n注解键值对的值中可指定多个边车,由分号间隔;
26.步骤32、kubernetes集群中原生的mutatingadmissionwebhook控制器识别到pod资源对象的创建事件,调用所述自动边车添加器服务来为pod资源对象添加边车;
27.步骤33、所述自动边车添加器将传来的请求解析成pod资源对象描述文件,识别其指定添加边车的注解键值对,根据边车的名字来查找边车信息,若边车信息存在,则按照规定的字段合并规则将边车信息添加到pod资源对象描述文件,并将修改后的pod资源对象描述文件构造一个响应返回给mutatingadmissionwebhook控制器;自动边车添加器根据指定添加边车注解键值对的值,从左至右的顺序将多个边车信息添加到pod资源对象描述文件;当边车信息成功添加后,所述自动边车添加器会添加一条pod资源对象描述文件的注解键值对,说明边车信息添加成功,具体写法为:
28.《pod资源对象指定添加边车的注解命名空间》/inserted:true。
29.所述步骤33中的字段合并规则是:
30.containers字段:与pod资源对象的spec.containers字段进行合并,如果有重名容器,则报错并放弃合并;
31.initcontainers字段:与pod资源对象的spec.initcontainers字段进行合并,如果有重名初始容器,则报错并放弃合并;
32.volumes字段:与pod资源对象的spec.volumes字段进行合并,如果有重名卷,则报错并放弃合并;
33.volumemounts字段:与pod资源对象的spec.containers[*].volumemounts和spec.initcontainers[*].volumemounts字段分别进行合并,如果有重名卷挂载,则不替换;
[0034]
env字段:与pod资源对象的spec.containers[*].env和spec.initcontainers[*].env字段分别进行合并,如果有重名环境变量,则不替换;
[0035]
hostaliases字段:与pod资源对象的spec.hostaliases字段进行合并,即使有重复的ip字段,也一样合并;
[0036]
serviceaccountname字段:若pod资源对象的spec.serviceaccountname字段为空或为default,则替换之,否则不替换。
[0037]
本发明的有益效果是:本发明基于kubernetes的准入控制机制,创建自动边车添加器,其能够使得在pod资源对象持久化到kubernetes集群之前,根据注解来为pod资源对象添加边车信息,最后添加上边车的pod资源对象会持久化到kubernetes集群并启动,整个过程中运维人员只需在pod资源对象描述文件中写入指定添加边车的注解键值对,无需添加完整的边车信息,从而解决了运维人员在每个pod资源对象描述文件中都要手动添加大量重复的边车信息的问题,方案简单,工作可靠,便于推广和普及应用。
附图说明
[0038]
图1是本发明一种基于容器云自动添加代理的方法的流程示意图;
[0039]
图2是本发明实施例中一种基于容器云自动添加代理的方法的部署图;
[0040]
图3是本发明实施例中边车信息的格式示例。
具体实施方式
[0041]
为使本发明的目的、技术方案和优点更加清楚,下面结合附图,对本发明的具体实施方式进行详细描述。
[0042]
参见图1和图2,本发明提供一种基于容器云自动添加代理的方法,包括如下操作步骤:
[0043]
步骤1、创建并初始化自动边车添加器进kubernetes集群;
[0044]
步骤2、所述的自动边车添加器初始化成功后,在kubernetes集群中部署包含边车信息的configmap资源对象,所述的自动边车添加器监控kubernetes中的configmap资源对象,并保存其中包含的边车信息;
[0045]
步骤3、向kubernetes集群创建pod资源对象,在所述pod资源对象持久化到
kubernetes集群之前,若所述的自动边车添加器保存了所述pod资源对象指定的边车,则修改该pod资源对象描述文件,向其添加指定的边车信息。
[0046]
所述步骤1进一步包括有:
[0047]
步骤11、为所述自动边车添加器配置tls连接所需的公钥和私钥证书,以及拥有监控configmap资源对象权限的服务账号即serviceaccount资源对象;
[0048]
步骤12、部署deployment和service资源对象,指定自动边车添加器的参数,启动自动边车添加器服务,所述的自动边车添加器的参数包括:可监控的configmap资源对象需满足的标签键值对、pod资源对象指定添加边车的注解命名空间;
[0049]
本实施例指定可监控的configmap资源对象需满足的标签键值对:app=sidecar,则满足“app=sidecar”标签键值对的configmap资源对象会被自动边车添加器监控。
[0050]
本实施例指定pod资源对象指定添加边车的注解命名空间:sidecar,则键包含“sidecar”的注解键值对,其值为pod资源对象指定添加的边车名字。
[0051]
步骤13、通过部署mutatingwebhookconfiguration资源对象,配置创建pod资源对象的事件匹配规则、所述自动边车添加器的服务引用、验证所述自动边车添加器服务的tls连接的ca证书。
[0052]
所述步骤2中自动边车添加器监控kubernetes中的configmap资源对象,并保存其中包含的边车信息的具体内容是:
[0053]
所述自动边车添加器监控满足相应标签键值对(自动边车添加器的预置参数)的configmap资源对象,若其数据满足边车信息的格式,则保存之,并以边车的名字作为边车的唯一标识;
[0054]
边车信息的格式示例如图3所示,边车信息包含如下字段:name、containers、initcontainers、volumes、volumemounts、env、hostaliases、serviceaccountname;其中name字段代表边车的名字,为字符串格式,是必选字段,作为边车的唯一标识;其余字段均为边车的具体信息,均是可选字段;
[0055]
containers字段:边车包含的容器,可包含多个容器,为container v1 core格式;
[0056]
initcontainers字段:边车包含的初始容器,可包含多个初始容器,为container v1 core格式;
[0057]
volumes字段:边车包含的卷,可包含多个卷,为volume v1 core格式;
[0058]
volumemounts字段:边车包含的卷挂载,可包含多个卷挂载,为volumemount v1 core格式;
[0059]
env字段:边车包含的环境变量,可包含多个环境变量,为envvar v1 core格式;
[0060]
hostaliases字段:边车包含的主机别名,可包含多个主机别名,为hostalias v1 core格式;
[0061]
serviceaccountname字段:边车包含的服务账号名,为字符串格式。
[0062]
所述步骤3进一步包括有:
[0063]
步骤31、在pod资源对象描述文件写入指定添加边车的注解键值对,其中键为pod资源对象指定添加边车的注解命名空间即自动边车添加器的预置参数,值为边车的名字;指定添加边车的注解键值对的具体写法为:
[0064]
《pod资源对象指定添加边车的注解命名空间》/request:边车1;边车2;......;边
车n注解键值对的值中可指定多个边车,由分号间隔;
[0065]
在本实施例中,注解键值对为:sidecar/request:sidecar1;sidecar2,即指定添加名为sidecar1和sidecar2的边车。
[0066]
步骤32、kubernetes集群中原生的mutatingadmissionwebhook控制器识别到pod资源对象的创建事件,调用所述自动边车添加器服务来为pod资源对象添加边车;
[0067]
步骤33、所述自动边车添加器将传来的请求解析成pod资源对象描述文件,识别其指定添加边车的注解键值对,根据边车的名字来查找边车信息,若边车信息存在,则按照规定的字段合并规则将边车信息添加到pod资源对象描述文件,并将修改后的pod资源对象描述文件构造一个响应返回给mutatingadmissionwebhook控制器;
[0068]
自动边车添加器根据指定添加边车注解键值对的值,从左至右的顺序将多个边车信息添加到pod资源对象描述文件;当边车信息成功添加后,所述自动边车添加器会添加一条pod资源对象描述文件的注解键值对,说明边车信息添加成功,具体写法为:
[0069]
《pod资源对象指定添加边车的注解命名空间》/inserted:true
[0070]
在本实施例中,该注解键值对为:sidecar/inserted:true。
[0071]
所述步骤33中的字段合并规则是:
[0072]
containers字段:与pod资源对象的spec.containers字段进行合并,如果有重名容器,则报错并放弃合并;
[0073]
initcontainers字段:与pod资源对象的spec.initcontainers字段进行合并,如果有重名初始容器,则报错并放弃合并;
[0074]
volumes字段:与pod资源对象的spec.volumes字段进行合并,如果有重名卷,则报错并放弃合并;
[0075]
volumemounts字段:与pod资源对象的spec.containers[*].volumemounts和spec.initcontainers[*].volumemounts字段分别进行合并,如果有重名卷挂载,则不替换;
[0076]
env字段:与pod资源对象的spec.containers[*].env和spec.initcontainers[*].env字段(pod资源对象的每个容器和初始容器的环境变量)分别进行合并,如果有重名环境变量,则不替换;
[0077]
hostaliases字段:与pod资源对象的spec.hostaliases字段进行合并,即使有重复的ip字段,也一样合并;
[0078]
serviceaccountname字段:若pod资源对象的spec.serviceaccountname字段为空或为default,则替换之(pod资源对象中涉及到服务账号的卷和卷挂载也会发生相应替换),否则不替换。
[0079]
发明人对本发明的方法进行了大量实验,实验结果证明本发明的方法有效解决了手动添加大量重复的边车信息所导致的数据冗余、效率低下的问题。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献