Docker和k8s的区别与介绍
Docker和k8s的区别与介绍
摘要
我们具体来看看Docker。
大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
想要搞懂Docker,其实看它的两句口号就行。
参考链接
容器和虚拟机对比
NO.1 Build, Ship and Run
也就是,“搭建、发送、运行”,三板斧。
NO.2 Build once,Run anywhere
搭建一次,到处能用
Docker
技术的三大核心概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
说白了,这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
也就是说,每次变出房子,房子是一样的,但生活用品之类的,都是不管的。谁住谁负责添置。
每一个镜像可以变出一种房子。那么,我可以有多个镜像呀!
也就是说,我盖了一个欧式别墅,生成了镜像。另一个哥们可能盖了一个中国四合院,也生成了镜像。还有哥们,盖了一个非洲茅草屋,也生成了镜像。。。
这么一来,我们可以交换镜像,你用我的,我用你的,岂不是很爽?
于是乎,就变成了一个大的公共仓库。
负责对Docker镜像进行管理的,是Docker Registry
服务(类似仓库管理员)。
不是任何人建的任何镜像都是合法的。万一有人盖了一个有问题的房子呢?
所以,Docker Registry
服务对镜像的管理是非常严格的。
最常使用的Registry公开服务,是官方的Docker Hub
,这也是默认的Registry
,并拥有大量的高质量的官方镜像。
好了,说完了Docker,我们再把目光转向K8S。
就在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。
就在这个时候,K8S出现了。
K8S
K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。
Kubernetes这个单词来自于希腊语,含义是舵手或领航员。K8S是它的缩写,用“8”字替代了“ubernete”这8个字符。
和Docker不同,K8S的创造者,是众人皆知的行业巨头——Google。
K8S的架构,略微有一点复杂,我们简单来看一下。
一个K8S系统,通常称为一个K8S集群(Cluster)。
这个集群主要包括两个部分:
- 一个Master节点(主节点)
- 一群Node节点(计算节点)
一看就明白:Master节点
主要还是负责管理和控制。Node节点
是工作负载节点,里面是具体的容器。
深入来看这两种节点。
Master节点
Master
节点包括API Server、Scheduler、Controller manager、etcd。API Server
是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。Scheduler
负责对集群内部的资源进行调度,相当于“调度室”。Controller manager
负责管理控制器,相当于“大总管”。
Node节点
Node节点包括Docker
、kubelet
、kube-proxy
、Fluentd
、kube-dns
(可选),还有就是Pod
。
Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。这段不太好理解,跳过吧。
- Docker,不用说了,创建容器的。
- Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。
- Kube-proxy,主要负责为Pod对象提供代理。
- Fluentd,主要负责日志收集、存储与查询。