CN113885915A - 一种服务更新方法、模块及系统 - Google Patents
一种服务更新方法、模块及系统 Download PDFInfo
- Publication number
- CN113885915A CN113885915A CN202111172667.6A CN202111172667A CN113885915A CN 113885915 A CN113885915 A CN 113885915A CN 202111172667 A CN202111172667 A CN 202111172667A CN 113885915 A CN113885915 A CN 113885915A
- Authority
- CN
- China
- Prior art keywords
- mirror image
- service
- mirror
- warehouse
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000010276 construction Methods 0.000 abstract description 26
- 238000004891 communication Methods 0.000 description 17
- 238000010586 diagram Methods 0.000 description 10
- 238000013515 script Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000008569 process Effects 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000010354 integration Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000007723 transport mechanism Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000008570 general process Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/283—Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种服务更新方法、模块及系统,该方法适于在服务部署服务器上执行,服务部署服务器布置于服务更新系统中,服务更新系统还包括镜像仓库服务器,镜像仓库服务器上搭建有镜像仓库,镜像仓库中存储有多个镜像,该方法包括:按照预设时间间隔获取镜像仓库最新的镜像推送日志;基于最新的镜像推送日志,判断是否有新镜像被推送至镜像仓库;若有新镜像被推送至镜像仓库,则获取新镜像的镜像信息;确定镜像信息对应的服务是否存在;若镜像信息对应的服务存在,则从镜像仓库中拉取新镜像以更新服务。根据本发明的技术方案,将构建镜像与服务更新功能解耦,节省了服务器资源,解决了构建工具宕机时服务无法更新的问题。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种服务更新方法、模块及系统。
背景技术
随着微服务与容器技术的快速发展,越来越多的企业及个人将服务采用容器的方式进行部署。当需要更新服务时,一般流程是先从代码仓库中拉取最新代码,再对代码进行编译并制作镜像,将镜像上传到镜像仓库服务器中,最后在服务部署服务器上,从镜像仓库服务器中拉取该服务最新的镜像并进行部署更新,从而实现服务更新。上述服务更新过程可以通过运维人员手动完成,也可以通过自动化构建工具完成,以减少人工成本。
目前的服务更新方法大多基于Jenkins(一种开源的、提供友好操作界面的持续集成工具)、GitLab CI(GitLab Continuous Integration,一套基于GitLab的持续集成系统)、Travis CI(Travis Continuous Integration,一种开源持续集成服务)等自动化构建工具,通过编写脚本实现,构建镜像与服务自动部署任务都由其完成。在自动部署阶段,自动化构建工具一般会通过SSH(Secure Shell,安全外壳协议)的方式连接服务部署服务器,运行服务更新脚本从而实现服务的自动更新。
然而,以上实现服务自动更新的方法必须依赖于自动化构建工具,自动化构建工具服务一旦宕机,就无法自动更新服务,灵活性较差。
因此,需要一种新的服务更新方法来优化上述处理过程。
发明内容
为此,本发明提供一种服务更新方案,以力图解决或者至少缓解上面存在的问题。
根据本发明的一个方面,提供一种服务更新方法,适于在服务部署服务器上执行,服务部署服务器布置于服务更新系统中,服务更新系统还包括镜像仓库服务器,镜像仓库服务器上搭建有镜像仓库,镜像仓库中存储有多个镜像,该方法包括如下步骤:首先,按照预设时间间隔获取镜像仓库最新的镜像推送日志;基于最新的镜像推送日志,判断是否有新镜像被推送至镜像仓库;若有新镜像被推送至镜像仓库,则获取新镜像的镜像信息;确定镜像信息对应的服务是否存在;若镜像信息对应的服务存在,则从镜像仓库中拉取新镜像以更新服务。
可选地,在根据本发明的服务更新方法中,在按照预设时间间隔获取镜像仓库最新的镜像推送日志的步骤之前,还包括:获取镜像仓库的镜像连接句柄;通过镜像连接句柄,向镜像仓库发送日志请求,以获取最新一条镜像推送日志的时间。
可选地,在根据本发明的服务更新方法中,按照预设时间间隔获取镜像仓库最新的镜像推送日志的步骤,包括:以镜像仓库最新一条镜像推送日志的时间为时间基准,按照预设时间间隔获取镜像仓库最新的镜像推送日志。
可选地,在根据本发明的服务更新方法中,基于最新的镜像推送日志,判断是否有新镜像被推送至镜像仓库的步骤,包括:遍历镜像仓库的日志列表;若日志列表中不包含最新的镜像推送日志,则确定有新镜像被推送至镜像仓库。
可选地,在根据本发明的服务更新方法中,获取新镜像的镜像信息的步骤,包括:从最新的镜像推送日志中获取新镜像的镜像信息,镜像信息包括镜像名称、项目名称和服务名称。
可选地,在根据本发明的服务更新方法中,服务部署服务器上搭建有容器集群,确定镜像信息对应的服务是否存在的步骤包括:根据容器集群的集群连接句柄和镜像信息,向容器集群发送服务查询请求,以查询是否存在镜像信息对应的服务。
可选地,在根据本发明的服务更新方法中,从镜像仓库中拉取新镜像以更新服务的步骤,包括:通过HTTP请求,从容器集群中删除镜像信息对应的服务所关联的容器;从镜像仓库中拉取新镜像,重新创建容器以更新服务。
可选地,在根据本发明的服务更新方法中,服务更新系统还包括自动构建服务器,方法还包括:若自动构建服务器无法完成镜像构建,则通过本地执行构建命令进行手动构建新镜像并上传至镜像仓库。
根据本发明的又一个方面,提供一种服务更新模块,驻留在服务部署服务器中,服务部署服务器布置于服务更新系统中,服务更新系统还包括镜像仓库服务器,镜像仓库服务器上搭建有镜像仓库,镜像仓库中存储有多个镜像,该模块包括第一获取单元、判断单元、第二获取单元、确定单元和更新单元。其中,第一获取单元适于按照预设时间间隔获取镜像仓库最新的镜像推送日志;判断单元适于基于最新的镜像推送日志,判断是否有新镜像被推送至镜像仓库;第二获取单元适于当有新镜像被推送至镜像仓库时,获取新镜像的镜像信息;确定单元适于确定镜像信息对应的服务是否存在;更新单元适于当镜像信息对应的服务存在时,从镜像仓库中拉取新镜像以更新服务。
根据本发明的又一个方面,提供一种服务更新系统,包括:镜像仓库服务器,搭建有镜像仓库,镜像仓库中存储有多个镜像;服务部署服务器,包括如上所述的服务更新模块。
根据本发明的又一个方面,提供了一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,程序指令被配置为适于由至少一个处理器执行,程序指令包括用于执行如上所述的服务更新方法的指令。
根据本发明的又一个方面,提供了一种存储有程序指令的可读存储介质,当程序指令被计算设备读取并执行时,使得计算设备执行如上所述的服务更新方法。
根据本发明的服务更新方案,定期获取镜像仓库最新的镜像推送日志,对其进行分析以判断是否有新镜像被推送至镜像仓库,从而获取需要更新的服务,通过HTTP请求从服务部署服务器上更新服务,而非运行服务更新脚本,将构建工具与服务更新功能解耦,在服务器资源紧张情况下,可完全不使用构建工具,节省了服务器资源。此外,利用手动创建方式,执行构建命令生成镜像,也可实现服务更新,解决了不支持本地触发更新的问题,提高了系统的易用性、灵活性。
在实际应用中,所实现的服务更新模块不仅在构建工具宕机也能正常更新服务,还可采用多实例的部署方式,进一步提高系统稳定性能。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明的一个实施例的服务更新系统100的示意图;
图2示出了根据本发明的又一个实施例的服务更新系统200的示意图;
图3示出了根据本发明的一个实施例的计算设备300的结构框图;
图4示出了根据本发明的一个实施例的服务更新方法400的流程图;以及
图5示出了根据本发明的一个实施例的服务更新模块500的示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明的一个实施例的服务更新系统100的示意图。应当指出,图1的服务更新系统100仅是示例性的,在具体实现中,根据实际情况,服务更新系统100中可以有不同数量的镜像仓库服务器和服务部署服务器,对此并不进行限定。
如图1所示,服务更新系统100包括镜像仓库服务器110和服务部署服务器120,镜像仓库服务器110上搭建有镜像仓库,镜像仓库中存储有多个镜像,服务部署服务器120上部署有服务更新模块(图1中未示出),服务更新模块适于按照预设时间间隔获取镜像仓库最新的镜像推送日志,基于最新的镜像推送日志,判断是否有新镜像被推送至镜像仓库,当有新镜像被推送至镜像仓库时,获取新镜像的镜像信息,确定镜像信息对应的服务是否存在,当镜像信息对应的服务存在时,从镜像仓库中拉取新镜像以更新服务。
图2示出了根据本发明的又一个实施例的服务更新系统200的示意图。应当指出,图2的服务更新系统200仅是示例性的,在具体实现中,根据实际情况,服务更新系统200中可以有不同数量的远程代码仓库服务器、服务部署服务器、镜像仓库服务器、自动构建服务器和本地主机,对此并不进行限定。
如图2所示,服务更新系统200包括远程代码仓库服务器210、服务部署服务器220、镜像仓库服务器230、自动构建服务器240和本地主机250。在搭建服务更新系统200时,需要对其所包括的服务器或主机进行预先配置和环境设置。
根据本发明的一个实施例,在第一主机上搭建GitLab(一个基于网络的分布式版本控制系统Git仓库管理工具)代码仓库,作为远程代码仓库服务器210,用于存储代码。当然,也可以在第一主机上搭建SVN(Subversion,一个开放源代码的版本控制系统)、Gogs(一款自助Git服务)、GitHub(一个面向开源及私有软件项目、只支持Git作为唯一的版本库格式的托管平台)等其他代码仓库,本发明对此并不限制。
代码仓库分为远程仓库和本地仓库,远程仓库一般搭建于服务器上,如远程代码仓库服务器210,而本地仓库可搭建于本地主机上,如本地主机250。本地仓库用于开发者编写代码,然后将新增或修改的代码推送到远程仓库,当远程仓库有其他推送的更新时,本地仓库也可以从远程仓库拉取最新代码。
在第二主机上安装Docker(一个开源的应用容器引擎)环境,作为服务部署服务器220,在此基础上搭建K8s(Kubernetes的简称,开源容器集群管理系统,用于部署、扩展和管理容器化应用程序)集群环境。这里的服务部署服务器220,实际上由多个节点(或称主机)组成,在上面搭建K8s集群,K8s集群通常包括一个Master节点(即调度节点)和多个Node节点(工作节点),服务一般部署在Node节点上。K8s集群中最小的操作单元称为Pod,部署一个服务其实就是创建一个Pod,Pod内部可以包含一个或多个容器,为方便理解,可以直接理解为容器。
服务初次部署在K8s集群时,将Namespace(命名空间)设置为项目名称,Deployment(部署)名称设置为服务名称。Namespace与Deployment是K8s集群中的一种资源,Namespace提供环境隔离的功能,一个项目中所有服务部署在同一个Namespace中,项目可以由很多服务组成,比如某商城项目可以由订单服务、商品服务、用户服务等组成。而创建一个Deployment可以理解为启动了Pod或容器,Deployment名称设置为服务名称,可以利用服务名称找到相应的Pod,后面可以通过K8s集群的API(Application ProgrammingInterface,应用程序接口),根据服务名称删除该Pod和重启服务,以拉取最新镜像进行部署从而达到更新的效果。
此外,上述K8s集群的环境部署,也可以用Docker-Compose(定义和运行多容器Docker应用程序的工具)、Docker-Swarm(Docker官方指定的集群管理工具)等进行替换。
在第三主机上搭建镜像仓库,如可通过Harbor(一种用于存储和分发Docker镜像的企业级注册服务器的解决方案)、Docker Registry(Docker官方提供的搭建私有仓库的镜像注册服务器)搭建相应的镜像仓库,作为镜像仓库服务器230,创建项目用于存储镜像,并添加新建的机器人账号。
例如,搭建Harbor镜像仓库时,通过创建Harbor镜像仓库的新用户来完成机器人账号的新建,在Harbor镜像仓库的Web(World Wide Web,全球广域网)页面上创建一个项目,将机器人账号添加到这个项目下,用机器人账号、密码登录就拥有了这个项目的权限,用户可以通过机器人账号获取镜像仓库日志,也可以将镜像上传到该项目下。
在第四主机上安装有自动化构建工具,如Jenkins、GitLab CI、Travis CI等,作为自动构建服务器240。具体来说,在第四主机上部署Jenkins环境,通过免密登录设置命令ssh-copy-id把第四主机的Jenkins公钥复制到第一主机、第二主机的密码配置文件authorized_keys上,从而实现在第四主机上配置到第一主机、第二主机免密登录,并在远程代码仓库服务器210上的GitLab代码仓库中添加Jenkins公钥。这样一来,远程代码仓库服务器210、服务部署服务器220上可免密登录自动构建服务器240。
在自动构建服务器240上创建一个执行Jenkinsfile(Jenkins流水线定义的文本文件)构建脚本的任务,当该任务被触发后就执行脚本以构建镜像。Jen kinsfile构建脚本会申明构建流程,从GitLab代码仓库拉取最新代码,然后通过代码目录中的Makefile(包含工程文件的编译规则的脚本文件)、Dockerfile(Docker中用来构建镜像的文本文件)创建镜像并命名,命名规则为<镜像仓库地址/项目名称/服务名称:代码分支>,如hub.deepin.com/project1/service1:dev,其中hub.deepin.com为镜像仓库地址,project1为项目名称,service1为服务名称,dev为代码分支。最后,将该镜像上传至Harbor镜像仓库。
远程代码仓库服务器210上添加有Webhook(Web钩子),用于触发自动构建服务器240上的构建任务。由于自动构建服务器240上部署了Jenkins,则对于Jenkins上的每个任务,都会提供一个URL(Uniform Resource Locator,统一资源定位器),直接在远程代码仓库服务器210的GitLab代码仓库上添加Webhook,Webhook地址就是Jenkins任务地址。当提交代码到GitLab代码仓库时,会自动触发Webhook,触发构建镜像。
在服务部署服务器220上部署有服务更新模块(图2中未示出),该模块可采用多实例的部署方式,即在不同的主机上部署相同的该模块服务,以达到高可用目的。该模块定时拉取镜像仓库的镜像推送日志,分析出最新的镜像推送日志,从而获得需要更新的镜像与服务,然后通过HTTP(Hyper Text Transfer Protocol,超文本传输协议)请求从服务部署服务器220上更新服务。服务更新模块的具体功能和实现方案可参见后续对方法400的说明,此处暂且不表。
当自动构建服务器220无法完成镜像构建时,即自动构建服务器220出现了宕机,开发者可在本地主机250上通过Makefile执行Make(用于读入Makefile并执行其中指定的指令))命令进行手动构建,并将构建好的新镜像上传至镜像仓库。
图3示出了根据本发明的一个实施例的计算设备300的结构框图。
如图3所示,在基本配置302中,计算设备300典型地包括系统存储器306和一个或者多个处理器304。存储器总线308可以用于在处理器304和系统存储器306之间的通信。
取决于期望的配置,处理器304可以是任何类型的处理,包括但不限于:微处理器(UP)、微控制器(UC)、数字信息处理器(DSP)或者它们的任何组合。处理器304可以包括诸如一级高速缓存310和二级高速缓存312之类的一个或者多个级别的高速缓存、处理器核心314和寄存器316。示例的处理器核心314可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器318可以与处理器304一起使用,或者在一些实现中,存储器控制器318可以是处理器304的一个内部部分。
取决于期望的配置,系统存储器306可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器306可以包括操作系统320、一个或者多个应用322以及程序数据324。在一些实施方式中,应用322可以布置为在操作系统上由一个或多个处理器304利用程序数据324执行指令。
计算设备300还包括储存设备332,储存设备332包括可移除储存器336和不可移除储存器338。
计算设备300还可以包括储存接口总线334。储存接口总线334实现了从储存设备332(例如,可移除储存器336和不可移除储存器338)经由总线/接口控制器330到基本配置302的通信。操作系统320、应用322以及程序数据324的至少一部分可以存储在可移除储存器336和/或不可移除储存器338上,并且在计算设备300上电或者要执行应用322时,经由储存接口总线334而加载到系统存储器306中,并由一个或者多个处理器304来执行。
计算设备300还可以包括有助于从各种接口设备(例如,输出设备342、外设接口344和通信设备346)到基本配置302经由总线/接口控制器330的通信的接口总线340。示例的输出设备342包括图像处理单元348和音频处理单元350。它们可以被配置为有助于经由一个或者多个A/V端口352与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口344可以包括串行接口控制器354和并行接口控制器356,它们可以被配置为有助于经由一个或者多个I/O端口358和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备346可以包括网络控制器360,其可以被布置为便于经由一个或者多个通信端口364与一个或者多个其他计算设备362通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以是这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中以编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
计算设备300可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。当然,计算设备300也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、数码照相机、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。甚至可以被实现为服务器,如文件服务器、数据库服务器、应用程序服务器和WEB服务器等。本发明的实施例对此均不做限制。
在根据本发明的实施例中,计算设备300可实现为图1所示的服务部署服务器120或图2所示的服务部署服务器220,并被配置为执行根据本发明的服务更新方法400。其中,布置在操作系统上的应用322中包含用于执行本发明的服务更新方法400的多条程序指令,这些程序指令可以指示处理器304执行本发明的服务更新方法400,以便计算设备300通过执行本发明的服务更新方法400来更新服务。
根据本发明的一个实施例,布置在操作系统上的应用322包括服务更新模块500,服务更新模块500中包含用于执行本发明的服务更新方法400的多条程序指令,使得本发明的服务更新方法400可以在服务更新模块500中执行。
图4示出了根据本发明的一个实施例的服务更新方法400的流程图。服务更新方法400可以在计算设备(例如前述计算设备300)的服务更新模块500中执行。以计算设备300实现为服务部署服务器220为例,服务部署服务器220布置于服务更新系统200中,服务更新系统200还包括镜像仓库服务器230,镜像仓库服务器230上搭建有镜像仓库,镜像仓库中存储有多个镜像。
如图4所示,方法400始于步骤S410。在步骤S410中,按照预设时间间隔获取镜像仓库最新的镜像推送日志。根据本发明的一个实施例,在获取最新的镜像推送日志之前,需要先连接上镜像仓库并确定最新一条镜像推送日志的时间,因此在步骤S410之前,方法400还包括获取镜像仓库的镜像连接句柄,通过镜像连接句柄,向镜像仓库发送日志请求,以获取最新一条镜像推送日志的时间。
在该实施方式中,镜像仓库服务器230上搭建的是Harbor镜像仓库,通过Harbor镜像仓库的地址、机器人账号及密码连接Harbor镜像仓库,获取Harbor镜像仓库的镜像连接句柄。通过该镜像连接句柄,向Harbor镜像仓库发送日志请求,获取Harbor镜像仓库最新10条镜像推送日志,从中确定最新一条镜像推送日志的时间。
一般情况下,在获取到镜像仓库的镜像连接句柄之后,会进行服务部署服务器220的连接。服务部署服务器220上搭建有容器集群,以K8s集群为例,可通过集群配置文件kube-config.yml连接K8s集群,获取K8s集群连接句柄,该句柄即为容器集群的集群连接句柄。
在获取到最新一条镜像推送日志的时间之后,以镜像仓库最新一条镜像推送日志的时间为时间基准,按照预设时间间隔获取镜像仓库最新的镜像推送日志。其中,预设时间间隔通常为3秒。将最新一条镜像推送日志的时间作为起始时间,每隔3秒获取最新的镜像推送日志,以便下一步处理。
随后,进入步骤S420,基于最新的镜像推送日志,判断是否有新镜像被推送至镜像仓库。根据本发明的一个实施例,可通过一下方式判断是否有新镜像被推送至镜像仓库。首先,遍历镜像仓库的日志列表,若日志列表中不包含最新的镜像推送日志,则表明最新的镜像推送日志是新产生的,确定有新镜像被推送至镜像仓库。
在步骤S430中,若有新镜像被推送至镜像仓库,则获取新镜像的镜像信息。具体而言,从最新的镜像推送日志中获取新镜像的镜像信息,镜像信息包括镜像名称、项目名称和服务名称。例如,得到一条镜像信息如下:
镜像名称:hub.deepin.com/project1/service1:dev;
项目名称:project1;
服务名称:service1。
在步骤S440中,确定镜像信息对应的服务是否存在。根据本发明的一个实施例,根据容器集群的集群连接句柄和镜像信息,向容器集群发送服务查询请求,以查询是否存在镜像信息对应的服务。比如,通过K8s集群连接句柄、镜像信息发送服务查询请求,查询服务名称为service1的服务是否存在。
最后,执行步骤S450,若镜像信息对应的服务存在,则从镜像仓库中拉取新镜像以更新服务。根据本发明的一个实施例,可通过如下方式更新服务。先通过HTTP请求,从容器集群中删除镜像信息对应的服务所关联的容器,再从镜像仓库中拉取新镜像,重新创建容器以更新服务。
在该实施方式中,查询到存在服务名称为service1的服务,则通过资源删除命令kubectl delete对应的HTTP请求删除服务名称为service1的服务所关联的容器,K8s集群的replicaSet控制器会自动从H arbor镜像仓库拉取新镜像,重新创建容器来更新服务,若不存在服务名称为service1的服务,则跳过该条镜像推送日志。
上述服务更新方法400的关键代码示例如下:
当服务更新系统200中的自动构建服务器240无法完成镜像构建时,根据本发明的又一个实施例,方法400还包括通过本地执行构建命令进行手动构建新镜像并上传至镜像仓库。在该实施方式中,若自动构建服务器240宕机,则在开发者本地通过Makefile执行相应Make命令即可完成新镜像的手动构建。其中,Makefile主要包括从GitLab代码仓库更新本地代码、编译、通过Dockerfile构建新镜像、上传新镜像到Harbor镜像仓库。
以一个Golang(谷歌开发的一种编程语言)项目为例,Makefile包括如下内容:
DOCKER_TAG:=$(if$(DOCKER_TAG),$(DOCKER_TAG),latest)
DOCKER_TARGET:=$(DOCKER_BASE):$(DOCKER_TAG)
.PHONY:build docker docker-build doc-release
build:
mkdir./dist
go build-mod vendor-v-o./dist./cmd/...
docker-build:
DOCKER_BUILDKIT=1docker build--target builder-t$(DOCKER_BASE):builder-f
Dockerfile.
docker:
DOCKER_BUILDKIT=1docker build-t$(DOCKER_TARGET)-f Dockerfile.
docker-release:
docker push$(DOCKER_TARGET)
基于此,执行如下Make命令可以将Golang代码编译为二进制文件:
make build\
DOCKER_BASE=hub.deepin.com/project1/service1\
DOCKER_TAG=dev
执行如下Make命令可以将上述二进制文件打包成镜像:
make build DOCKER_TARGET=hub.deepin.com/project1/service1:dev
执行如下Make命令可以将上述镜像上传到Harbor镜像仓库:
docker-release DOCKER_TARGET=hub.deepin.com/project1/service1:dev
图5示出了根据本发明的一个实施例的服务更新模块500的示意图。服务更新模块500驻留在服务部署服务器中,例如图1所示的服务部署服务器120或图2所示的服务部署服务器220,图3所示的计算设备300可以实现为服务部署服务器。服务部署服务器布置于服务更新系统中,服务更新系统还包括镜像仓库服务器,镜像仓库服务器上搭建有镜像仓库,镜像仓库中存储有多个镜像。服务更新模块500通过执行本发明的服务更新方法400来更新服务。
如图5所示,服务更新模块500包括依次相连的第一获取单元510、判断单元520、第二获取单元530、确定单元540和更新单元550。
其中,第一获取单元510可以按照预设时间间隔获取镜像仓库最新的镜像推送日志。随后,判断单元520可以基于最新的镜像推送日志,判断是否有新镜像被推送至镜像仓库。第二获取单元530可以在有新镜像被推送至镜像仓库时,获取新镜像的镜像信息。确定单元540可以确定镜像信息对应的服务是否存在。更新单元550可以在镜像信息对应的服务存在时,从镜像仓库中拉取新镜像以更新服务。
应当指出,第一获取单元510用于执行前述步骤S410,判断单元520用于执行前述步骤S420,第二获取单元530用于执行前述步骤S430,确定单元540用于执行前述步骤S440,更新单元550用于执行前述步骤S450。这里,关于第一获取单元510、判断单元520、第二获取单元530、确定单元540和更新单元550的执行逻辑可参见前文方法400中对步骤S410~S450的具体描述,此处不再赘述。
根据本发明实施例的服务更新方案,定期获取镜像仓库最新的镜像推送日志,对其进行分析以判断是否有新镜像被推送至镜像仓库,从而获取需要更新的服务,通过HTTP请求从服务部署服务器上更新服务,而非运行服务更新脚本,将构建工具与服务更新功能解耦,在服务器资源紧张情况下,可完全不使用构建工具,节省了服务器资源。此外,利用手动创建方式,执行构建命令生成镜像,也可实现服务更新,解决了不支持本地触发更新的问题,提高了系统的易用性、灵活性。在实际应用中,所实现的服务更新模块不仅在构建工具宕机也能正常更新服务,还可采用多实例的部署方式,进一步提高系统稳定性能。
A7如A6所述的方法,其中,所述从所述镜像仓库中拉取所述新镜像以更新服务的步骤,包括:
通过HTTP请求,从所述容器集群中删除所述镜像信息对应的服务所关联的容器;
从所述镜像仓库中拉取所述新镜像,重新创建容器以更新服务。
A8如A1-7中任一项所述的方法,其中,所述服务更新系统还包括自动构建服务器,所述方法还包括:
若所述自动构建服务器无法完成镜像构建,则通过本地执行构建命令进行手动构建新镜像并上传至所述镜像仓库。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的服务更新方法。
以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。
在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。
Claims (10)
1.一种服务更新方法,在服务部署服务器上执行,所述服务部署服务器布置于服务更新系统中,所述服务更新系统还包括镜像仓库服务器,所述镜像仓库服务器上搭建有镜像仓库,所述镜像仓库中存储有多个镜像,所述方法包括:
按照预设时间间隔获取所述镜像仓库最新的镜像推送日志;
基于所述最新的镜像推送日志,判断是否有新镜像被推送至所述镜像仓库;
若有新镜像被推送至所述镜像仓库,则获取所述新镜像的镜像信息;
确定所述镜像信息对应的服务是否存在;
若所述镜像信息对应的服务存在,则从所述镜像仓库中拉取所述新镜像以更新服务。
2.如权利要求1所述的方法,其中,在所述按照预设时间间隔获取所述镜像仓库最新的镜像推送日志的步骤之前,还包括:
获取所述镜像仓库的镜像连接句柄;
通过所述镜像连接句柄,向所述镜像仓库发送日志请求,以获取最新一条镜像推送日志的时间。
3.如权利要求1或2所述的方法,其中,所述按照预设时间间隔获取所述镜像仓库最新的镜像推送日志的步骤,包括:
以所述镜像仓库最新一条镜像推送日志的时间为时间基准,按照预设时间间隔获取所述镜像仓库最新的镜像推送日志。
4.如权利要求1-3中任一项所述的方法,其中,所述基于所述最新的镜像推送日志,判断是否有新镜像被推送至所述镜像仓库的步骤,包括:
遍历所述镜像仓库的日志列表;
若所述日志列表中不包含所述最新的镜像推送日志,则确定有新镜像被推送至所述镜像仓库。
5.如权利要求1-4中任一项所述的方法,其中,所述获取所述新镜像的镜像信息的步骤,包括:
从所述最新的镜像推送日志中获取所述新镜像的镜像信息,所述镜像信息包括镜像名称、项目名称和服务名称。
6.如权利要求1-5中任一项所述的方法,其中,所述服务部署服务器上搭建有容器集群,所述确定所述镜像信息对应的服务是否存在的步骤包括:
根据所述容器集群的集群连接句柄和所述镜像信息,向所述容器集群发送服务查询请求,以查询是否存在所述镜像信息对应的服务。
7.一种服务更新模块,驻留在服务部署服务器中,所述服务部署服务器布置于服务更新系统中,所述服务更新系统还包括镜像仓库服务器,所述镜像仓库服务器上搭建有镜像仓库,所述镜像仓库中存储有多个镜像,所述模块包括:
第一获取单元,适于按照预设时间间隔获取所述镜像仓库最新的镜像推送日志;
判断单元,适于基于所述最新的镜像推送日志,判断是否有新镜像被推送至所述镜像仓库;
第二获取单元,适于当有新镜像被推送至所述镜像仓库时,获取所述新镜像的镜像信息;
确定单元,适于确定所述镜像信息对应的服务是否存在;
更新单元,适于当所述镜像信息对应的服务存在时,从所述镜像仓库中拉取所述新镜像以更新服务。
8.一种服务更新系统,包括:
镜像仓库服务器,搭建有镜像仓库,所述镜像仓库中存储有多个镜像;
服务部署服务器,包括如权利要求7所述的服务更新模块。
9.一种计算设备,包括:
至少一个处理器;以及
存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如权利要求1-6中任一项所述的方法的指令。
10.一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如权利要求1-6中任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111172667.6A CN113885915A (zh) | 2021-10-08 | 2021-10-08 | 一种服务更新方法、模块及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111172667.6A CN113885915A (zh) | 2021-10-08 | 2021-10-08 | 一种服务更新方法、模块及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113885915A true CN113885915A (zh) | 2022-01-04 |
Family
ID=79005547
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111172667.6A Pending CN113885915A (zh) | 2021-10-08 | 2021-10-08 | 一种服务更新方法、模块及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113885915A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149683A (zh) * | 2023-02-02 | 2023-05-23 | 武汉天恒信息技术有限公司 | 一种受限网络远程自动化更新部署方法、设备及存储设备 |
CN117873535A (zh) * | 2024-03-08 | 2024-04-12 | 之江实验室 | 一种服务路由更新方法、装置、存储介质及电子设备 |
-
2021
- 2021-10-08 CN CN202111172667.6A patent/CN113885915A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116149683A (zh) * | 2023-02-02 | 2023-05-23 | 武汉天恒信息技术有限公司 | 一种受限网络远程自动化更新部署方法、设备及存储设备 |
CN117873535A (zh) * | 2024-03-08 | 2024-04-12 | 之江实验室 | 一种服务路由更新方法、装置、存储介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021217871A1 (zh) | 微服务集群部署方法、装置、计算机设备及存储介质 | |
CN111801661B (zh) | 多主机分布式数据管理系统中的事务操作 | |
US20100058331A1 (en) | Automated deployment of defined topology in distributed computing environment | |
JP2005011359A (ja) | コンポーネントを展開する方法 | |
CN113885915A (zh) | 一种服务更新方法、模块及系统 | |
CN108196915A (zh) | 基于应用容器引擎的代码处理方法、设备及存储介质 | |
EP2771803A1 (en) | File fetch from a remote client device | |
US11336588B2 (en) | Metadata driven static determination of controller availability | |
CN112947992B (zh) | 代码版本管理的方法和装置 | |
WO2022000869A1 (zh) | 小程序的批量处理方法、装置、电子设备以及可读存储介质 | |
CN113342475B (zh) | 一种服务器集群构建方法、计算设备及存储介质 | |
CN115150392B (zh) | 远程文件复制方法、系统、计算设备及存储介质 | |
CN113535650B (zh) | 一种文件命名方法及计算设备 | |
JP2006099307A (ja) | 分散サーバへのアプリケーションセットのインストール方法 | |
JP2008112311A (ja) | ビジネスプロセス実行方法、ビジネスプロセス実行システムおよびプログラム | |
US9703848B2 (en) | Caching linked queries for optimized compliance management | |
CN112506590A (zh) | 接口调用方法、装置及电子设备 | |
US9513890B1 (en) | Method and system for installing software | |
CN117435215A (zh) | 研发环境部署方法、系统、计算机设备和存储介质 | |
CN111782157B (zh) | 快递面单打印管理方法、装置及系统 | |
JP4823674B2 (ja) | リモートインストールシステム、リモートインストール方法、サーバクローニングシステム、並びにサーバクローニング方法 | |
US20180341475A1 (en) | Just In Time Deployment with Package Managers | |
JP2017228135A (ja) | 端末装置 | |
US20160259810A1 (en) | Global file index | |
US20170242677A1 (en) | Automatic software gathering device and method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |