jenkins、k8s、docker学习

没有系统学习,只能根据项目中用的内容一点一点积累

目前的理解是:jenkins打包生成镜像,docker使用镜像生成容器,k8s管理容器

由于基于kubernetes也是基于docker的,都需要用到docker进行通信和中转,因此使用同一的slave镜像将大大节省平台开发与维护成本,因此需要引入jenkins的另一个大插件pipeline

一、k8s   

https://www.jianshu.com/p/502544957c88
Docker是应用最为广泛的容器技术,通过打包镜像,启动容器来创建一个服务。
但是随着应用越来越复杂,容器的数量也越来越多,由此衍生了管理运维容器的重大问题,k8s问世。
k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能,有如下优点:
1、服务发现与调度
2、负载均衡
3、服务自愈
4、服务弹性扩容
5、横向扩容
6、存储卷挂载

Ingress
ingress是k8s的一种集群维度暴露服务的方式。
通过http或https暴露集群内部service,给service提供外部URL、负载均衡、SSL/TLS能力以及基于host的方向代理
可以简单理解为service的service,他通过独立的ingress对象来制定请求转发的规则,把请求路由到一个或多个service中。

ingress与ingress-controller
ingress对象
指的是k8s中的一个api对象,一般用yaml配置。作用是定义请求如何转发到service的规则,可以理解为配置模板。
ingress-controller
具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发

二、Docker

Docker将应用程序与该程序的依赖,打包在一个文件里面。
运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。
容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

镜像( Image) 和容器( Container) 的关系:
就像是面向对象程序设计中的 类 和 实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。
因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。
容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。
这种特性使得容器封装的应用比直接在宿主运行更加安全。

优点:
1、简化配置:虚拟机VM最大的好处是基于你的应用配置能够无缝运行在任何平台上,Docker提供同样类似VM的能力。
2、服务合并:使用Docker也能合并多个服务以降低费用
3、代码管道化管理:能够对代码以流式pipeline管道化进行管理,
4、多租户:Docker能够作为云计算的多租户容器,使用Docker能容易为每个租户创建运行应该多个实例,这得益其灵活的快速环境以及有效diff命令。
5、快速部署:Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭。
6、开发人员的生产化:我们可以将多个Docker装载一系列服务运行在单机上最大程度模拟生产分布式部署的环境。
7、应用隔离:将多个应用服务部署在多个Docker中能轻松达到这个目的。
8、分层存储:镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。

 三、Pipeline

 我们项目jenkins使用了Pipeline,Pipeline查资料好像是使用了groovy语言

参考:https://www.cnblogs.com/shenh/p/8963688.html

原文地址:https://www.cnblogs.com/yinwenbin/p/14231175.html