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

k8s极简史Docker和K8S已经是当下运维的必备技能 , 无论是行业技能要求还是前沿技术领域 , 现在还不能很好掌握这两门技术的技术人员 , 在新一轮的技术迭代中将最终被抛弃 。
LXC

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

文章插图
 
AA6FB025-6CB8-4A96-B91D-702CD632331B
Docker其实是一门容器化技术 , 也是虚拟化技术的一种 , 只是相对传统的kvm,xen,vmware虚拟化技术而言 , 是基于进程级别的虚拟化技术 , 更为轻量 , 因而性能损耗更小 。
虚拟化技术并不是一门新技术 , 最小可以追溯到LXC技术!
LXC为linux Container的简写 。可以提供轻量级的虚拟化 , 以便隔离进程和资源 , 而且不需要提供指令解释机制以及全虚拟化的其他复杂性 。相当于C++中的NameSpace 。容器有效地将由单个操作系统管理的资源划分到孤立的组中 , 以更好地在孤立的组之间平衡有冲突的资源使用需求 。与传统虚拟化技术相比 , 它的优势在于:
  • 与宿主机使用同一个内核 , 性能损耗小;
  • 不需要指令级模拟;
  • 不需要即时(Just-in-time)编译;
  • 容器可以在CPU核心的本地运行指令 , 不需要任何专门的解释机制;
  • 避免了准虚拟化和系统调用替换中的复杂性;
  • 轻量级隔离 , 在隔离的同时还提供共享机制 , 以实现容器与宿主机的资源共享 。
总结:Linux Container是一种轻量级的虚拟化的手段 , 提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制 。Linux Container有点像chroot , 提供了一个拥有自己进程和网络空间的虚拟环境 , 但又有别于虚拟机 , 因为LXC是一种操作系统层次上的资源的虚拟化
这里衍生出来另外一个问题?LXC技术最早可以追溯到20世纪70年代 , 计算机系统刚诞生的时代 , 即LXC和系统是强关联 , 为什么一直到2010年左右才开始在历史舞台大紫大红呢?
这里其实要讲到进程和隔离了 。
进程与隔离
?k8s极简史,一文看懂k8s如何力战群雄,坐上容器编排老大

文章插图
 
进程与隔离
没有电的电脑只是一堆废铁 , 通了电的电脑只是一堆带电的废铁!! 这句话充分诠释了操作系统的重要性 。
由于计算机只认识二进制 0 和 1 , 所以无论哪种语言的实现 , 最后都需要通过某种方式编译为二进制文件 , 才能在计算机操作系统中运行起来 。
而为了能够让这些代码正常运行 , 我们还需要数据、代码运行平台即操作系统 。比如我们这个加法程序所需要的输入文件 。这些数据加上代码本身的二进制文件 , 放在磁盘上 , 就是我们平常所说的一个“程序” , 也叫代码的可执行镜像(executable image) 。
【?k8s极简史,一文看懂k8s如何力战群雄,坐上容器编排老大】然后 , 我们就可以在计算机上运行这个程序了 。
  • 首先 , 操作系统从“程序”中发现输入数据保存在一个文件中
  • 然后 , 这些数据就会被加载到内存中待命
  • 接着 , 操作系统又读取到了计算加法的指令
  • 这时 , 它就需要指示 CPU 完成加法操作 。
而 CPU 与内存协作进行加法计算 , 又会使用寄存器存放数值、内存堆栈保存执行的命令和变量 。同时 , 计算机里还有被打开的文件 , 以及各种各样的 I/O 设备在不断地调用中修改自己的状态 。
就这样 , 一旦 程序 被执行起来 , 它就从磁盘上的二进制文件 , 变成了计算机内存中的数据、寄存器里的值、堆栈中的指令、被打开的文件 , 以及各种设备的状态信息的一个集合 。像这样一个程序运行起来后的计算机执行环境的总和 , 就是我们今天的主角:进程 。
从上面可以看到 , 操作系统也是进程 , 只是其无比复杂 , 复杂到可以把自己“虚拟成平台”并承载其它进程运行的程序 , 而操作系统在这个过程中起到两个非常重要的角色是:资源分配和资源隔离 。
资源分配
?k8s极简史,一文看懂k8s如何力战群雄,坐上容器编排老大


推荐阅读