名词解释

本文档主要内容为容器服务中常见名词的解释。

Docker

Docker 是 2013 年开源的应用容器引擎,开发者可以根据配置文件 把应用及其应用的依赖包放到一个可以移植的容器中,然后发布到一定版本以上的任何的流行的操作系统之上,实现轻量级的虚拟化。容器完全使用沙箱机制,通过镜像来保证运行环境的一致性,启动速度秒级别之内,以更好的满足云计算的自动化以及弹性扩容等场景。

Kubernetes

Kubernetes 是一个全新的基于容器技术的分布式架构的领先方案。Kunernetes 是一个开放的开发平台,没有限定任何的编程接口。Kubernetes 是一个完备的分布式系统支撑平台。Kubernetes 具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建只能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源调度机制,以及多粒度的资源配额管理能力。同时 Kubernetes 提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。因此 Kubernetes 是一个全新的基于容器技术的分布式解决方案,并且是一个一站式的完备的分布式形同开发和支撑平台。

一个产品通常由多个组成,容器只是供一个应用服务的能力,需要把多个应用编排组合起来才能提供服务。Kubernetes 是自动化编排容器应用的开源平台,这些操作不仅包括部署、调度和节点集群件的扩展,还包括服务发现和配置服务等架构支持的基础能力,此外 Kubernetes 不仅支持 Docker ,还支持 Rocket 等不同的底层容器技术。

空间(Name Space)

对应 Kubernetes 的 Namespace,使用空间可以将服务资源进行逻辑隔离,划分成不同的虚拟的集群。例如,用户如果需要创建测试、联调、线上环境,可以通过空间来对这些环境进行隔离。

服务(Services)

对应 Kubernetes 的 Service,用户通过<服务名称>:<服务端口>可以访问部署的服务 ,使用服务可以实现对应用的弹性伸缩、负载均衡、灰度升级、错误恢复。 有状态服务 = service + 有状态负载,无状态服务 = service + deployment。有状态负载可以挂载数据盘,实现数据持久化,有状态负载仅可以拥有一个副本。Deployment 则可以有多个副本,保证服务的可用性。

节点 (Node)

Node 是 Pod 真正运行的主机,可以物理机,也可以是虚拟机。为了管理 Pod,每个 Node 节点上至少要运行container runtime(比如docker或者rkt)、kubelet和kube-proxy服务。

副本(Pods)

对应 Kubernetes 的 Pods,是最小的部署单元和计费单位。一个副本根据应用场景,可以由一个或多个容器组成。当一个副本中有多个容器时,这些容器将会共享副本的计算资源、存储空间、IP和端口,对于计算资源还可以限制各个容器使用的比例。 对于 Deployment 实例,副本随时可以删除和创建,当一个副本发生异常时,系统会删除该副本,然后再创建一个新的副本,从而维持了服务的副本数不变,实现错误弹性恢复,不影响服务的可用性。对于多个容器紧耦合的应用场景,比如主业务+数据采集的场景,可以使用单副本多容器的部署方案。

镜像(Images)

对应 Kubernetes 的 Images,是对所要部署服务的操作系统、运行环境、应用的打包,用户使用镜像来部署服务中的副本。镜像保存在镜像仓库中,当执行部署的时候,蜂巢会自动从镜像仓库中拉取所需的镜像,若部署环境本地已有该镜像存在,则可以直接用于部署,可以大大缩短了部署过程的时间。

容器(Container)

一个副本中可以运行一个或多个 Container 实例,这些实例通过 Docker 技术创建并进行管理。关于 Docker 可以访问 Docker 官网 了解。

高性能容器

普通容器运行在虚拟机之上,高性能容器是直接运行在物理机上的,没有了虚拟机一层带来的CPU、内存、网络等方面的资源损耗,性能上比普通容器更加强大,接近物理机的性能。

数据盘(Volumes)

容器中通过挂载数据盘来实现数据的持久化和共享。目前我们提供了基于 Ceph 技术的 SSD 云硬盘服务,多数据副本保证数据高可靠性,支持热迁移,适用于中度 I/O 负载的应用场景。我们即将支持本地 SSD 数据盘服务(符合 RAID10 标准),适用与高 I/O 负载应用场景。

Deployment

Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前 ReplicationController来方便的管理应用。典型的应用场景包括:

  • 定义Deployment来创建Pod和ReplicaSet
  • 滚动升级和回滚应用
  • 扩容和缩容
  • 暂停和继续Deployment

有状态负载

有状态负载支持挂载数据盘,支持绑定公网 IP,不同于Deployment 有状态负载仅支持单副本。

标签(labels)

标签是一个 key/value 键值对,被关联到对象上,比如Pod,标签的使用我们倾向于能够标示对象的特殊特点,并且对用户而言是有意义的(比如数据库),但是标签对内核系统是没有直接意义的。标签可以用来划分特定组的对象(比如所有的 web 服务),标签可以在创建一个对象的时候直接给与,也可以在后期随时修改,每一个对象可以拥有多个标签,但是,key值必须是唯一的。

端点(Endpoints)

Endpoints 表示一个 service 对应的所有的副本的访问地址。

应用存活探针(liveness probe)

探测应用是否已经启动。该检查方式用于检测容器是否存活,类似于我们执行 ps 命令检查进程是否存在。如果容器的存活检查失败,集群会对该容器执行重启操作;若容器的存活检查成功则不执行任何操作。

应用业务探针(readiness probe)

探测应用业务是否已经就绪。该检查方式用于检测容器是否准备好开始处理用户请求。一些程序的启动时间可能很长,比如要加载磁盘数据或者要依赖外部的某个模块启动完成才能提供服务。这时候程序进程在,但是并不能对外提供服务。这种场景下该检查方式就非常有用。检测失败,则容器会从service的endpoint对象里移除。

Ingress

通常情况下,service 和 pod 的 IP 仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到 service 在 Node上暴露的 NodePort 上,然后再由 kube-proxy 将其转发给相关的Pod。

而Ingress就是为进入集群的请求提供路由规则的集合,Ingress可以给service提供集群外部访问的URL、负载均衡、SSL终止、HTTP路由等。