介绍

kubernetes in action读的差不多了,篇幅比较大,其实是需要一开始把书读薄一些的,对kubernetes的概念讲的比较细,底层也只是大概讲了一下,不涉及源码和kubernetes的设计理念,前几天查阅资料时偶然发现一个极客时间上的教材,深入剖析kubernetes,之前也没了解过这种网课,都是xxx专家xxx架构师啥的,买一个对比一下,看看靠谱不,由于已经看过一本,所以就速读了一下,只看差异。

对比kubernetes在kubernetes调度、kubernetes网络上、kubernetes存储上讲的多一些,里面举得例子也更贴近项目一些,其他内容感觉差不太多,整体读完再评价。

入门相关(行业发展&Docker)

行业发展简单看了看,基本讲了从paas到Docker由来以及后来的kubernetes。
Docker的基础知识介绍的比kubernetes细一些,但是也只是入门级的内容,还是有必要单独对Docker做一下系统的学习,以下列出我任务比较重要的观点。

什么是Docker镜像

1、Docker的相较于传统的paas优势在于打包镜像,很好的管理/解决了应用运行时环境本地/现网一致性的问题,原有的paas平台本质也是container,支持资源的隔离,但是没有镜像的概念,在开发者层面看使用成本是比较高的。
2、相比虚拟机,Docker在可维护性和性能方面具备优势,性能上对比虚拟机少了一层(OS直接在硬件的虚拟),镜像的打包部署也很方便;但劣势是:Docker提供的容器化运行环境,并不是100%的平台可移植,只是在rootfs上做了运行时的操作系统环境依赖,而内核层面部署在一台宿主机上的容器是公用的,而且使用的就是宿主机的内核,所以内核级别无法真正隔离
深入剖析Kubernetes读书笔记(一)基本概念和kubernetes编排调度

实现隔离的关键

3、Docker运行时的容器(一个镜像)本质也是一个linux进程,这个进程经过以下3步后实现了容器化:

  • 启用linux的namespace
  • 启用linux的cgroups
  • 使用linux的change root切换目录

这三点本身也是linux的基本特性,老早就有,后来docker做了很好的封装,其他paas平台也是用的这三个特性来实现的服务资源隔离。
4、Docker镜像分层,分层的策略为Docker提供了良好的打包体验,不重复打包、底层镜像可共享,打包的过程其实就是上面提到的change root的概念,将操作系统中的 / 目录下内容压缩,然后在运行时change root,一般来说应用依赖的运行时环境基本都在这个目录下

深入剖析Kubernetes读书笔记(一)基本概念和kubernetes编排调度

  • 只读层(镜像可覆盖)
  • 可读写层(镜像可覆盖)
  • init层(镜像不覆盖,例如host、resolve.conf的修改)

所以说一层层的Docker镜像其实就是对rootfs的多次编辑、覆盖、合并过程

进入容器(k8s进入pod),本质是创建一个进程,setns,修改这个进程namespace与要进入的容器进程一致,这样在当前进程就可以共享容器进程的操作系统资源了,讲到这里就可以了解到,Docker容器在经过上述namespace、cgroups、change root之后,相关的操作系统资源如平时用到的/proc,/etc这些,都是在进程内可见,宿主机不可见,在一个容器进程实现了操作系统资源的隔离使用

  • 通过namespace,实现了对linux设备、进程的可见性控制,所有linux的设备包括磁盘、网卡、进程都可以在一个namespace进行可见性的控制,其他容器不可见
  • 通过cgroups,实现了对linxu系统资源的控制限制,也讲了以下在/sys/cgroups下可以手动编辑相关的文件进行配置,手动实现进程的资源限制
  • 通过change root实现了操作系统运行时依赖的隔离,每个容器都运行在自己的 / 根目录下,相互不影响

这里主要说一下第二个点,就拿挂盘来讲,不同的容器在宿主机上其实使用的是同一块磁盘,那么如何做到一个目录在容器内可见并可用,在宿主机上不可见,其他容器也不可见?用到了也是linux的绑定挂载,比如在容器运行时,将容器内的/test目录挂载在宿主机的/temp(命令可以实现),当在容器内attach一个1.txt时,容器内的/test可以看到这个文件,在宿主机上的/var/lib/docker/xxxx(容器id)/test目录下是空的,但是在宿主机的/temp下是可以看到的。

容器的总结

对容器的总结有一个比较容易理解的说法,是否严谨就不好说了,但是很好理解。

  • 从静态试图看,容器是一组挂载在/var/lib/docker/mnt/xxxx(容器id)的rootfs(操作系统 / 的拷贝),这一部分称之为“容器镜像”
  • 从动态试图看,容器是一个有namespace + cgroups 构成的隔离环境(一个进程),这部分称之为“容器运行时”

浅谈kubernetes、kubernetes部署

这部分都是一些简单的罗列,环境搭建也没有太细看,工程性太强。

以上内容,对比kubernetes in action,是比较好的,主要是介绍了一些Docker的基本概念,因为有一部分读者确实是单纯从工程应用角度去学习了解kubernetes的,所以肯定对Docker和kubernetes的关系不了解,比如pod的request limit是怎么实现的,pod的网络是怎么实现的,这些都和Docker紧密相关,不过kubernetes in action的作者应该是假设读者具备这一些基本概念了,学习顺序也应该是先Docker后kubernetes,但在实际的生产活动中可能不会有很多读者有意愿去系统学习。

kubernetes的编排和调度

相关文章:

  • 2021-08-27
  • 2022-01-06
  • 2021-12-06
  • 2022-01-11
  • 2021-12-29
  • 2021-08-17
猜你喜欢
  • 2021-10-06
  • 2021-09-04
  • 2021-05-25
  • 2022-01-10
  • 2021-09-02
  • 2021-12-05
  • 2021-04-17
相关资源
相似解决方案