Java部署知识点
普通打包部署方式:原文链接Jekins集成部署Jekins:可以看出,jenkins充当的是一个自动构建的作用,允许持续集成和持续交付项目,而Docker相当于虚拟机,或者说是一个容器。1、持续、自动地构建/测试软件项目。2、监控软件开放流程,快速问题定位及处理,提示开放效率。补充:1、jenkins是一个插件的集合K8s和Docker:官方定义1:Docker是一个开源的应用容器引擎,开发者可以
普通打包部署方式:
Jekins集成部署
Jekins:
可以看出,jenkins充当的是一个自动构建的作用,允许持续集成和持续交付项目,而Docker相当于虚拟机,或者说是一个容器。
1、持续、自动地构建/测试软件项目。
2、监控软件开放流程,快速问题定位及处理,提示开放效率。
补充:1、jenkins是一个插件的集合
K8s和Docker:
官方定义1:Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。
官方定义2:k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
Docker:
Docker的核心概念和常用命令
Docker实际上就是一个虚拟机,只不过运行虚拟容器消耗的资源和单独运行引用程序差不多,即,能高效的运行虚拟机容器。Docker的三个核心概念就是:镜像、容器、仓库。
1、镜像
Docker镜像类似于虚拟机镜像,可以理解为我们常用的ios镜像。这是Docker容器的基础,运行容器前需要将镜像拉取到本地。常用镜像命令如下:
docker images 列出本地镜像
docker pull imageName 拉取镜像
docker search imageName 查找镜像
docker rmi imageName 删除镜像
2、容器
容器用来运行和隔离应用程序,像我们常说的沙箱。容器是通过镜像创建和运行的实例,一个镜像可以有多个容器实例。常用容器命令如下:
docker ps -a 查看所有容器
docker run -itd imageName 创建并启动容器
docker start name 启动容器
docker stop name 停止容器
docker attch name 进入运行中容器
docker rm -f name 删除容器
3、仓库
Docker仓库用于集中存放镜像文件。可以创建私有仓库。通常为了下载快会把仓库地址配置为国内仓库。
为什么需要Docker
1.环境(切换/配置)麻烦
2.应用之间需要隔离
比如我写了两个应用(网站),这两个应用部署在同一台服务器上,那可能会出现什么问题?
如果一个应用出现了问题,导致CPU占100%。那另一个应用也会受到关联,跟着一起凉凉了。
这两个应用是完全不同技术栈的应用,比如一个PHP,一个.NET。这两个应用各种的依赖软件都安装在同一个服务器上,可能就会造成各种冲突/无法兼容,这可能调试就非常麻烦了。
Docker是如何解决上述的问题的
解决环境(切换/配置)
不知道大家有没有装过系统,比如说装Linux虚拟机,重装Windows系统,都是需要镜像的。
有了这个镜像,我们就可以运行这个镜像,来进行安装系统的操作(此处省略N个下一步),于是我们的系统就装好了。一般来说,我们去官方渠道下载的镜像,都是纯净的。比如去官方下载Windows镜像,装完后之后桌面只有一个回收站。
Docker也是这种思路,可以将我们的想要的环境构建(打包)成一个镜像,然后我们可以推送(发布)到网上去。想要用这个环 境的时候,在网上拉取一份就好了。
有了Docker,我们在搭环境的时候,跟以前的方式就不一样了。
之前:在开发环境构建出了一个war包,想跑到Linux下运行。我们得先在Linux下载好Java、Tomcat、MySQL,配置好对应的环境变量,将war包丢到Tomcat的webapps文件夹下,才能跑起来。
现在:在Linux下直接拉取一份镜像(各种环境都配好了),将镜像运行起来,把war包丢进去就好了。
将Docker的镜像运行起来就是一两秒的事情而已,十分方便的。
线程隔离:
Docker有容器,容器用来运行和隔离应用程序,像我们常说的沙箱。容器是通过镜像创建和运行的实例,一个镜像可以有多个容器实例。
Docker可以干嘛?
1.高效有序利用资源
2.单台机器得部署多个应用;
3.将一整套环境打包封装成镜像,无需重复配置环境,解决环境带来的种种问题。一次编译,到处运行,类似于java代码,应用及依赖的环境构建一次,可以到处运行。
4.Docker容器间是进程隔离的,谁也不会影响谁。
Docker采用的是什么机制?
K8s:
首先,我们从容器技术谈起,在容器技术之前,大家开发用虚拟机比较多,比如vmware和openstack,我们可以使用虚拟机在我们的操作系统中模拟出多台子电脑(Linux),子电脑之间是相互隔离的,但是虚拟机对于开发和运维人员而言,存在启动慢,占用空间大,不易迁移的缺点。举一个我亲身经历过的场景吧,之前在vmware中开发了一个线下平台,为了保证每次能够顺利使用,我们就把这个虚拟机导出为OVF,然后随身携带,用的时候在服务器中部署,这里就充分体现了虚拟机的缺点。
接着,容器化技术应运而生,它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境即可,而且启动速度很快,除了运行其中应用以外,基本不消耗额外的系统资源。Docker是应用最为广泛的容器技术,通过打包镜像,启动容器来创建一个服务。但是随着应用越来越复杂,容器的数量也越来越多,由此衍生了管理运维容器的重大问题,而且随着云计算的发展,云端最大的挑战,容器在漂移。在此业务驱动下,k8s问世,提出了一套全新的基于容器技术的分布式架构领先方案,在整个容器技术领域的发展是一个重大突破与创新。
那么,K8S实现了什么?
从架构设计层面,我们关注的可用性,伸缩性都可以结合k8s得到很好的解决,如果你想使用微服务架构,搭配k8s,真的是完美,再从部署运维层面,服务部署,服务监控,应用扩容和故障处理,k8s都提供了很好的解决方案。
具体来说,主要包括以下几点:
服务发现与调度
负载均衡
服务自愈
服务弹性扩容
横向扩容
存储卷挂载
总而言之,k8s可以使我们应用的部署和运维更加方便。
最后,我们看下k8s的架构:
k8s集群由Master节点和Node(Worker)节点组成。
Master节点
Master节点指的是集群控制节点,管理和控制整个集群,基本上k8s的所有控制命令都发给它,它负责具体的执行过程。在Master上主要运行着:
Kubernetes Controller Manager(kube-controller-manager):k8s中所有资源对象的自动化控制中心,维护管理集群的状态,比如故障检测,自动扩展,滚动更新等。
Kubernetes Scheduler(kube-scheduler): 负责资源调度,按照预定的调度策略将Pod调度到相应的机器上。
etcd:保存整个集群的状态。
Node节点
除了master以外的节点被称为Node或者Worker节点,可以在master中使用命令 kubectl get nodes查看集群中的node节点。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,该节点上的工作负载就会被Master自动转移到其它节点上。在Node上主要运行着:
kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能
kube-proxy:实现service的通信与负载均衡
docker(Docker Engine):Docker引擎,负责本机的容器创建和管理
Jenkins设置项目构建顺序:
jenkins构建多个项目执行顺序设置
总结:
1.多个工程执行,如果有数据依赖,要在工程里配置,项目运行节点,及在项目上下游之前后构建。
2.如果构建项目有先后顺序,并且监控同一版本,可以在触发器位置设置,其它工程构建后触发。
更多推荐
所有评论(0)