云原生学习笔记
[TOC]
一、技术发展历史
- 2004~2007:Google大规模使用容器(cgroups)技术
- 2008.01:cgroups技术合并进Linux主干,为容器化打下基础
- 2013.03:Docker项目正式发布
- 2014.06:Kubernetes项目发布
- 2015.07:CNCF(云原生基金会)成立,22个创始成员,Kubernetes成为第一个CNCF项目
- 2017.07:CNCF成立2周年,170个会员,14个基金会项目
- 2018.07:CNCF成立3周年,195个会员,19个基金会项目,11个孵化项目
二、云原生的定义
容器技术的革命性类似于集装箱
的革命性。
容器技术可以使应用以自包含
的方式定义,从而更敏捷、可拓展、可复制。
云原生是一条最佳路径(最佳实践)。这条路径能:
- 低心智负担的、
- 敏捷的、
- 以可拓展、可复制的方式
最大化地利用云的能力,发挥最大价值。
容器技术就是云原生技术的核心底盘。
三、云原生思想的两个理论基础
1. 不可变基础设施
目前实现:容器镜像
解释:我们的跑应用的基础设施应该是==不可变==的,是自包含、自描述且可以随时迁移的。
基础设施向云演进的过程
传统应用的基础设施:
可变,如SSH连接到服务器,手动升级或降级软件包,逐个服务器调整配置文件,新代码直接部署到现有服务器上
对云友好的应用基础设施:
不可变,如部署完成之后基础设施不会被修改。如需更新,则更改公共镜像构建新服务以替换旧服务。验证后,新服务投入使用,旧服务退役。
2. 云应用编排理论
目前实现:容器设计模式(Google提出)
四、容器与镜像
容器与普通的操作系统进程,有什么区别呢?
由于进程是共享同一份文件系统,导致权限较高的进程会影响到权限较低的进程的文件操作,形成相互干扰;
由于进程和进程间的依赖可能存在冲突,会给运维带来压力;
由于进程间使用同样的宿主机的资源,存在资源抢占,权限低的进程可能会因为抢占不到资源而无法提供服务。
什么是容器?
容器,是一个视图隔离、资源可限制、独立文件系统的进程集合。
- 视图隔离 - 如能看见其他进程;独立主机名等等
- 控制资源使用率 - 如2G内存大小;CPU使用个数等等
什么是镜像?
运行容器所需要的所有文件的集合,就是容器镜像
Dockerfile - 描述镜像构建步骤
构建步骤所产生出文件系统的变化 - changeset
- 类似disk snapshot
- 提高分发效率,减少磁盘压力
容器的生命周期
单进程模型
- init进程的生命周期 = 容器的生命周期
- 运行期间可以执行exec执行运维操作,exec进程也归init进程管理,当init进程退出,其管理的其他进程皆退出
数据持久化
- 独立于容器的生命周期
- 数据卷 - docker volume vs bind