您好, 访客   登录/注册

基于Kubernetes的容器云平台建设

来源:用户上传      作者:

  摘要:Kubernetes(简称K8S)已经成为容器云管理的事实标准,如何构建K8S容器云平台具有很大的市场空间和现实意义。本文通过分析容器云的软硬件设施,K8S的核心部件构成,结合比较成熟的开源解决方案,给出了建设K8S容器云平台的基本架构,对于中小企业搭建容器云平台,具有现实的参考意义。关键词:Kubernetes;容器云;镜像仓库;日志管理;监控告警
  中图分类号:TP391 文献标识码:A
  文章编号:1009-3044(2019)36-0047-02
  在云计算时代,企业在线购买云厂商的云主机,在数分钟之内,就可以创建出所需的多台虛拟机,部署企业自己的应用。与购买硬件设备自己搭建的传统方法相比,响应速度有了很大的改进,实施效率有了很大的提高。
  但是在云主机的操作系统上构建自己的应用,还涉及应用软件运行环境的准备,采用云主机方式仍然需要一个较长时间的部署过程。
  容器技术的出现为云计算增添了新的活力,通过对应用和运行环境的整体打包,生成单一的镜像,在任何Docker平台上部署一个Web应用,只需要一条命令,在几秒之内就可以完成应用部署,极大地提升了应用部署的效率。
  在单机上运行容器非常方便,对于多台机器上的容器之间,如何进行协同工作,容器编排管理成为竞争热点。经过了这几年容器技术的高速迭代和发展,K8S打败了Swarm和Me-sos,成为容器编排的企业标准。国外的主要云服务厂商亚马孙、谷歌,国内的阿里云、腾讯云和华为云等等,均已推出K8S容器云服务,为企业提供正式的商业服务。
  Kubernetes具有很多优点:屏蔽了底层硬件的差异;支持上千台的大规模计算机集群;支持高可用部署;具有弹性伸缩能力,可以扩展或收缩容器的规模,应对突发访问请求;容器部署与复制白动完成;将容器组成服务,提供容器级的负载均衡;集群内机器宕机、容器失效,集群自动修复,具有容错能力、白愈能力;开源社区活跃,各大IT厂商纷纷支持;非常适合互联网应用。正因K8S具有这么多的优点,掌握K8S容器云技术,建设K8S容器云平台势在必行。
  1容器云的硬件基础设施
  云平台是运行在硬件设备上的,建设容器云平台,服务器、存储、交换机、防火墙等设备同样不可缺少。服务器可以直接使用裸机部署以减少性能损失,也可以通过KVM或VMWare,先虚拟化,获得更多的虚机,继而在虚机的基础之上,再进行架构设计。好处是虚拟机多,平台架构设计更加灵活,可以根据业务需要,创建多个K8S平台。缺点是多了一层虚拟化,硬件性能会有所损耗。
  K8S需要存放应用的持久化数据,存储设备也是必不可少的,直接购买存储厂商的存储,性能和售后均有保障。如果企业有自己的研发力量,为降低成本,也可以自行构建Ceph、GlusterFS等分布式存储,提供文件系统和块存储设备以及对象存储设备。
  运行K8S平台的主机节点,需要有网络层支撑。网络架构设计上划分管理网、数据网、外部网等也是必要的,可有效隔离网络管理流量和数据业务流量。服务器多个网卡,尽可能使用万兆设备解决网络带宽的瓶颈问题。在网络出口处,对外发布的应用,还需要相应的网络安全、负载均衡设备来保证应用的安全和性能。
  2容器云的软件运行环境
  K8S容器云是运行在Linux系统及Docker容器环境之上的,Linux系统有很多发行版本,Ubuntu Server LTS版本是推荐的操作系统,更适合运行K8S容器云平台。整个K8S平台的架构,都是以Docker容器技术为基础的,K8S的所有组件以及用户的应用软件,都是运行在Docker容器环境之上。
  3 K8S核心组件的部署
  K8S的核心组件分为两类,一类安装在管理节点上,另一类安装在工作节点上。
  在管理节点上主要运行Etcd、APIServer、Scheduler、Control-ler-Manager等核心组件。APIServer为K8S集群提供统一的访问接口,实现身份认证、授权和准入控制、API注册和发现等功能,对于整个K8S集群的操作,都是通过API进行的,管理员使用Kubectl命令行工具通过APIServer实现对K8S集群的管理。Etcd数据库存储整个K8S集群的重要信息,只有APIServer能够访问Etcd数据库。Scheduler根据各种调度策略,负责将Pod调度到相应Node节点上运行。K8S中的各种资源有对应的控制器(Controller),Controller-Manager组件负责K8S中各种控制器的管理,监控并维护整个集群达到期望的状态。
  工作节点上主要运行Kubelet和Kube-proxy等核心组件。Kubelet主要负责容器的创建删除等生命周期管理,以及容器的存储、网络管理、健康检查、监控等。Kube-proxy监听APIServer中Service和Endpoint的变化,通过IPtables或IPVS模式,创建路由规则,实现Service和Pod之间的服务负载均衡。
  K8S架构复杂,核心组件也较多,技术人员学习掌握比较困难。使用K8S二进制软件包方法安装、使用官方Kubeadmin工具安装K8S,许多镜像因为网络访问的问题无法下载,K8S部署经常出现问题。为解决K8S学习难操作难的问题,出现了Rancher和Kubesphere等比较优秀的开源K8S管理解决方案,大大降低了学习和操作的难度,K8S易用性有了很大提高,更适合企业云平台部署。
  4私有镜像仓库管理
  企业内部的应用往往包含敏感数据,不适合运行在公有云上,企业也希望这些应用的Docker容器镜像能保存在内部网络中。另外,与从公共镜像仓库下载容器镜像相比,内部网络带宽更大,K8S部署容器更快捷稳定。企业有必要在内部搭建一套私有镜像仓库。Harbor就是一款很好的私有镜像仓库产品。   Harbor是VMWare公司开源的容器镜像管理产品,它在Docker官方的简易仓库Registry基础上,加入多个组件,实现了项目管理、用户权限管理、镜像管理、Web图形界面等基本功能,成为一款企业级的开源镜像管理产品。由于它采用容器化的安装方式,部署非常方便,使用图形化的管理界面,用户操作方便,功能够用,很快得到了普及。
  企业内的开发人员将应用的镜像通过Docker push命令上传到私有镜像仓库中。运维人员在K8S平台上部署应用时,直接到私有仓库中快速下载应用镜像,部署到K8S平台中。私有仓库是建设容器云必不可少的功能。
  5容器云的集中日志管理系統
  K8S可以管理上千个节点的集群,如果集群出现问题,需要通过日志进行排查,要想发现故障在哪一个环节,只靠命令行的方式去操作,简直无法想象。构建一套集群的日志收集、存储、查询和图形化展示的集中式日志管理系统对于系统运维非常必要。
  EFK组合是常用的一种日志管理方案,主要有三个组件构成(ElasticSearch、Fluentd、Kibana)。Fluentd安装到所有的K8S节点上,充当日志代理角色,负责将各节点上的各种日志收集、过滤、发送到后端的ElastieSearch;ElastieSearch负责日志的存储和索引,通过HTTP API方式提供全文检索功能;最终在Kibana面板上对采集来的各种日志数据进行查询分析,用图形、表格形式进行集群日志展示。
  6容器云的监控告警系统
  Prometheus是开源的监控告警和时序数据库系统,是云原生计算基金会CNCF的产品之一,Prometheus项目非常活跃,社区提供了很好的支持,包括数据库、硬件设备、持续集成工具、存储软件、Web服务器软件、日志和监控软件等上百种应用都提供了专门的Exporter配合使用,一些应用直接内置Pro-metheus数据格式支持,比如Etcd、Kubernetes、SkyDNS等。
  Prometheus也是时序数据库,它通过Pull方式到各应用的Exporter上拉去度量数据,存储到自身的时序数据库中,内置PromQL查询语言。Alertmanager组件是独立的告警管理器,可以根据事先设定的告警策略,向邮件系统、企业微信、钉钉、Slaek等即时通信工具发送告警数据,及时提醒管理人员。Grafana组件是一款常用的数据显示面板,可以将Prometheus数据库中的指标数据以图形化的方式直观地展示在面板中。
  在K8S集群中的各节点上部署node-exporter组件,可以获取各节点上CPU、内存等资源的度量数据;通过部署kube-state-metries组件,可以获取K8S集群中Service、Deployment或者Daemonset等各种资源的数据;K8S已经内置Prometheus接口,Prometheus可以直接从集群获取K8S核心组件的度量数据;而对于很多第三方的容器应用,社区都已推出相应的exporter来支持Prometheus,根据需要将这些Exporter部署到集群中,由Prometheus向这些专用的exporter抓取度量数据。
  有了监控告警系统,K8S容器云平台的整个运行状态可以用直观的图形化的方式在Grafana面板中集中展示,无论是资源占用、系统性能、告警事件、健康状态等,都能够一目了然。有利于运维人员及时了解集群状态,并在第一时间获取告警信息。
  7容器云的图形化管理
  Kubemetes官方提供Dashboard面板,能够查看K8S集群的节点状态、K8ST作负载、部署、服务、容器等各种资源的基本情况,在Web管理界面上完成集群的应用部署、日志查看等各项基本操作,功能比较简单。
  Kubesphere、Rancher是另两款比较优秀的开源图形化K8S管理T具,除了可以实现对集群机器以及K8S的接管以外,还各自增加了特有的功能,集成了项目管理、多租户管理、应用商店、监控告警、持续集成和部署、服务网格等增强功能,极大降低了用户使用K8S的难度,虽是开源软件,但已达到了企业级应用的水平。
  8结束语
  Kubemetes功能非常强大,可以轻松管理和调度上千台计算机协同运作,提供强大的集群处理能力,已经成为容器云管理的事实标准。但由于其概念众多,操作复杂,非常不容易学习掌握和推广应用,完整的K8S平台高效运行所需的各个功能模块较多,本文通过对K8S容器云的硬件基础设施、软件运行环境、Kubernetes核心组件、私有镜像仓库以及事件日志、监控告警、图形化管理等运行容器云平台必备工具进行逐一介绍,像搭积木一样,将各个基本功能模块都搭建好,构建一套比较完整实用的容器云平台,对于容器云推广普及具有指导作用。
  参考文献:
  [1]龚正,吴治辉,崔秀龙,等.Kubernetes权威指南[M].电子工业出版社,2019.
  [2]浙江大学SEL实验室.Docker容器与容器云[M].人民邮电出版社,2016.
  [3]郑冰.基于Kubernetes的企业级容器云平台设计[J].数字技术与应用,2019(6).
  [4]王骏翔,郭磊.基于Kubernetes和Docker技术的企业级容器云平台解决方案[J].上海船舶运输科学研究所学报,2018(3).
  【通联编辑:梁书】
  收稿日期:2019 -10 -10
  作者简介:王伟军,男,江苏阜宁人,工程硕士,南京报业传媒集团技术部工程师,中级职称,研究方向为计算机网络、云计算、容器
  技术。
转载注明来源:https://www.xzbu.com/8/view-15123611.htm