1。前言 在看到此文章之前,想必你已经知道如何启动一个springboot应用,知道如何通过docker运行你的springboot服务。 你可能会有这样得疑问,已经了解如上部署方式,是否还有必须去了解如何通过k8s部署springboot应用? 如果你有这样的疑问,那么请继续往下看。2。创建SpringBoot应用 在介绍k8s部署springboot应用之前,我们需要创建一个springboot应用。2。1编写pom。xmllt;?xmlversion1。0encodingUTF8?projectxmlnshttp:maven。apache。orgPOM4。0。0xmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:maven。apache。orgPOM4。0。0http:maven。apache。orgxsdmaven4。0。0。xsdparentbootexampleadvanceartifactIdgroupIdcom。boot。examplegroupIdversion1。0SNAPSHOTversionparentmodelVersion4。0。0modelVersionbootexampledockerartifactIdversion1。0SNAPSHOTversionnamebootexampledockernameurlhttp:www。example。comurldependenciesdependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependencydependenciesbuildpluginsplugingroupIdorg。springframework。bootgroupIdspringbootmavenpluginartifactIdexecutionsexecutiongoalsgoalrepackagegoalgoalbuildinfogoalgoalsexecutionexecutionspluginpluginsbuildproject复制代码2。2编写程序SpringBootApplicationRestControllerpublicclassDockerApplication{GetMapping()publicStringhome(){try{returnHelloDockerWorld:InetAddress。getLocalHost()。getHostAddress();}catch(UnknownHostExceptione){returnHelloDockerWorld;}}publicstaticvoidmain(String〔〕args){SpringApplication。run(DockerApplication。class,args);}}复制代码2。3应用打包 通过mvncleanpackageX命令对该应用进行打包,执行完命令后可以看到target目录下生成了一个xxx。jar的包3。构建镜像 有了应用包,需要编写Dockerfile文件将应用包构建成一个镜像3。1编写DockerfileFROMopenjdk:8jdkalpineARGJARFILEtarget。jarCOPY{JARFILE}app。jarENTRYPOINT〔java,jar,app。jar〕复制代码3。2构建镜像 有了jar包和Dockerfile文件就可以使用dockerbuildta601942905app。命令来构建镜像3。2。1查看镜像是否构建成功 构建完镜像后则可以通过dockerimages命令来查看是否存在刚才构建的镜像,存在则说明镜像构建成功3。2。2验证镜像的正确性 如果本地存在构建的镜像,可以通过dockerrunnamemyappp8080:8080da601942905app命令将镜像启动成容器 使用dockerps命令查看容器是否正常启动,如果正常启动,可以通过curllocalhost:8080访问服务接口,正常响应,则说明镜像可以正常使用3。3推送镜像 为了让k8s能够拉取到镜像,需要将构建好的本地镜像通过dockerpusha601942905app命令推送到远程仓库4。k8s 有了镜像,就可以使用k8s来部署服务4。1创建deploymentkubectlcreatedeploymentmyappimagea601942905app复制代码4。2创建servicekubectlexposedeploymentmyapptypeNodePortport8080复制代码4。3访问服务 在浏览器中输入ip端口即可访问对应的服务4。4服务扩容kubectlscalereplicas5deploymentmyapp复制代码 扩容之后可以看到同时存在5个myapppod服务,这在实际场景中是非常有用的。当我们的服务压力过大、负载过高时,就可以通过该方式实现服务扩容,使得服务可以提供更高的并发能力,渡过高峰期。4。5服务缩容kubectlscalereplicas3deploymentmyapp复制代码 过了业务高峰期,之前扩容的服务就会存在冗余,造成资源浪费。可以通过如上方式实现服务缩容,从而达到服务降本的目的4。6服务自愈 服务在运行的过程中,由于某些原因会导致pod故障,从而造成对外提供服务的数量减少。在业务高峰时期,这种故障的产生可能会拖垮整个服务,从而导致无法对外提供服务。使用k8s完全不用担心这种故障的发生,当pod服务故障后,k8s会重新启动一个新pod服务4。7服务滚动更新kubectlsetimagedeploymyappappa601942905app:latest复制代码 服务发布后,如果发布服务的配置存在问题,导致服务无法启动,此时整个应用都无法对外提供服务。滚动更新会先启动一个新服务,当新服务启动后再关掉一个旧服务,这样即便服务由于配置问题无法启动,也不会影响线上服务,从而提高服务的slo4。8版本回退kubectlrolloutundodeploymyapp复制代码 服务发版不可以避免的一个问题:本地、测试环境测的好好的,一到线上就报错。遇到这种情况,我们的第一反应就是版本回退,从而让服务恢复到正常状态5。总结 看到这里,想必你已经知道为什么要了解k8s来部署服务。因为k8s可以轻松实现服务扩容、服务缩容、服务自愈、服务滚动更新和服务版本回退