产品概述
本文主要内容为网易云容器服务介绍。
容器服务概要
容器服务是基于网易云基础设施提供的 Docker 容器引擎服务平台,覆盖了软件开发过程中的开发、测试、演练、上线等生命周期管理,可以保持应用系统快速搭建和各环境的一致性。
网易云容器服务使用目前业界最广泛使用的编排工具 Kubernetes 对容器进行编排,且默认已经自带了编排功能,无需用户自己进行编排操作,方便用户的使用,加快用户业务的部署。
容器技术可以处理不同平台之间的差异性,提供一个标准化的交付方式,统一配置,统一环境,保证效率,能有效的实现资源限制。此外,容器能够做到快速迁移,秒级高可用。容器服务能够对应用进行按需配置,秒级弹性伸缩,大大减少开发,测试及运维人员的环境搭建和应用创建的服务时间,提高工作效率,提高基础设施资源利用率,降低硬件和软件及人力成本。
网易云容器服务(Container Service)提供了高性能可伸缩的容器应用管理服务,支持在一组云服务器上通过 Docker 容器来进行应用生命周期管理,极大地简化了用户对容器管理集群的搭建工作,无缝整合了网易云虚拟化、存储、网络和安全能力,打造 Docker 云端最优化的运行环境。
网易云容器服务目前提供普通容器和高性能容器两种类别,普通容器运行于虚拟机之上,高性能容器运行于物理机之上,相比普通容器省去了虚拟机这层的虚拟化,性能上有大幅提高。
Deployment 和有状态负载
网易云容器服务工作负载包含 Deployment 和有状态负载:
- 有状态负载可以绑定公网 IP,挂载数据盘,且重启或发生迁移后容器中的数据不会被还原,副本为单个。
- Deployment 重启或者发生重建后新建容器后加入的数据会被还原掉,因此 Deployment 实例中不建议存放不允许丢失的数据,建议只存放应用程序,配置日志路径将日志信息同步到日志服务中,其它数据存放到数据库和对象存储中。Deployment 实例可以动态调整副本的个数,副本之间内置负载均衡的功能。
Docker
Docker 是 2013 年开源的应用容器引擎,开发者可以根据配置文件将应用及依赖包放到一个可移植的容器中,然后发布到一定版本以上的任何流行的操作系统上,实现轻量级别的虚拟化。容器完全使用沙箱机制,通过镜像来保证运行环境的一致性,启动速度秒级之内,可以更好的满足云计算的自动化以及弹性扩容等场景。
Docker 是以 Docker 容器为资源分割和调度的基本单位,封装整个软件运行时环境为开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。Docker 是一个跨平台、可移植并且简单易用的容器解决方案。
Docker 可以在容器内部快速自动化的部署应用,并通过操作系统内核技术(namespaces、cgroups等)为容器提供资源隔离与安全保障。
可以简单的将 Docker 容器理解为一种沙盒(sandbox)。每个容器内运行一个应用,不同的容器相互隔离,容器之间也可以建立通信机制。容器的创建和停止都十分快速,容器自身对资源的需求十分有限,远远低于虚拟机。
Docker 容器的优势和虚拟机(VM)相比较为显著,Docker 容器与虚拟机的比较如下:
/ | Docker 容器 | 虚拟机(VM) |
---|---|---|
操作系统 | 与宿主机共享 OS | 宿主机 OS 上运行虚拟机 OS |
存储大小 | 镜像小,便于存储和传输 | 镜像庞大(vmdk、vdi等) |
运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU、内存消耗 |
移植性 | 轻便、灵活,适应于 Linux | 笨重,与虚拟化技术耦合 |
硬件亲和性 | 面向软件开发者 | 面向硬件运维人员 |
部署速度 | 快速、秒级 | 较慢、10s以上 |
使用 Docker 可以:
- 保证环境一致性,使应用的构建与部署自动化。
- 提供轻量级别的 PaaS 环境使之持续集成效率更高。
- 通过镜像服务提供完整的软件运行环境,开箱即用。
- 单个容器承担独立的职责,轻量级,启动速度快。
- 标准的镜像服务为多云部署能力提供基础条件。
Kubernetes
一个产品通常由多个应用组成,容器只是提供一个应用服务的能力,需要把多个应用服务组合编排起来才能提供服务。Kubernetes 是自动化编排容器应用的开源平台,这些操作不仅包括部署、调节和节点集群间的扩展,还包括服务发现和配置服务等架构支持的基础能力。此外 Kubernetes 不仅支持 Docker ,还支持 Rocket 等不同的底层容器技术,网易云容器服务目前提供的底层容器技术为 Docker,暂未对 Rocket 进行支持。
使用Kubernetes 可以:
- 通过空间(NameSpace)级别的环境隔离,自动化编排多个容器的部署。
- 根据应用负载压力,随时扩展或者收缩容器规模及副本数。
- 将容器抽象成服务层(Service),服务间提供服务发现和负载均衡的能力。
- 提供滚动升级的能力,可以很容易的升级应用程序容器的新版本,升级完成前原部分不会删除,且正常提供服务,失败时自动回滚到之前的版本,整个升级的过程不停服,不会影响用户应用的可用性。
- 使用 pod 组合多个容器,共享内核资源。