0引言
随着企业信息化业务系统建设的高速发展,业务系统的种类和数量相较于以往也有了爆发式的增长,信息化系统在企业日常生产中的重要性愈发凸显,对业务系统的稳定性、不间断性要求也日益增高。不断增多的业务给日常运维和升级带来了极大的工作量,每次业务升级牵涉不同业务模块,升级时间长,业务故障率高。当升级出现问题时,短时间内也无法进行业务回滚,业务中断事件时有发生。因此,亟需探索建设新技术架构平台,寻解决上述问题的方法。
本文根据企业自身业务特点及需求,研究了一种基于Kubernetes+Docker技术的开源容器云平台方案:将传统虚拟化业务进行改造,重新部署于新平台,以达到提升业务稳定性,降低故障率,提高集健壮性的目的。
1容器相关技术
1.1Docker概念
Docker是一个开源的应用容器引擎,通过将与应用相关的依赖项(环境、程序、文件)打包成镜像文件的方式部署于主机中,可以忽略不同部署环境的差异。同时利用镜像仓库,集成人员可以管理不同镜像版本,灵活配置部署。因此,Docker作为建设容器云平台的基础技术,有着极大的优势。Docker技术包含Image(镜像)、Container(容器)、Repository(仓库)三个基本概念。
1)镜像
Docker镜像可以理解为一个文件系统,包含容器运行时的配置文件、变量、用户名、运行命令等静态参数,不含任何动态参数,在构建容器后也不会发生改变。
2)容器
镜像是静态的单元,容器是镜像运行时的动态单元,可以做启动、停止、暂停、删除等操作,本质更像是系统运行时的进程。
3)仓库
仓库一般又称为镜像仓库,是集中存储镜像的空间。区分不同的镜像版本,可以给其打上Tag(标签),类似于软件开发人员使用的代码仓库。
1.2容器与虚拟化
传统的虚拟化技术,一般是在宿主机操作系统层上构建一套虚拟化层,对硬件进行虚拟化,再启动虚拟机部署各个生产应用。容器则是直接对宿主机操作系统进行虚拟化,不同应用运行于独立空间,每个独立空间具备各自的CPU、内存等。不同应用之间相互独立,共用宿主机操作系统内核,也不对硬件进行虚拟化。因此,容器部署启动更迅速。容器与虚拟化技术对比如图1所示。
基于Kubernetes的企业级容器云平台建设
夏畅
(新华报业传媒集团,江苏省南京市210092)
摘要针对企业信息化系统业务升级、故障日益频繁,运维人员工作负荷不断增加等问题,传统虚拟化平台方案已无法满足现有企业业务建设需求。文章详细介绍Kubernetes 技术架构,从Docker技术、容器与虚拟化对比、Kubernetes概念等方面细致剖析Kuber-netes实现原理,设计一种基于Kubernetes+Docker技术的开源容器云平台方案。并对实施效果及面临问题做总结讨论,整体建设方案具有较强的参考意义。
关键词虚拟化;Kubernetes;Docker;容器云
图1
container容器用法
容器与虚拟化技术对比
2
的容器云平台设计
2.1
Kubernetes 核心概念
Kubernetes 是一个基于Docker 容器技术的集
管理系统,简称k8s 。Kubernetes 使开发人员只需要关注应用开发的本身,而不用关注如何提高资源利用率等问题,这些问题都交由Kubernetes 来处理。
Kubernetes 能够对跨主机的Docker 容器进行管理,
为容器提供服务发现、弹性伸缩、负载均衡以及部署维护等重要功能[1]。
Kubernetes 对运行在其上的应用进行实时状态
监控,当集判断出容器状态异常时,可自动对应用进行重启。同样,在资源调度方面,可根据不同
worker 节点的负载情况,应用自动调节迁移,从而
达到自动化负载均衡,提高资源利用率。当容器应用
负载(CPU 、内存)达到预设阈值时,Kubernetes 可以进行负载弹性伸缩。
容器技术天生带有回滚属性,因为每个历史容器或者镜像都会有保存,而替换一个容器或者某个历史镜像是非常快速和简单的。对于某些需要更新的应用,也可以针对不同应用版本进行滚动更新。当发现更新后版本出现问题时,可以第一时间进行应用版本的回滚,恢复至初始状态,保证业务稳定运行。集整体规模也可以随着后期业务应用系统的逐渐增多而平滑升级。
因此,采用Kubernetes 管理Docker 容器,对于业务资源的日常监控和集资源整体利用率的提高有着显著的优势。
2.2Kubernetes 架构
Kubernetes 架构如图2所示。
图2Kubernetes 架构
1)master节点组件
a)etcd:集键值存储,保证整个集一致性状态,可以看作是集的“数据库”。
b)kube-apiserver:是kubernetes里所有资源的增、删、改、查等操作的唯一入口,也是集控制的入口进程[2]。
c)kube-controller-manager:集内部管控中心,负责集内各个master节点、worker节点状态,监测运行容器的健康状态,发现故障自动重启。
d)kube-schedule:控制资源调度,根据自由算法自动调度容器,提升集整体利用率。
2)worker节点组件
a)kubelet:负责运行容器的启动、停止等,并且与master节点保持通信。
b)kube-proxy:负责集内部容器的服务负载均衡。
2.3Docker和Kubernets环境部署
Docker引擎的环境部署可利用阿里云镜像仓库方式,po的配置源信息如下。
[docker-ce-stable]
name=Docker CE Stable-MYMbasearch
baseurl=https://mirrors.aliyun/docker-ce/lin-ux/centos/7/MYMbasearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun/docker-ce/lin-ux/centos/gpg
Kubernets系统内部各个组件默认采用TLS(传输层安全性协议)证书进行通信加密,使用cfssl生成证书和秘钥,存放在各节点的/etc/kubernetes/pki/目录中[3]。
2.4高可用集部署
1)节点规划
Kubernetes集规划3台master节点+3台worker节点,部署环境规划见表1。
2)高可用部署
Kubernetes集worker节点可以随着业务负载的增加而随之平滑地横向扩展。因此,在建设初期,为保证集的整体健壮性,通常采用多master 节点部署。worker节点通过集内部负载均衡连接到master节点。多master节点通过Nginx+ Keepalived架构实现集高可用,部署简单,有利于管理。同时,多etcd也可以组成etcd集,保证集数据库的高可用。Kubernete高可用部署架构如图3所示。
3
3.1实施效果
利用Kubernete+Docker容器技术搭建生产云平台,是目前业界较为主流的技术建设方案,底层业
表1部署环境规划表
节点主机名IP节点类型运行服务
master01172.28.20.241
Kubernets
master节点
docker、etcd、kube-apiserver、kube-controller-manager、
kube-schedule、kubectl、kubelet、metrics、calico
master02172.28.20.242
Kubernets
master节点
docker、etcd、kube-apiserver、kube-controller-manager、
kube-schedule、kubectl、kubelet、metrics、calico
master03172.28.20.243
Kubernets
master节点
docker、etcd、kube-apiserver、kube-controller-manager、
kube-schedule、kubectl、kubelet、metrics、calico
worker01172.28.20.246
Kubernets
worker节点
docker、kubelet、kube-proxy、calico
worker02172.28.20.247
Kubernets
worker节点
docker、kubelet、kube-proxy、calico
worker03172.28.20.248
Kubernets
worker节点
docker、kubelet、kube-proxy、calico
务采用Docker 容器服务,整体集采用Kubernete 平台统一管理,实施效果如下。
1)业务部署效率提升
区别于传统虚拟化平台的部署升级方式,Ku-
bernete 容器云平台应用系统升级时,只需要运维人
员选择应用镜像版本和副本数量,执行命令,平台自动升级,且升级过程中业务不中断。升级后,若发现新版本业务有问题,也可以平滑地回滚至旧版本,部署效率更高。
2)业务故障率下降
利用Kubernete 容器云平台高可用架构,实现宿主机物理硬件冗余,内部容器业务发生故障时,平台也可以自动在其他worker 节点自动发布新业务,实现自动化部署。
3)集监控能力提升
Kubernete 容器云平台采用多级监控模式,运维
人员可以在监控界面上对集、节点、应用、服务、配置全面监控,也可以配置、短信、邮件等告警模块,实时推送故障信息,加快故障应急处理进程。
4)人员成本下降
Kubernete 容器云平台架构特点决定了平台自
动故障修复能力相较于传统虚拟化平台有了质的提升。因此,也减少了运维人员的手工配置及操作,显著提升了运维效率。
3.2面临问题
利用Kubernete +Docker 建设容器云平台,在面
对不同业务场景时,有以下几方面问题需要考虑与解决。
1)隔离性问题
传统虚拟化方案,将底层宿主机硬件资源完全虚拟化,不同业务部署在不同虚拟机上。当其中一台虚拟机出现故障时,其他虚拟机业务不受影响,资源隔离性较高。Kubernete+Docker 架构,不同容器业务共享同一个操作系统内核及驱动,更易通过外部安全漏洞攻击底层操作系统,从而影响上层容器服务。如果是在不同虚拟机中部署不同容器服务的方式,则需要面临增加硬件成本,服务性能降低等问题。
2)性能问题
虚拟化技术与容器技术,本质上都是降低了操作系统环境与业务应用的耦合度。虽然提升了宿主机的硬件利用率,但业务同时部署在单一宿主机上,也发生了更多的数据交互与网络连接。在业务低并发时期,前端应用感受不明显;当业务繁忙时,同一宿主机或虚拟机需支撑的容器服务资源就会紧张,造成队列堵塞,前端应用卡顿。因此,并不是所有的应用场景都适用于容器技术。
3)存储方案
容器技术的诞生,其实是为了更好的将复杂的业务系统解耦,“微服务”化应用。容器的弹性伸缩、灰度发布、升级回滚等技术特点也是为了更好地服务于应用系统。对于后端数据库存储,虽然目前可以利用
持久化存储方案进行构建,但整体资源交互会
图3Kubernete 高可用部署架构
(上接第6页)
单一供应商提供的、拥有相应EMS的单片系统。通过分解,可以将ROADM分解为单独的应答器、波长选择开关和底板,所有这些组件都可由不同供应商来提供。分解提供了更大灵活性和创新能力,以及针对每种技术使用“同类最佳”的能力。但是,分解还会导致网络中需要管理的组件数量明显增加,这使得定位和解决问题变得更加复杂。正如硬件和软件的分离一样,分解会导致需要管理的接口更多,以及新警报(当公开新接口时)、定位问题所需的相应附加关联出现。这需要对不同模块及其角、接口和故障模式有深入的了解。
6
SDN和NFV共同为网络运营带来了新机会,以系统地实现网络功能自动化,并引入新的灵活性以及对不断变化的网络和客户状况的快速动态响应。构建基于NFV的网络运营体系,可实现通信网络运营的升级。NFV运维转型是一个循序渐进的过程,必将随着NFV发展和规划目标分阶段分步骤实现。
参考文献
1约翰·多诺万,克里什·普坦布,等.软件定义网络之旅:构建更智能更快速更灵活的未来网络[M].郎
为民,程如岐,马卫国,等,译.北京:人民邮电出版社,2020.
2郎为民,张汉,赵毅丰,等.网络功能虚拟化技术研究[J].
电信快报,2019(7):1-5.
3Stallings W.Foundations of Modern Networking:SDN,NFV,QoE,IoT,and Cloud[M].Boston:Addison-Wes-ley Professional,2015.
4郎为民,裴云祥,余亮琴,等.软件定义网络云边缘平台研究[J].电信快报,2020(11):1-5.
5AGARWAL S,MALANDRINO F,CARLA F,et al.VNF Placement and Resource Allocation for the Support of Vertical Services in5G Networks[J].IEEE/ACM Transactions on Networking,2019,27(1):1-14.
6郎为民,张汉,吴帆,等.虚拟化网络功能分解问题研究[J].电信快报,2019(9):1-5,11.
郎为民(1976—),男,教授,硕士生导师,博士,主要研究方向为未来网络、物联网、云计算和大数据。
收稿日期:2020-12-15
更为频繁,磁盘效率和系统安全性都会受到考验。因此,相较于容器技术,数据库系统更适合采用传统的虚拟化方案部署。
4
基于Kubernetes+Docker技术的开源容器云平台的建设,将运维人员从以往传统的繁杂工作中解放出来,集整体的健壮性、稳定性显著提升,日常业务调整、升级的故障率也大大降低。随着容器技术的发展和普及,面临的问题,对应的解决方案也会越来越多。Kubernetes+Docker技术平台的搭建,为进一步建设功能更为丰富、实用性更强的容器云平台打下了良好的基础,对推进企业后续传统云平台业务系统改造具有较大的意义。
参考文献
1于泽萍.面向微服务架构的容器云平台设计与实现[D].
哈尔滨:哈尔滨工业大学,2018.
2龚正,吴治辉,崔秀龙,等.Kubernetes权威指南:从Docker到Kubernetes实践全接触(第4版)[M].北京:电子工业出版社,2019.
3王骏翔,郭磊.基于Kubernetes和Docker技术的企业级容器云平台解决方案[J].上海船舶运输科学研究所学报,2018(9):51-57.
夏畅(1986—),男,高级工程师,硕士,从事报业信息化、容器云平台基础设施建设等方面的研究、设计与咨询工作。
收稿日期:2020-10-23