1.本发明涉及容器领域,尤其涉及一种基于注解的k8s与harbor项目一致性控制器。
背景技术:2.kubernetes是一个开源的容器集群管理系统,越来越多的公司将服务迁移至基于kubernetes的容器云平台上,使用它来编排容器化的应用程序。harbor是一个基于rbac的开源的镜像仓库,相比于docker公司开源的镜像仓库,提供了更友好的图形界面与权限管理功能,许多企业会使用harbor作为kubernetes集群的镜像仓库,将服务所使用的容器镜像存储在harbor中。两者都有项目的概念:在kubernetes中通常使用命名空间作为项目,用户自己的服务必须要部署在指定的命名空间中;harbor镜像仓库也有项目,将镜像存储至harbor中时必须要指定项目,但是两套系统的数据并不共享,分别存储在两套不同的数据库中。这就意味需要同步管理kubernetes和harbor两套系统:当用户想要创建一个项目,需要先通过命令行或容器云平台的控制台在kubernetes中创建命名空间,然后再登录harbor的web控制台,手动创建一个项目;如果用户删除了kubernetes中的命名空间,往往也要前往harbor的web控制台删除对应的项目以释放资源空间。目前这些步骤需要管理员手动来操作,不仅繁琐,而且容易遗漏,甚至有可能在命名空间未删除的情况下误删harbor的项目而导致生产事故。
技术实现要素:3.鉴于上述问题,提出了本发明以便提供克服上述问题或者至少部分地解决上述问题的。
4.根据本发明的一个方面,提供了一种基于注解的k8s与harbor项目一致性控制器,所述控制器包括:
5.建立一个部署在容器云平台上的kubernetes控制器应用程序;
6.所述控制器应用程序读取配置文件中的harbor镜像仓库参数;
7.将所述harbor镜像仓库参数与harbor建立连接并监视kubernetes集群中的命名空间资源。
8.可选的,所述控制器还包括:
9.当集群中有命名空间资源创建、修改、删除的命令;
10.获取状态发生改变的命名空间的资源对象;
11.根据所述命名空间的资源对象的注解判断是否创建对应的harbor项目。
12.可选的,所述控制器还包括:
13.当所述控制器检查到命名空间资源对象包含注解;
14.调用harbor接口创建相应的harbor项目;
15.当所述控制器获取所述kubernetes集群中有命名空间资源删除;
16.将自动删除所述harbor项目中关联的项目。
17.本发明提供的一种基于注解的k8s与harbor项目一致性控制器,建立一个部署在容器云平台上的kubernetes控制器应用程序;所述控制器应用程序读取配置文件中的harbor镜像仓库参数;将所述harbor镜像仓库参数与harbor建立连接并监视kubernetes集群中的命名空间资源。能够同步harbor镜像仓库中的项目与kubernetes命名空间生命周期,自动化地根kubernetes需要使用harbor镜像仓库的命名空间在harbor中创建或删除与之关联的项目,降低管理员误操作的几率。
18.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
19.为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
20.图1为本发明实施例提供的创建/删除deployment时由控制器为其同步创建/删除service流程图。
具体实施方式
21.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
22.本发明的说明书实施例和权利要求书及附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元。
23.下面结合附图和实施例,对本发明的技术方案做进一步的详细描述。
24.如图1所示,控制器启动后会持续运行图中的“控制循环”流程。控制器将持续监听其所在的kubernetes集群的命名空间资源对象的变化,具体包括新建,更新,删除。一旦出现某个命名空间资源被用户创建/修改/删除,控制器能够通过informer技术获取到这个状态发生变化的命名空间资源对象。控制器首先将会检查该资源对象是否携带特定的注解,注解就是资源对象名为注解字段中的值,为键值对格式,并且特征字符串是由控制器开发人员自行定义的,如果命名空间资源对象未携带特定的注解,表示用户并不想要为该命名空间关联harbor项目;如果命名空间资源对象携带了特定的注解,则说明用户希望通过控制器来自动管理harbor项目。在命名空间资源对象携带注解的情况下,控制器接着会判断命名空间资源的变化事件,如果该命名空间是新创建的,控制器会调用harbor的项目查询接口查询harbor中是否已存在与该命名空间关联的项目,如果不存在控制器就继续调用harbor的项目创建接口创建一个与该命名空间关联的项目;如果已经存在就无需重复创建与该命名空间关联的项目了。而如果该事件为删除命名空间,控制器会调用harbor的项目查询接口查询harbor中是否已存在与该命名空间关联的项目,如果存在就调用harbor的项
目删除接口删除与之管理的项目;如果不存在也无需调用harbor的项目删除接口删除与之管理的项目了。控制循环将伴随控制器的整个生命周期,只要有命名空间资源对象出现变化,就会触发该流程。
25.环境说明:有个公司购买了我们的kubernetes容器云平台与harbor镜像仓库方案。
26.通过部署服务的控制台部署好kubernetes集群以及容器云平台,部署服务会将该控制器一并部署在kubernetes集群中。部署好harbor镜像仓库。如果用户希望对接容器云平台和harbor镜像仓库,在部署服务web页面填写harbor相关参数即可。当用户通过容器云平台的控制台创建工作空间或者登录至服务器后台使用命令行创建命名空间时,控制器会根据携带的注解自动在harbor中创建与之关联的项目,登录至harbor管理控制台就能看到;当用户通过容器云平台的控制台或者登录至服务器后台使用命令行删除工作空间,控制器也会将与之关联的harbor项目删除,登录至harbor管理控制台能够看到相关项目消失。在容器云平台的控制台中填写harbor的用户名与密码,即可在命名空间中创建的服务启动时从harbor镜像仓库与之关联的项目拉取容器镜像。
27.有益效果:能够同步harbor镜像仓库中的项目与kubernetes命名空间生命周期,自动化地根kubernetes需要使用harbor镜像仓库的命名空间在harbor中创建或删除与之关联的项目,降低管理员误操作的几率。
28.以上的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。