Devops开发模式的诞生
下图展示了开发模式的演变:
早期,互联网行业用户关注产品的功能,能解决什么问题。因此产品的需求在开发时基本确定,不会频繁变更
,此时一般是采用瀑布式开发模式。
但是现在,互联网行业快速发展,用户不仅关注产品功能,并且关注产品是否好用好看
,为了快速获得现金流
,产品就需要快速交付市场
,及时获得市场反馈,同时做出调整。也就是说,在产品开发前期,需求是不明确
的,需要在获得市场反馈过程中不断补充完善,这就造成需求频繁更改,也要求快速开发。敏捷开发模式就是在用户需求快速增加和产品迭代周期不断压缩的背景下产生的。
虽然敏捷开发使得开发人员提高软件开发效率和版本更新速度,但是,由于每次产品上线都需要运维进行部署,频繁的更新对于运维人员来说是比较痛苦的。为了实现持续迭代和运维自动化
,便有了Devops的概念。
Docker
Docker类似于一个轻量的虚拟机。在以前,我们测试时,经常需要虚拟机模拟多个浏览器环境,这就需要我们在自己的电脑上安装虚拟机软件,再在虚拟机里创建虚拟的操作系统。这些虚拟的操作系统不仅占容量,启动也慢。但是Docker确没有这些问题。它不需要虚拟出整个操作系统,并且启动快,所占空间小。
关于Docker有三个核心概念:
- 镜像(Image)
- 仓库(Repository)
- 容器(Container)
假设我建了一个房子,此时我需要搬家,这就意味着房子里的装修、家具等都需要再重新布置一遍。此时我就可以将我的房子复制一份,做成一个“镜像”,然后放进我的背包里带走,到了新的地方再拿出“镜像”,复制出新的房子。仓库就相当于这里的背包,而容器具相当于新建好的房子。
Tips:仓库提供一个集中的存储、分发镜像的服务。一个仓库会包含同一个软件不同版本的镜像。镜像(tag)就常对应软件的不同版本。
kubernetes(K8S)
K8S:基于容器的集群管理平台,负责对Docker镜像进行管理,编排、管理和调度
下面给出了K8S的设计架构图:
首先,一个K8S系统就是一个K8S集群。集群通常由两个核心部分组成:一个Master节点和一群Node节点。Master主节点主要负责集群管理和控制Node节点,Node节点是物理机或虚拟机的主机节点,每个Node节点提供Pod运行的必要服务。
集群中的基本对象
- Pod:基本对象
- Service:解决如何访问Pod内部服务问题
- Volunme:存储卷
- Namespace:命名空间
Master节点
Master主节点提供了4个部分:
- API Server:负责处理用户的请求,对外提供RESTful接口,包括集群状态的查改请求。是唯一一个与etcd集群通信的组件
- Controller Manager:所有资源的自动化管理控制中心。在主节点上运行控制器的组件,从逻辑上讲,每个控制器都是独立的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行
- Scheduler:负责Pod在各个Node节点上的分配和调度,并提供多种Pod调度策略(预选和优选策略)
- etcd:负责存储持久性状态,保存集群所有数据
Node节点
- Pod:K8S部署的最小对象,内含1~n个容器和存储卷,所有容器都是一个业务。(重点:Pod是短暂的,不是持续性实体;同一个Pod的容器在一个命名空间里)
- kubelet:负责管理Pod的生命周期以及Pod的容器、镜像等。并根据从数据库获取的信息来管理容器,上报pod运行状态
- kube-proxy:负责讲访问到某个服务的请求具体分配给工作节点上同一类标签的pod。提供pod之间的网络代理通讯和负载均衡。
- Docker:容器应用引擎
- Fluentd:负责日志收集、存储与查询
- Container Runtime:负责镜像管理以及Pod和容器的真正运行。
CI/CD
持续集成和持续部署 (CI/CD) 通过 Docker 加速应用管道自动化和应用部署。CI/CD 就是 DevOps 的重要实践成果。
最老牌最成熟的CI/CD平台自然是Jenkins。
云原生
Pivotal官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器。
相关链接:
强推!2019年最火的容器、K8S和DevOps入门都在这了DevOps和CI/CD
CICD DevOps 绝对会让你看懂,教育面试官。他俩的 区别