"本文主要从docker、docker-compose由浅到深介绍了Kubernetes核心功能,关注回复【ppt】获得演示文稿"
1、Docker
Docker是基于操作系统的沙盒技术,使得用户更简单和完整的去打包自己的应用。
为了说明docker底层实现,现在介绍下面几个概念。
docker底层是基于linux的操作系统级别的虚拟化技术LXC实现;
LXC是通过CGroup实现了虚拟化资源管理,用来保证应用资源的隔离和应用系统资源的限制;
服务器运行了多个服务,这些服务之间是可以互相影响的,其中的一个服务可以查看另外一个服务,这些是我们不愿意看到的,我们更希望同一台机器运行的服务能够完全隔离,互不影响就像运行在多台机器上一样。而linux为我们提供了NameSpaces为我们提供了分离进程树、网络接口、资源挂载点的方法,docker正是利用了linux的NameSpaces技术实现了不同容器间资源的隔离;
如果我们进入docker命令进入容器内部会发现只能看到当前容器的目录而不能看到原系统的目录,而linux的chroot又称(change root)具有改变当前系统的根目录功能。docker正是利用chroot的功能而实现了容器内部目录与原系统目录隔离的效果。
通过NameSpaces文件系统、网络并与宿主机器之间的进程相互隔离,CGroup实现了CPU、内存等物理资源的隔离,docker镜像本质上是一个基于linux底层文件系统的压缩包,虽然Docker是最近几年流行起来即使,但是 Docker 的核心技术其实已经有很多年的历史了,Linux Namespaces、CGroup和 UnionFS 三大技术支撑了目前 Docker 的实现,也是 Docker 能够出现的最重要原因。
具体使用可借鉴:如何使用docker?
2、docker-compose
Docker-compose是一个单节点编排技术。
如果把docker比喻成一堆杂乱无章的集装箱,而compose能够对这些集装箱整理归类,作为一个整体启动运行,docker-compose是以docker为核心进行构建的,本身只支持单节点编排,在复杂多变的生产环境是无法投入使用的。
具体使用可借鉴:起飞的感觉,docker-compose
3、Kubernetes
工业级的编排平台主要提供服务的部署、弹性和管理;
Kubernetes是希腊语,翻译中文是“舵手、飞行员”的意思。
k8s,省略中间8个ubernete替换为8,而得来k8s。
如果说docke把应用打包成镜像,那么Kubernetes保证容器化应用简单高效运行。他跟docker-swarm、moby项目不同,它不在以docker为核心,而是把docker作为一个运行时组件,更多是提供应用部署,规划,更新,维护,在复杂多变的生产环境中,这些往往是我们更加需要的。
3.1、Kubernetes核心功能
1 服务发现和负载均衡;
主要通过Service资源对象其底层是基于iptables实现。
2 服务自动装箱;
主要是通过调度 组件Scheduler实现,它能够自动给帮助我们把容器调度到某几台机器上自动启动运行。
3 容器存储编排;
Kubernetes有跟compose类似的编排yml文件,让存储的生命周期和容器的生命周期有一个链接。
4 容器故障恢复;
在集群环境中经常会因为系统原因、以及宿主机问题导致容器不可用,Kubernetes会帮助我们把不可用的容器进行恢复或者转移到正常节点上面去。
5 自动发布和回滚;
Kubernetes能够对我们的应用进行自动的发布和回滚,并且根据不同应用场景提供了不同发布和回滚策略。
6 配置和密钥存储;
Kubernetes提供了ConfigMap解决了集群环境中配置文件的存储问题,其底层是基于数据卷实现,原应用不用修改任何代码即可无缝对接。
7 服务水平伸缩;
Kubernetes为了让集群更具有弹性提供了水平伸缩功能,如果线上有某种大流量活动,我们可以直接水平扩展应用部署应用的数量,当活动结束后,再减少应用部署的数量,从而高效应对高并发场景。
8 批量执行以及守护进程任务;
Kubernentes可以对Job类型的任务,进行批量的执行,比如数据同步、备份等;如果我们想要集群环境中每个节点都运行一份守护进程进行节点任务执行,我们可以使用Kubernetes DeamonSet资源类型进行任务执行。
9 探针。
Kubernetes主要提供了存活和就绪两种探针,支持http、tcp、socket或者脚本的形式进行检测服务是否正常,对原有服务架构没有任何侵入性。
3.2、图文演示Kubernetes部分特性
-
Kubernetes的调度器Scheduler可以把用户提交的容器,根据其规格大小调度到其中的一个节点上。如下动图所示: