容器的架构组成
- 容器镜像:包含了阉割的操作系统以及所提供的应用程序的一个打包的文件
- redis镜像
- nginx镜像
- httpd镜像
- 镜像仓库:用于存储容器镜像,以便于镜像的分发
- 公共镜像仓库
- 私有镜像仓库
- 容器:镜像运行起来就是容器,容器提供应用级别的服务
容器架构组件作用:
Docker:
docker-api:接收用户的请求;
runc:runc是一个工具,用来运行创建容器的,调用namespace和cgroup,在创建完后退出;
containerd(核心):标准的容器运行时,负责启动容器,计算资源的分配,隔离;本质上一个容器只包含计算部分,这部分被称为容器的“运行时”
containerd-shim:在容器创建完成时,这个容器的父进程会被containerd接管,containerd为了避免docker挂掉造成容器退出所以containerd,将容器的父进程交给containerd-shim;
Kubernetes:容器编排(管理)系统
如有10台机器上有1000个容器,那么Kubernetes负责管理容器在众多节点上的调度
早期的Kubernetes将docker作为容器的运行时,对于网络和存储,Kubernetes是很开放的,允许接入第三方插件;
只需支持Kubernetes提供的cri(容器运行时接口)、cni(网络接口)、csi(存储接口)
如:opnestack除了支持KVM以外,同样也可以支持Xen,openstack本身不提供虚拟化功能;Kubernetes也是如此,他除了可以使用docker也可以使用其他的容器运行时,但必须支持cri
为什么Kubernetes要废除Docker了
虽然Kubernetes使用的是docker作为容器的运行时,但是docker本身是不支持Kubernetes支持的cri容器运行时接口的,当时的Kubernetes没有话语权,只好研发出了docker-shim,将cri的请求交给docker-shim翻译成docker-api能够识别的请求。
但docker败给Kubernetes后,dockcer将containerd单独剥离出来捐献给了云原生基金会(CNCF),社区基于containerd做了二次开发,支持了cri。
在1.22版本正式不支持docker(删除了docker-shim代码),Kubernetes使用的是containerd作为容器的运行时