?k8s极简史,一文看懂k8s如何力战群雄,坐上容器编排老大( 二 )


文章插图
 
资源分配
众所周知 , Linux多用户操作系统 , 即意味着可以多个同时使用操作系统 , 但操作系统只有一个大脑(无论是几个物理核心 , 其实真正都在同一时间只有一个核心工作 , 虽然现代多核心技术在多核心协作上做了非常精巧的设计) 。
那么操作系统究竟该如何分配资源呢?如图是top命令的返回 , 第一列是进程ID , 大家可能已经想到了 , 就是进程ID. 进程ID越小 , 优先级越高 。进程ID是系统判断资源分配的重要依据  。
当然 , 现代操作系统都是并行性操作系统 , 想像这么一个场景:如果有多个进程都在申请同一块内存 , 而另外一个进程一直在占用这块内存不肯释放 , 此时操作系统该怎么办呢?这种情形称为“死琐” , 早在2.6版本以前的内核 , 在资源分配和资源隔离做的并不理想 。尤其是资源隔离
资源隔离

?k8s极简史,一文看懂k8s如何力战群雄,坐上容器编排老大

文章插图
 
资源隔离
程序的正常运行最少需要如下这些资源:
  • 网络资源
  • 磁盘资源
  • 内存资源
  • CPU计算资源

?k8s极简史,一文看懂k8s如何力战群雄,坐上容器编排老大

文章插图
 
容器化
其次还有非常重要的文件系统资源 , 和传统虚拟化不同 。传统虚拟化是在磁盘上划分出来一块空间 , 在此空间上虚拟一个完整的操作系统 , 所有的资源与真实主机隔离 。隔离安全性有保障 , 但性能损失不容忽视 。
而Docker容器化不同的地方是Docker并不是一个操作系统 , 而只是真实物理机操作系统中的一个进程 , 通过该进程来调用内核资源 , 使用rootfs文件系统技术和cgroup隔离动技术 , 实现资源隔离 。
性能几乎无损耗 , 但隔离技术门槛较高 , 且3.10之前的内核版本不支持 。时至今日 , Docker在虚拟化隔离也不能做到安全性100% 。
介绍这么多 , 大家千万不要误解是因为Docker性能损耗少所以大红大紫,真正促使Docker如日中天的原因其实是PAAS的发展
DOCKER
?k8s极简史,一文看懂k8s如何力战群雄,坐上容器编排老大

文章插图
 
docker
从本世纪初开始 , 云计算的呼声不断 , 到2009年王坚博士“骗”了马云10个亿创建阿里云 , 到现在阿里3年2000亿、腾讯5年5000亿在新基建的大力投入 , 不过短短20年时间 。从早期的AWS,azure外资独大 , 到现在阿里、腾讯、华为云独占云市场鳌头 , 如日中天的AWS和盛极一时的OpenStack,带动整个IT产品迈向PAAS时代.
但事情的发展总不以人的意识为导向 。在家名为 dotCloud的公司在PAAS的浪潮中坚持不下去 , 无奈开源他们容器化项目:Docker 。
令dotCloud公司自己都没想到的是 , 这竟然会让他们站在浪潮之巅并有机会和RedHat和google一战雌雄 , 甚至逼的Google不得不和RedHat合作 , 并拿出自家核秘密武器Brog却只为求得生存 。
“容器”这个概念从来就不是什么新鲜的东西 , 也不是 dotCloud 公司发明的 。所以dotCloud 开源的决定在当时根本没人在乎 。
PaaS 项目被大家接纳的一个主要原因 , 就是它提供了一种名叫“应用托管”的能力 。在当时 , 虚拟机和云计算已经是比较普遍的技术和服务了 , 用户主流用法 , 就是租一批 AWS 或者 OpenStack 的虚拟机 , 然后像以前管理物理服务器那样 , 用脚本或者手工的方式在这些机器上部署应用 。
当然 , 这个部署过程难免会碰到云端虚拟机和本地环境不一致的问题 , 所以当时的云计算服务 , 比的就是谁能更好地模拟本地服务器环境 , 能带来更好的“上云”体验 。而 PaaS 开源项目的出现 , 就是当时解决这个问题的一个最佳方案 。
Cloud Foundry是当时 PAAS 的平台龙头 。在Docker开源时 , 其产品经理 james Bayer在社区做过详细对比 , 并告诉大家 Docker 实际上只是一个同样使用了 cgroup 和Namespace 的"沙盒"工具而已 , 并不需要特别关注 。
但仅在短短几个月后 , Docker就迅速崛起 , 速度之快连包括 Cloud Foudry 在内的所有 PAAS 公司没来得及反应就out了.


推荐阅读