从工作到现在,部署也经理几个阶段:石器时代(纯手工部署nohup java -jar xxx.jar &) -> 青铜时代(docker容器化部署 docker pull,docker run...)->第一次工业革命(idea集成docker插件,实现一键部署)->第二次工业革命(jenkins集成docker实现一键部署)->第三次工业革命(jenkins+docker+k8s一键部署),基本上现在市面上的互联网大厂,部署模式也逃不开"二三次工业革命"这两种方式,不过是在上面套个壳,封装一下界面,或是拓展一下,但核心技术还就这些技术.
每个阶段都有很多知识点,所以在此篇回顾和梳理,备忘.
1.石器时代
在我刚入职的前面两家公司,还真是用这种最老土的方式在部署,公司也没有运维,服务器也是那种配置较低的,不得不说现在市场上应该还有不少小公司采用这种最原始的方式在部署,在没有大量业务和员工以及资源的情况下,这种方式反倒可以节省时间和成本,所以也不能小瞧这命令 nohup(no hang up ) 意为不挂断,也就是让进程常驻,&的意思是在后台执行, 所以通过nohup java -jar xxx.jar & 可以在后台启动jar包,从而完成项目部署,项目启动的日志也会在控制台打印,如果没有报错,可以通过ps 命令 已经netstat命令查看部署最终状态.
2.青铜时代
青铜时代相比时期时代有所进步,主要是通过容器部署可移植性有了大的提升,同时服务之间可以通过容器相互隔离,不会因为一个服务崩了可能拖垮整个服务器,所以在稳定性上也有一定的提高,而且有了docker,为后面的工业革命奠定了基础.
2.1docker是什么
docker是一个开源的应用容器引擎,支持开发者将应用及环境打包到镜像中,然后部署到任何装有docker的机器上. 个人理解:docker就是一个小的Linux系统,这个Linux系统可以将应用,环境都囊括在内,作为一个独立的单元,可以放在任何装有docker的机器上运行,是运行在linux系统中的"liunx".
2.2docker优势
有了docker,应用的可移植性大大提高,不会出现今天这个系统在这台机器上运行的好好的,明天换了台机器就运行不了了这种情况.
docker还具有应用隔离的效果,比如一台机器上部署了多个应用,在原来如果有个应用把资源榨干了,导致服务器崩溃,可能会让这台服务器上所有应用都不可用,但通过docker部署的应用,即便单个应用挂了,不会拖垮其它应用,多个docker服务之间相互隔离
2.3docker file,docker image概念
dockerfile是docker用来制作镜像的指引文件,docker打包镜像是根据dockerfile中定的规则来打包的,常用的几条指令如图(网图)
docker image就是docker打包好的镜像文件,该镜像文件可以在docker容器中被运行
2.4docker常用命令
docker常用命令主要有:
docker build xxx 根据指定dockerfile构建镜像
docker push xxx 将镜像上传至远程仓库
docker pull xxx 从远程仓库拉取指定镜像
docker run xxx 创建一个新的容器并运行
docker ps 查看正在运行的所有容器信息
docker attach xxx 连接到正在运行的某个容器,相当于进到了容器内部,可以执行Linux的一些基本命令.
3.第一次工业革命
当时由于公司没有运维,我Linux掌握的还可以,然后就让我充当临时运维,后面由于应用从单体拆分成了微服务应用,光是微服务的注册中心,配置中心,监控中心这些应用(都是双节点的)部署,就能把人累死,一碰到要改配置改代码的时候,一堆部署纯靠敲命令苦不堪言,当时就在想有没有什么方式可以提高部署效率,最好能一键部署,由于之前学过docker,就顺藤摸瓜,找到了通过docker插件完成一键部署这条道路,而且可以直接在IDEA中完成部署和日志查看,非常方便,所以这条方式直至我离职时该公司还在沿用.
完整教程可以参阅我前面写过的
【Docker】在IDEA中实现一键部署到服务器(附ssl连接加密) https://blog.csdn.net/lovexiaotaozi/article/details/82797236
进阶版 :【Jvm】docker下的jvm一键自动部署并调优 https://blog.csdn.net/lovexiaotaozi/article/details/82963472
值得注意的是,如果采用docker插件部署,需要暴露端口与IDEA连接,端口如果没有采取限制,黑客会通过该端口与docker连接,由于docker会被提取root权限,所以需要特别谨慎,生产环境及公网环境建议务必开启SSL加密,否则后果自负...
4.第二次工业革命
当我和公司的其他小伙伴们还沉浸在第一次工业革命带来的快感中时,我发现市面上招聘信息里有提到会Jenkins持续集成,当时我很好奇,就去了解和学习了Jenkins,然后发现这东西更强大,于是趁热打铁,花了一个礼拜时间把公司的部署业务从docker迁移至通过Jenkins部署,终于我不再需要教别人在自己电脑上怎么配置docker插件了,只需要给每个开发分配账号和权限,告诉他们地址,就可以随时完成部署了,而且在手机上也可以完成部署,可以说是随时随地了,也因为这项提升,老板说离职时给我一笔奖金,到头来不过是个印度飞饼...
4.1jenkins 是什么
jekins是一款开源的基于Java开发的可持续集成集成工具,主要用于项目的自动化部署.
4.2jenkins的优势
可以按照既定的流水线完成整个项目从代码拉取,打包,构建,测试,部署等多个流程,从而大大提高效率,减少运维工作量,
4.3jenkins如何配置使用
【工程化专题】Jenkins持续集成 从入门到实战 https://blog.csdn.net/lovexiaotaozi/article/details/88305424
5.第三次工业革命
jenkins+k8s就比较适合大公司,有可伸缩弹性云服务器的前提下,进行中大型项目的部署,k8s和弹性服务器可以说是天生一对,k8s的自动扩容/缩容可以很好的利用服务器的弹性空间,从而节省资源,提高性能.
关于k8s的理论部分,前面已有梳理【高级部署】-Kubernetes K8S理论篇 https://blog.csdn.net/lovexiaotaozi/article/details/104841692
5.1k8s是什么
k8s全称kubernetes,是谷歌开源的可移植容器编排工具,通过k8s可以更好的控制容器的启动/伸缩/监控,使服务的部署和运维变得更简单
5.2k8s的优势
k8s可以实现服务的负载均衡
k8s可以实现服务自愈
k8s可以弹性扩容,充分利用硬件
5.3k8s怎么用
暂时先参考这篇,我最近会自己总结一篇,到时候会来更新这篇 https://www.cnblogs.com/gaoyuechen/p/8685771.html