特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
性能 | 接近原生 | 较弱,表现有限 |
内存消耗 | 很小 | 较多 |
硬盘消耗 | MB级别 | GB级别 |
运行密度 | 单机最大支持上千容器 | 单机一般支持几十个 |
隔离性 | 安全 | 安全 |
迁移性 | 优秀 | 一般 |
Docker是一个开源的应用容器引擎,可以让开发者打包应用及依赖包到一个可移植的镜像中,发布到Linux/Windows机器上
Kubernetes, 即K8S
主要由四部分组成:API Server、Scheduler、Controller Manager、Etcd,具体作用如下:
主要是由Pod、kubelet、kube-proxy、Docker、Fluentd等部分组成,各部分的具体作用如下:
Pod:Pod是Kurbernetes进行创建、调度和管理的最小单位,一个pod由一个或多个容器组成,pod中共享存储和网络,在同一个Docker主机上运行。pod内部可以运行一个或多个容器,一般情况下为了便于管理,一个pod下只运行一个容器。Kubernetes不会直接管理容器,而是管理Pod。Pod的作用是管理线上运行的应用程序,在通常情况下,在服务上线部署时,Pod通常被用来部署一组相关的服务,即一个调用链上的服务。
kubelet: kubelet是Master在Node节点上的代理,每个Node节点都会启动一个kubelet进程,用来处理Mater节点下发到Node节点的任务,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、管理Pod生命周期、获取容器和节点的状态等工作。当Scheduler确定某个Node上运行Pod之后,会将Pod的具体配置信息发送给该节点的kubelet,kubelet会根据这些信息创建和运行容器,并向Master报告运行状态。
kube-proxy: 负责负载均衡、路由转发,具体来说,其负责将访问service的TCP/UDP数据流转发到后端的容器。如果有多个副本,kube-proxy会实现负载均衡。Proxy是为了解决外部网络能够访问跨机器集群中容器提供的应用服务而设计的,运行在每个Node上。Proxy提供TCP/UDP sockets的proxy,每创建一种Service,Proxy主要从etcd获取Services和Endpoints的配置信息(也可以从file获取),然后根据配置信息在Minion上启动一个Proxy的进程并监听相应的服务端口,当外部请求发生时,Proxy会根据Load Balancer将请求分发到后端正确的容器处理。
Docker/Container Runtime:运行容器的引擎,Pod内部运行的都是具体的容器,这个容器是由Docker引擎创建的,Docker引擎是node节点的基础服务。(补充:Docker 运行时在 Kubernetes 的2021年底发布1.23版本中被移除,不再被支持,需要切换到其他符合标准的容器运行时,如 containerd或 CRI-O。)
Fluentd:提供集群日志采集、存储与查询的功能。
介绍完Master和Node它们分别的组件,我们知道了Pod是K8S创建、调度和管理的最小单位,那么一个Pod具体是怎么创建的呢?参考如下:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。