PaaS:
一、虚拟化分类:
虚拟化资源提供者:
1)硬件平台虚拟化
2)操作系统虚拟化
虚拟化实现方式:
type I: 半虚拟化
type II:硬件辅助全虚拟化
type III:
软件全虚拟化:
操作系统虚拟化:
主机虚拟化与容器虚拟化的优缺点:
主机虚拟化:
应用程序运行环境强隔离;
虚拟机操作系统与底层操作系统无关化
虚拟机内部操作不会影响到物理机
拥有操作系统会占用部署资源及存储
网络传输效率低
当应用程序需要调用硬件响应用户访问时间延时大
容器虚拟化
优点:可以实现应用程序的隔离
直接使用物理机的操作系统可以快速响应用户需求
不占用部署时间(不需要安装操作系统)
占用少量磁盘空间
缺点:学习成本增加、操作控制复杂、网络控制与主机虚拟化有所区别、服务治理更难。服务与服务调用关系就很麻烦。容器的编排。(微服务架构工程师)
云平台技术的实现:
分别对应的是:
IaaS 虚拟机:
阿里云ECS
OpenStack VM实例
PaaS容器CaaS(容器即服务):
LXC
Docker
OpenShift
Rancher
SaaS应用程序:
互联网中的应用
容器比虚拟机更抽象。
容器所涉及的内核技术:
六大命名空间:
UTS:UNIX Time-sharing System,命名空间允许每个容器拥有独立的主机名和域名,从而可以虚拟出一个独立主机名和网络空间的环境,就跟网络上的一台独立的主机一样。每一个命令空间都拥有独立的主机名或域名。
IPC:Interprocess Communication。每个容器依旧使用Linux内核中进程交互的方法,实现进程间通信。包括信号量、消息队列和共享内存等。不同空间的进程无法交互。同一个IPC命令空间内的进程彼此可见,允许进行交互。
Mount:类似chroot,将一个进程放到一个特定的目录执行,挂载命名空间允许不同命名空间的进程看到的文件结构不同,这样每个命名空间中的进程所看到的文件目录彼此隔离。每个容器的文件系统是独立的。
NET:通过网络命名空间,可以实现网络隔离。网络命令空间为进程提供了一个完全独立的网络协议的视图,包括网络设备接口、IPv4和IPv6协议栈,IP路由表、防火墙规则、Sockets等,这样,每个容器的网络就能隔离开来。Docker采用虚拟网络设备(Virtual Network Device)的方式,将不同命名空间的网络设备连接在一起,默认情况下,容器中的虚拟网络卡将同本地主机上的docker0网桥连接在一起。
USER:每个容器可以有不同的用户和组id,也就是说可以在容器内使用特定的内部用户执行程序,而非本地系统上存在的用户。
每个容器内部都可以有root账号,但跟宿主机的root用户不在一个命名空间。
通过使用隔离的用户命名空间可以提高安全性,避免容器内进程获得额外的权限。
PID:Linux通过命名空间管理进程号,对于同一个进程(即同一个task_struct)在不同的命名空间中,看到的进程号不相同,每个进程命名空间有一套自己的进程号管理方法。进程命名空间是一个父子关系的结构,子空间的进程对于父空间是可见的,新fork出的进程在父命名空间和子命名空间将分别有一个进程号来对应。每个容器都有独立的进程树,由容器是物理机中的一个进程,所以容器中的进程是物理机的线程。
总结:
容器的命令空间有哪些?
应用程序运行环境隔离的空间,就是一个容器。每个容器都将拥有UTS、IPC、Mount、Net、User、PID。
CGroups(Control Groups):
主机虚拟化实现资源隔离的方式
使用Hypervisor中的VMM实现资源隔离
PAM:
用户认证
资源限制
ulimit
控制组:
作用:用于实现容器的资源隔离;可对进程做资源隔离。
9大子系统:
把资源定义为子系统,可以通过子系统对资源进行限制。
CPU可以让进程使用CPU的比例。
Memory限制内存使用。
blkio限制块设备的IO。
cpuacct生成CGroup使用CPU的资源报告。
devices:允许或拒绝设备的访问。
freezer:暂停或恢复CGroup的访问。
net_cls:
ns: