0%

Docker和 K8S

Docker

在了解 Docker 之前先了解虚拟机,虚拟机就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化

虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。
而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。

而Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。Docker 是由三个概念组成的:镜像,仓库,容器.

镜像

可重复生成容器的原型文件,类似于 mac 的 Time Machine.比如我把当前的mac 用Time Machine备份了一份,以后用这个备份文件(镜像)就可以恢复出无限多台一模一样的电脑.

容器

在刚刚的例子里,复制出来的电脑就是 Docker 中的容器.通过镜像生成的一模一样的计算机环境.不一样的是现实生活中,一台电脑上只能恢复一份 mac 系统,而用 Docker 技术可以在一台 Linux 计算机上用一份镜像恢复出很多个Docker 容器,相当于多台电脑.

仓库

我们一般将Time Machine备份放在移动硬盘里,这个硬盘就相当于是一个仓库,只不过我们的仓库里只有一份镜像文件,但是苹果的 iCloud 中就有很多份Time Machine备份,这个 iCloud 就相当于是 Docker 的官方仓库 Docker Hub.不同的是 Docker Hub 是开放性的,只要通过审核以后就可以由用户自己上传到 Docker Hub 上,别人也都可以自由使用.

具体使用文档

K8S

K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。

就在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。

K8S 架构

这个集群主要包括两个部分:

  • 一个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,主要负责日志收集、存储与查询。