云原生学习笔记

[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提出)

四、容器与镜像

容器与普通的操作系统进程,有什么区别呢?

image-20200418213049729

由于进程是共享同一份文件系统,导致权限较高的进程会影响到权限较低的进程的文件操作,形成相互干扰;

由于进程和进程间的依赖可能存在冲突,会给运维带来压力;

由于进程间使用同样的宿主机的资源,存在资源抢占,权限低的进程可能会因为抢占不到资源而无法提供服务。

什么是容器?

容器,是一个视图隔离、资源可限制、独立文件系统的进程集合。

  • 视图隔离 - 如能看见其他进程;独立主机名等等
  • 控制资源使用率 - 如2G内存大小;CPU使用个数等等

什么是镜像?

运行容器所需要的所有文件的集合,就是容器镜像

Dockerfile - 描述镜像构建步骤

构建步骤所产生出文件系统的变化 - changeset

  • 类似disk snapshot
  • 提高分发效率,减少磁盘压力

容器的生命周期

单进程模型

  1. init进程的生命周期 = 容器的生命周期
  2. 运行期间可以执行exec执行运维操作,exec进程也归init进程管理,当init进程退出,其管理的其他进程皆退出

数据持久化

  1. 独立于容器的生命周期
  2. 数据卷 - docker volume vs bind