1.docker
build,ship,run,any app anywhere
docker类似运输中的集装箱,可以装任何应用(镜像文件),运行到各种服务器上。
docker提供的是进程上的隔离,虚拟机提供的是操作系统资源上的隔离。
虚拟机和容器的区别详见这里
1.1原理
docker核心技术是利用Linux kernel中的资源分配机制CGroups,以及核心名字空间namespace来进行进程级别的资源隔离。
对namespace的操作有3个系统函数:clone(),unshare(),setns()
docker采用AUFS联合文件系统(当一个镜像启动的时候,docker会在镜像的最顶层加载一个读写文件系统,只有最顶层的容器部分是可读写的),容器是可写的,镜像是只读的。
镜像(Image)是一堆只读层合成的,除了最底层,每一层都包含一个id、指向父级的指针和当前层的元数据。
容器和镜像最大的区别就是容器最上面有一层读写层。
多个容器可以使用同一个镜像,此时占用空间仅为一个镜像占用的空间。
2.K8s
几种容器编排工具对比:
架构:
etcd:分布式kv数据库,使用Raft协议,用于保存急群众的相关数据;
API Server:集群统一入口,以Restful风格进行操作,交给etcd存储(是唯一能访问etcd的组件);提供认证、授权、访问控制、API注册和发现等机制,可以通过kubectl命令行工具,dashboard可视化面板,或者sdk访问;
Scheduler:节点的调度,选择node节点应用部署;
Controller Manager:处理集群中常规后台任务,一个资源对应一个控制器,同时监控集群的状态,确保实际状态与最终状态一致。
kubelet:相当于master派到node的代表,管理本机容器,上报数据给API Server;
Container Runtime:容器运行时,k8s支持多个容器运行时环境:Docker、Containerd、CRI-O、Rktlet以及任何实现K8s CRI(容器运行环境接口)的软件;
kube-proxy:实现服务(Service)抽象组件,屏蔽PodIP的变化和负载均衡;