Kubernetes可视化管理平台

2021-03-08 00:24赵旭杰粱正和
计算机技术与发展 2021年2期
关键词:镜像组件容器

赵旭杰,粱正和

(河海大学 计算机与信息学院,江苏 南京 211100)

0 引 言

随着计算机技术的快速发展,传统的应用部署方式已经无法满足开发者的需求。现如今,既要避免应用与操作系统的绑定,又要改善虚拟机技术十分笨重,不利于移植的特点。

Docker这种应用容器引擎的出现填补了这个空缺。相对于传统方式的虚拟机,它占用的空间更少,启动更快,并且不需要虚拟出整个操作系统,只需要虚拟出一个小规模的环境。每个容器之间互相隔离,并且有着自己的文件系统。容器之间可以通过共用网络资源栈的方式进行交互[1]。任何应用都可以被打包成镜像,在发布成功后,供其他人拉取使用[2]。但是,要将Docker应用于具体的业务实现,还是存在着很大的困难。人们需要一种基于容器的集群管理平台,来解决Docker在编排、管理和调度等方面上存在的问题。

Kubernetes的出现填补了这个空缺,它是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、自动维护等功能[3-4]。并且因为它是基于容器的技术,在移植性、扩展性和自动化方面也具有很大的优势。Kubernetes可以满足生产环境中的很多常见需求,比如:多个进程的协同工作、存储系统挂载、应用实例的复制、日志访问、负载均衡等[1]。通过Kubernetes,可以直接管理云平台中多个主机上的容器化的应用。但与此同时,它也带来了一些操作上的麻烦。目前,大多使用Kubectl命令行的方式,对平台应用进行管理。而这种方式,很大程度上降低了开发的效率,并且提高了运维的成本。

为了改善这种情况,该文使用集成开发平台Fabric8实现对Kubernetes集群的操作,并且使用前端框架React和组件库Ant Design实现平台的可视化。通过该平台,管理人员可以对Kubernetes中的物理节点、Pod节点、Replication Controller、Namespaces、Service 直接进行操作,很好地取代了命令行的方式。

1 系统集成相关技术

1.1 Kubernetes

Kubernetes是一种面向应用的容器集群部署和管理的系统,前身源自Google公司内部的Borg系统,有着强大的开源支撑和10年以上的技术沉淀[5]。相对于Apache下的Mesos和Docker下的SWARM,Kubernetes具备的功能更加齐全,部署也更加方便。Kubernetes在具有强大的集群管理、防护策略和自我修复能力的同时,还支持弹性伸缩和负载均衡,并且提供便捷的服务升级和完善的管理工具[6]。Kubernetes架构如图1所示。

图1 Kubernetes架构

Kubernetes由管理节点和工作节点组成。可以简单理解为它们之间是主从的关系[7]。为了提高平台的可靠性和决策能力,一般会部署奇数数量的管理节点,而工作节点也会部署多个,具体数目由实际资源情况决定。采用这种策略,可以有效地避免在某个节点宕机后,对整个集群产生影响。

管理节点中的核心组件有APIServer、Etcd、Controller Manager、Scheduler等。APIServer是资源操作的唯一入口,有着身份认证、授权和访问控制等机制,也可以用于API注册和发现[1,8-9]。管理人员借助Kubectl命令行工具,可以实现对于Kubernetes集群的管理。Etcd是一个可信赖的分布式键值存储服务,是Kubernetes实现存储化的方案,里面保存着整个集群的状态[9-10]。而Scheduler则负责资源的调度,可以将Pod调度到相应的物理机器上[11]。在调度的过程中,它会首先与APIServer进行交互,然后通过APIServer将请求写入到Etcd中。Controller Manager负责控制器的管理,使得集群达到期望中的状态。Controller Manager中的Replication Controller、Replica Sets和Deployment都可以直接或间接控制Pod的副本数量,使其达到期望的副本数目。并且Controller Manager具备故障检测、自动拓展和滚动更新等功能。

工作节点中主要运行着Kubelet、Kube-proxy和Pod。Kubelet负责管理容器的生命周期,可以对节点中的容器进行删除和添加[8,12]。为了实现容器间文件的持久化和共享,需要借助Volume(CVI),而这也是由Kubelet进行管理的[1,13]。除此之外,Kubelet还负责容器的网络管理和监控等。因为节点中容器有着大量的副本,所以Kubernetes Service想要访问其中对应的副本,需要借助于Kube-proxy。并且Kube-proxy通过IPVS的模式,可以让Service与Pod之间实现负载均衡。Pod既是工作节点中的主要成分,也是Kubernetes的最小单位,它的生命周期取决于其内部容器的状态[14]。

1.2 Fabric8

Fabric8是一个基于Docker、Kubernetes和Jenkins的开源微服务平台。通过Continuous Delivery管道可以很方便地创建、编译、部署和测试微服务,并且通过Continuous Improvement和ChatOps可以对这些微服务进行运行和管理[15]。

在该项目中,会通过Fabric8调用Kubernetes的功能接口,使用Java语言实现可视化界面中后端接口的开发。

1.3 React

React是一个用于构建页面UI的库,它以组件化的思想开发网站。开发者从功能的角度出发,把UI拆分为不同的组件,各组件只负责自己部分的UI和逻辑,彼此互相独立,不同的组件可通过组合或嵌套的方式和其他组件一起使用[16]。

该文通过React技术,将Kubernetes中每个应用拆分为各个组件。可以在菜单栏中,选择想要操作的功能,进入相应的组件。通过各个功能的结合,可以达到在网页中,直接操作Kubernetes的目的。

2 平台设计

2.1 总体设计

Kubernetes容器云管理平台分为四层架构(见图2),分别为:资源层、容器层、平台层和管理层。

图2 层次架构

资源层是平台的最下面一层,它为容器层提供容器镜像和一些系统配置文件。研发人员可以直接对其进行修改配置,也可以通过管理层中的应用对其进行管理。

容器层是Kubernetes集成平台的基础,由开发人员自身创建的私有镜像库提供。可以根据实际需求,自由组装平台需要的运行环境。

平台层是系统的核心,其他各层都是为其服务或者对其进行配置。其中最重要的是Docker和Kubernetes这两个组件。Docker为容器提供了运行环境,Kubernetes则负责统一编排和调度Docker。

管理层主要是配置平台层中的应用,InfluDB加上Grafana可以对平台的状态进行监控,而Harbor会被用来管理私有镜像库。

2.2 平台架构描述

使用React作为前端开发框架,使用Axios用于前后端接口的交互,并且使用React生态圈的新特性React Hook进行开发。借助React Hook可以把所有的组件都定义为函数,而不使用原来继承类的形式,这样可以使得组件的复用性得到很大的增强。

借助React Router来保持UI与URL间的同步,并且使得向应用中添加视图和数据流更加便捷。Axios向后端端口请求到的数据,会在页面跳转后,被渲染到对应的UI组件中。

项目后台由Spring和Spring Boot框架开发而成(见图3),该层使用RequestMapping来完成请求地址的映射,使用框架Fabric8完成与云集成平台的交互,从而可以通过前端页面来完成对于Kubernetes集成平台的管理。

图3 前端各框架的关联

2.3 功能模块描述

平台主要是为了使得原本的命令行管理方式,变得所见即所得。所以要把原本的功能,通过页面的形式给复现出来。如图4所示,主要包括以下几种功能:

图4 功能模块

(1)物理节点。

需要知道部署在云平台上的主机节点和从属节点的IP地址。

(2)命名空间。

为了解决在集群下管理对象时的复杂性问题,Kubernetes使用命名空间的概念。实际使用的时候,需要做到查看和创建命名空间的功能。

(3)Service管理。

Service是Kubernetes中的核心资源对象,它将运行在一组Pods上的应用程序公开为网络服务的抽象方法。所以,既要获取所有的Service服务名称,也要知道每个Service下的具体信息。并且,也需要根据需求,添加或删除相应的Service。

(4)Replication Controller管理。

RC(Replication Controller)的主要作用是:确保容器应用的副本数,始终保持在用户定义的数量。它可以根据情况,创建或回收Pod。在该模块中,要实现对于所有RC的查询,并且可以查询每个RC的详细信息。除此之外,还可以根据需要,手动增加或删除相应的RC,也可以设置容器应用中的副本数。

(5)Pod节点操作。

Pod是Kubernetes中能够创建和部署的最小单位,里面包含一个或多个容器。所以,需要清楚地知道里面的各种属性。

(6)中间件。

这里的中间件,主要是实现了对于MyCat的配置和查询。可以通过前端页面,直接配置相应的MyCat文件,而不需要在服务器端进行配置。

(7)资源监控。

该功能采用InfluDB(时序数据库)加上Grafana的形式。InfluDB是一种开源分布式时序、时间和指标数据库,可以按照时间维度索引数据。Grafana是一款美观、强大的可视化监控指标展示工具,可以很好地展示InfluDB监控到的数据。通过InfluDB将Kubernetes集群平台的资源使用情况记录下来,再通过Grafana进行图形化展示,可以很好地监控集群平台的状态。

(8)镜像管理。

使用Harbor作为Docker私有镜像仓库。Harbor提供了友好的Web UI界面,也可以进行用户权限管理等功能。将Harbor集成到该平台之中,可以很方便地对镜像进行操作。

(9)日志模块。

平台中的日志模块,主要实现了对于操作的记录,以方便日后的还原和查询。与此同时,也包含一些配置文件的读取和操作。

3 实现细节

3.1 前端组件实现

前端组件的组合,得益于React Router的作用。React Router使得组件之间可以借助统一资源定位符,完成嵌套和地址的映射。这些组件中,有负责导航的类,比如:NsIndex、AdminIndex、ServiceIndex等。也有负责添加、删除、展示的类,比如:NodeShow、ServiceShow、AddService等。它们借助于React Hook中的生命周期函数和Axios框架,可以实现与后端程序的交互。

3.2 后台端口实现

后台通过RequestMapping完成请求地址的映射,前台的请求会首先在自身创建的SysGeneratorControlle类中进行处理,然后调用对应的业务逻辑类。在进行业务逻辑处理的时候,会使用到一些自定义的类,比如:nodeSelf、podSelf、serviceSelf,这些类全部继承自Fabric8框架中的原有类。该文在原来的基础上,定义了一些公共方法,来完成一些特定的功能,比如:选择性展示、添加、删除、搜索等。

4 结束语

主要阐述了Kubernetes可视化管理平台的构建方式。主要是通过React框架来完成前台页面的渲染,通过Fabric8进行Kubernetes接口的调用,通过Axios框架实现前后端数据的交互。相比于通过指令控制的方式,这种方式更加简便,对操作人员的要求也更低。

该文构建的可视化管理界面,实现了一些核心功能,但也存在着一些不足和缺漏。在此基础上,可以进一步完成功能上的开发,也可以进行安全上的完善。

猜你喜欢
镜像组件容器
Android系统上移动组件化应用框架设计
创建Vue组件npm包实战分析
智能机械臂
舰载雷达TR组件冲击计算方法分析
镜像
难以置信的事情
镜像
液体对容器底及容器对桌面的压力和压强
取米
镜像