深度对比docker和kubernetes的区别和联系( 二 )


Containers(容器):
容器是镜像的运行实例 。我们可以通过docker命令进行如下操作:

  • 创建、运行、停止、移动或者删除容器
  • 将容器连接到一个或多个网络(Network)
  • 向容器添加存储(Volume)
  • 根据容器的当前状态创建新的镜像(Image)
Docker Registries:
Docker Registries用来保存和管理容器镜像 。Docker Hub是任何人都可以使用的公共的Docker Register , 默认情况下Docker被配置为在Docker Hub上寻找镜像 。当我们使用docker pull或docker run命令时 , 所需的镜像就会从我们配置的Docker Register拉取到本地 。当我们使用docker push命令时 , 我们自己的镜像会被推到我们配置的Docker Register 。
1.4 Docker的优势
(1)可以在云平台之间无缝迁移你的应用
(2)消除环境的不一致
(3)高效的分发你的应用
(4)易于扩展应用程序
(5)轻量级
(6)启动速度快
(7)易于维护
正是docke的以上特性和优势 , docker获得了越来越多的开发者的青睐 。然而 , 随着应用程序越来越复杂 , 单个应用程序跨越和使用多个容器越发平常 , 如何协调和管理这些容器成为一个棘手的问题:
  • 多个容器之间如何协调和调度?
  • 应用程序中的不同的容器之间如何彼此通讯?
  • 多个容器执行个体的规模如何调整?
而要解决这些问题 , 就需要借助Kubernetes了 。
二、kubernetes2.1 Kubernetes简介
Kubernetes是由google在2014年开源的生产级别的容器编排系统 。Kubernetes不仅是一个容器编排系统 , 还是一个微服务或者云原生(弹性伸缩)的平台 ,  Kubernetes提供了服务注册与发现、负载均衡、服务自愈、横向扩展、日志监控、集群自愈和容错、弹性伸缩、存储卷挂载的能力 。
2.2 Kubernetes的架构
一个 Kubernetes 集群由一组被称作节点的机器组成 。节点分为主节点和工作节点 。每个集群至少要有一个主节点和工作节点 。
主节点管理集群中的工作节点和 Pod。多个主节点用于为集群提供故障转移和高可用性 。工作节点负责托管应用程序组件中的 Pod 。
这张图表展示了包含所有相互关联组件的 Kubernetes 集群 。
深度对比docker和kubernetes的区别和联系

文章插图
Control Plane Components(控制平面组件): Control Plane Components组件提供了集群的控制平面 , 它们负责集群的全局活动 , 包括:调度、检测和响应集群事件等功能(例如 , 当不满足部署的replicas字段时 , 启动新的pod)
  • kube-apiserver: kube-apiserver是主节点上负责提供 Kubernetes API 服务的组件 , 它是 Kubernetes 控制面的前端 。kube-apiserver用于控制集群的所有REST命令的入口点 。它处理REST请求、验证它们并执行相应的业务逻辑 。kube-apiserver 在设计上考虑了水平扩缩的需要 。换言之 , 通过部署多个实例可以实现扩缩 。
  • etcd: etcd 是兼具一致性和高可用性的key-value数据库 , 可以作为保存 Kubernetes 所有集群数据的后台数据库 。
  • Controller-manager: Controller-manager运行Contrller来处理集群中的常规任务 。这些控制器包括:节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应 。副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod 。端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod) 。服务帐户和令牌控制器(Service Account & Token Controllers): 为新的namespace创建默认帐户和 API 访问令牌
从逻辑上讲 , 每个控制器都是一个单独的进程 , 但是为了降低复杂性 , 它们都被编译到同一个可执行文件 , 并在一个进程中运行 。