CN112181764B - Kubernetes资源数据的监视方法及装置 - Google Patents

Kubernetes资源数据的监视方法及装置 Download PDF

Info

Publication number
CN112181764B
CN112181764B CN202011008650.2A CN202011008650A CN112181764B CN 112181764 B CN112181764 B CN 112181764B CN 202011008650 A CN202011008650 A CN 202011008650A CN 112181764 B CN112181764 B CN 112181764B
Authority
CN
China
Prior art keywords
container
running state
kubernets
monitoring
state information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011008650.2A
Other languages
English (en)
Other versions
CN112181764A (zh
Inventor
张康
孙超
吕志强
王艳蓉
赵振
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NR Electric Co Ltd
NR Engineering Co Ltd
Original Assignee
NR Electric Co Ltd
NR Engineering Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NR Electric Co Ltd, NR Engineering Co Ltd filed Critical NR Electric Co Ltd
Priority to CN202011008650.2A priority Critical patent/CN112181764B/zh
Publication of CN112181764A publication Critical patent/CN112181764A/zh
Application granted granted Critical
Publication of CN112181764B publication Critical patent/CN112181764B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3058Monitoring arrangements for monitoring environmental properties or parameters of the computing system or of the computing system component, e.g. monitoring of power, currents, temperature, humidity, position, vibrations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3006Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is distributed, e.g. networked systems, clusters, multiprocessor systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种Kubernetes资源数据的监视方法及装置,包括如下步骤:在Kubernetes集群环境中部署Prometheus监控组件,调用Prometheus监控组件的API接口,获取Kubernetes集群资源的性能数据;定义Kubernetes的客户端,调用客户端的API接口,获取Kubernetes集群资源的静态信息和运行状态信息;将集群资源的性能数据以及集群资源的静态信息和运行状态信息存储在监视组件,通过监视组件监视集群的资源数据。本发明能够提高Kubernetes集群资源属性信息采集的完整性,能够扩大监视范围,包含了对容器进程级别的监视。

Description

Kubernetes资源数据的监视方法及装置
技术领域
本发明涉及Kubernetes资源数据的监视方法及装置,属于电力系统云平台技术领域。
背景技术
随着现代互联网技术的发展,云平台技术的开发与应用频率越来越高。容器技术在云平台上的运用也逐渐成为主流,Docker作为最广泛应用的一种容器技术,使得软件的部署变得容易起来,真正实现了一次部署各处运行的目的。更重要的是Docker相比传统虚拟机技术有着资源占用率低,运行效率高的优势。而在云平台中,Kubernetes是跨主机集群的开源Docker容器集群管理系统,用于管理云平台中多个主机上的容器化的应用,为容器化的应用提供了资源调度、部署运行、服务发现、扩容及缩容等一整套功能,Kubernetes的目标是让部署容器化的应用简单并且高效,它提供了应用部署,规划,更新,维护的一种机制,在业界得到广泛应用。
虽然Kubernetes能够显著简化在容器中以及在云平台上部署应用程序的过程,但同时它也增加了日常管理应用程序性能、获取服务可见性以及监视->报警->故障排除流程的复杂性。从物理/基础设施的角度来看,Kubernetes集群由一组master节点监控的nodes组成。master节点的任务包括跨node节点的容器编排、状态追踪以及通过REST API和UI界面暴露集群控制。从逻辑/应用的角度来看,Kubernetes集群按照层级方式排列:多个services甚至多个namespaces可以分散在同一个物理基础设施中。每个service都由多个Pod构建,而每个Pod都有多个container构成,这就为监视增加了一定程度的复杂性,即使是适度的Kubernetes部署也是如此。
现阶段有多个解决方案,可以监视服务器上Kubernetes的一些指标数据,包括Probes、cAdvisor、Heapster、Kubernetes Dashboard等开源工具。这些开源工具能够采集Kubernetes一些基本的资源利用信息,例如CPU、内存等这些性能数据,但收集的范围还是有限,存在有些资源数据的属性信息没有采集,并且没有深入到Pod内的数据,包括容器、进程等资源信息;并且这些工具在集群环境中的部署是重型的,需要对工具的原理和使用拥有充分的理解,而这些工具的说明文档资料不是很丰富,也对这些工具的学习造成了一定困难。
发明内容
本发明的目的在于克服现有技术中的不足,提供Kubernetes资源数据的监视方法及装置,能够解决资源数据的属性信息采集不全的问题。
为达到上述目的,本发明是采用下述技术方案实现的:
第一方面,本发明提供了一种Kubernetes资源数据的监视方法,包括如下步骤:
在Kubernetes集群环境中部署Prometheus监控组件,调用Prometheus监控组件的API接口,获取Kubernetes集群资源的性能数据;
定义Kubernetes的客户端KubernetesClient,调用客户端KubernetesClient的API接口,获取Kubernetes集群资源的静态信息和运行状态信息;
将Kubernetes集群资源的性能数据以及Kubernetes集群资源的静态信息和运行状态信息存储在监视组件,通过监视组件监视Kubernetes集群的资源数据。
结合第一方面,进一步地,所述Kubernetes集群资源的性能数据包括:CPU的使用率、内存使用率、磁盘读写速度和网络流量速率数据。
结合第一方面,进一步地,所述定义Kubernetes的客户端KubernetesClient包括如下步骤:
新建Kubernetes的客户端KubernetesClient;查询连接Kubernetes的部署主机的IP,将部署主机的IP配置在Kubernetes的客户端KubernetesClient上。
结合第一方面,进一步地,所述Kubernetes集群资源的静态信息和运行状态信息包括如下信息:
现场namespace的静态信息和运行状态信息:现场namespace的静态信息包括名称、分类标识和已创建时间数据,现场namespace的运行状态信息包括状态;
应用service的静态信息和运行状态信息:应用service的静态信息包括名称、分类标识、集群IP、创建时间、内部端点和外部端点,应用service无运行状态信息;
集群中节点的静态信息和运行状态信息:集群中节点的静态信息包括名称、分类标识、CPU请求值和限制值、内存请求值和限制值、已创建时间数据,集群中节点的运行状态信息包括集群中节点的就绪状态;
Pod实例的静态信息和运行状态信息:Pod实例的静态信息包括名称、所在节点、所属应用、所属现场和已创建时间数据,Pod实例的运行状态信息包括Pod实例运行状态、已重启次数、Pod实例对应分片、Pod实例的CPU使用率、内存使用率、磁盘读写速率和网络流量速率数据;
Pod实例内容器的静态信息和运行状态信息:Pod实例内容器的静态信息包括名称、所属应用、所属Pod实例和已创建时间数据,Pod实例内容器的运行状态信息包括容器运行状态、已重启次数、容器的CPU使用率、内存使用率、磁盘读写速率和网络流量速率数据;
容器内进程的静态信息和运行状态信息:容器内进程的静态信息包括名称、所属应用、所属实例、所属容器和进程ID数据;容器内进程的运行状态信息包括进程运行状态、进程的CPU使用率、内存使用率、磁盘读写速率数据;
持久化存储卷的静态信息和运行状态信息:持久化存储卷的静态信息包括名称、总量、挂载实例列表、访问模式、回收策略和声明数据,持久化存储卷的运行状态信息包括状态。
结合第一方面,进一步地,所述Pod实例内容器的静态信息和运行状态信息通过如下步骤获取:
调用客户端KubernetesClient关于Pod的API接口,获取容器所属Pod的实体类,调用Pod的API接口获取Pod实例内容器的静态信息、该容器的运行状态和该容器的已重启次数;
调用Prometheus监控组件采集该容器的资源使用数据,获取Pod实例内容器的运行状态信息。
结合第一方面,进一步地,所述容器内进程的静态信息和运行状态信息通过如下步骤获取:
调用客户端KubernetesClient的API接口,调用Docker平台的API接口,获取容器内进程的静态信息;
调用Linux系统的系统命令,获取容器内进程的运行状态信息。
第二方面,本发明提供了一种Kubernetes资源数据的监视装置,所述装置包括如下组件:
Prometheus监控组件,用于获取Kubernetes集群资源的性能数据;
Kubernetes客户端组件,用于获取Kubernetes集群资源的静态信息和运行状态信息;
监视组件,用于存储、展示Kubernetes集群资源的性能数据以及Kubernetes集群资源的静态信息和运行状态信息。
结合第二方面,进一步地,所述Prometheus监控组件包括如下组件:
Node-exporter组件,所述node-exporter组件包括CPU、内存、网络和文件系统,能够直接安装在Kubernetes集群的每个master节点上,收集node级别的性能数据;
Prometheus组件,所述Prometheus组件能够对Kubernetes集群环境进行监控,收集Kubernetes集群环境的指标数据;
Kube-state-metrics组件,所述kube-state-metrics组件能够将所述Prometheus组件和所述Node-exporter组件收集的数据转换成Kubernetes能够识别的数据类型;
Prometheus-adapter组件,所述Prometheus-adapter组件能够将所述Kube-state-metrics组件整合收集的数据发布到Prometheus监控组件的API接口。
第三方面,本发明提供了一种Kubernetes资源数据的监视装置,包括处理器及存储介质;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行第一方面任一项所述方法的步骤。
第四方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面任一项所述方法的步骤。
与现有技术相比,本发明至少能够达到如下有益效果:
在Kubernetes集群环境中部署Prometheus监控组件,能够通过调用Prometheus监控组件的API接口,获取Kubernetes集群资源的性能数据,包括CPU、内存、磁盘和网络流量数据,定义Kubernetes的客户端KubernetesClient,能够通过调用客户端KubernetesClient的API接口,获取Kubernetes集群资源的运行状态信息和静态信息包括资源名称、分类标签、创建时间等,能够提高Kubernetes集群资源属性信息采集的完整性,能够扩大Kubernetes集群资源的监视范围,包含了对容器进程级别的监视;利用Prometheus监控组件,能够有效降低Kubernetes集群环境的监视工具学习部署的难度。
附图说明
图1是本发明实施例一提供的Kubernetes资源数据的监视方法的流程图;
图2是本发明实施例一提供的Kubernetes资源数据的监视方法的架构示意图;
图3是本发明实施例一提供的Kubernetes资源数据的性能数据的分类示意图;
图4是本发明实施例一提供的Kubernetes资源数据容器内进程的调用接口示意图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
实施例一:
如图1所示,本发明实施例提供了一种Kubernetes资源数据的监视方法,包括如下步骤:
在Kubernetes集群环境中部署Prometheus监控组件,调用Prometheus监控组件的API接口,获取Kubernetes集群资源的性能数据;
定义Kubernetes的客户端KubernetesClient,调用客户端KubernetesClient的API接口,获取Kubernetes集群资源的静态信息和运行状态信息;
将Kubernetes集群资源的性能数据以及Kubernetes集群资源的静态信息和运行状态信息存储在监视组件,通过监视组件监视Kubernetes集群的资源数据。
如图2所示,本发明实施例提供的Kubernetes资源数据的监视方法的架构示意图,具体监视的Kubernetes资源数据包括:Kubernetes集群资源的性能数据、现场namespace的静态信息和运行状态信息、应用service的静态信息和运行状态信息、集群中节点的静态信息和运行状态信息、Pod实例的静态信息和运行状态信息、Pod实例内容器的静态信息和运行状态信息、容器内进程的静态信息和运行状态信息和持久化存储卷的静态信息和运行状态信息。
具体的监视方法如下:
监视Kubernetes集群资源的性能数据,调用Prometheus监控组件提供的API接口,获取Kubernetes集群性能指标数据,如图3所示,图3展示了Kubernetes性能指标的分类示意图,包括CPU使用率、内存使用率、磁盘读写速率和网络流量速率数据。
CPU使用率在Linux系统中定义为在过去的一段时间里资源占用的CPU时间与CPU总时间的比率。如果有多个CPU或者多核,需要将每个CPU的时间相加,而在Prometheus采集的指标中,container_cpu_usage_seconds_total是容器累计使用的CPU时间,除以CPU的总时间,就可以得到容器的CPU使用率。而集群中所有容器累计使用的CPU时间总和除以集群的CPU总时间,就可以得到集群的CPU使用率。具体的获取PromQL为:sum(rate(container_cpu_usage_seconds_total{image!=””,namespace!= ””,instance!= ””,Pod!= ””,container!=””}[1m])) / (sum(container_spec_cpu_quota{image!= ””, namespace!=””,instance!= ””,Pod!= ””,container!= ””}/100000)) * 100。其中,被除数从里向外解析,括号里是查询条件:image是指镜像名,namespace是指现场名,instance是指节点名,Pod是指Pod名,container是指容器名,全部不为空即获取集群中所有容器;外层的container_cpu_usage_seconds_total是获取容器累计使用的CPU时间;再外层的rate()配合后面的[1m]是计算1分钟内CPU的时间每秒增量;sum()计算集群所有容器的累计使用的CPU时间总和。除数从里向外解析,查询条件和被除数相同,外层的container_spec_cpu_quota是获取容器的CPU配额,它的值是:为容器指定的CPU个数*100000,所以在公式后面要除以100000;外层的sum()计算集群所有容器的CPU配额。
内存使用率在Linux系统中定义为内存使用量与内存配额的比率,在Prometheus采集的指标中,container_memory_rss是容器使用的内存量,container_spec_memory_limit_bytes是容器的内存配额。具体的获取PromQL为sum(container_memory_rss{image!= ””,namespace!= ””,instance!= ””,Pod!= ””,container!== ””}) / sum(container_spec_memory_limit_bytes{image!= ””,namespace!= ””,instance!= ””,Pod!=””,container!=””})。语句的构成和上述的CPU使用率基本相同。
磁盘读取速率是指每秒读取磁盘的字节数(或其他单位),在Prometheus采集的指标中,container_fs_reads_bytes_total是容器累计读取磁盘的字节数。具体的获取PromQL为sum(rate(container_fs_reads_bytes_total{image!= ””,namespace!= ””,instance!= ””,Pod!= ””,container!= ””}[1m]))。同样使用了rate()配合后面的[1m]来计算1分钟内磁盘读取字节的每秒增量,相当于磁盘读取速率。
磁盘写入速率是指每秒写入磁盘的字节数(或其他单位),在Prometheus采用的指标中,container_fs_writes_bytes_total是容器累计写入磁盘的字节数。具体的获取PromQL为sum(rate(container_fs_writes_bytes_total{image!= ””,namespace!= ””,instance!= ””,Pod!= ””,container!= ””}[1m]))。
网络接收速率是指每秒接收网络报文的字节数(或其他单位),在Prometheus采用的指标中,container_network_receive_bytes_total是容器累计接收网络报文的字节数。具体的获取PromQL为sum(rate(container_network_receive_bytes_total{image!= ””,namespace!= ””,instance!= ””,Pod!= ””,container!= ””}[1m]))。
网络发送速率是指每秒发送网络报文的字节数(或其他单位),在Prometheus采用的指标中,container_network_transmit_bytes_total是容器累计发送网络报文的字节数。具体的获取PromQL为sum(rate(container_network_transmit_bytes_total{image!=””,namespace!= ””,instance!= ””,Pod!= ””,container!= ””}[1m]))。
并且,Prometheus采集的指标数据分为instant query(瞬时查询)和range query(区间查询)。instant query是指该指标下的所有时间序列距离当前系统时间最新的值,无时间概念。上述所有的PromQL都是instant query。range query是指一段时间范围内的指标数据,需要使用区间向量表达式,即需要定义时间范围,在Prometheus中,主要就是在上述的PromQL后面添加时间范围定义:start=开始时间&end=结束时间&step=时间间隔。开始时间和结束时间可以是标准日期格式,也可以是时间戳格式,时间间隔是指在时间范围内采集数据的间隔。
监视Kubernetes资源数据信息,需要调用Kubernetes提供的API接口。首先定义Kubernetes的客户端KubernetesClient,KubernetesClient需要配置连接Kubernetes的部署主机IP。
监视现场namespace的静态信息和运行状态信息,需要调用KubernetesClient提供的API接口namespaces()获取Kubernetes集群的namespace列表;再调用withName()接口,参数为namespace名称,可以获取该namespace的实体类,其中,调用namespace的getLabels()接口可以获取该namespace的分类标识,调用getCreationTimestamp()接口可以获取该namespace的创建时间,调用getStatus()接口可以获取该namespace的运行状态。
监视应用service的静态信息,需要调用KubernetesClient提供的API接口services()获取Kubernetes集群的service列表,其中,可以调用inNamespace()接口,参数为namespace名称,来获取指定namespace下的service列表。还可以调用withName()接口,参数为service名称,获取该service的实体类。其中,调用service的getLabels()接口可以获取该service的分类标识,调用getClusterIP()接口获取该service的集群IP,将service名称、所属的namespace名称、service端口进行连接获取该service的内部端点,调用getExternalIPs()获取该service的外部端点,调用getCreationTimestamp()接口可以获取该service的创建时间。
监视集群中节点的静态信息和运行状态信息,需要调用KubernetesClient提供的API接口nodes()获取Kubernetes集群的node列表,再调用withName()接口,参数为node名称,来获取该node的实体类。其中,调用node的getLabels()接口可以获取该node的分类标识;而获取node的CPU请求值、限制值,内存请求值、限制值是通过获取该node下的Pod下的所有容器的相关属性,具体来说是调用容器的getResource()接口获取容器资源类,再分别调用getRequests()接口获取容器请求值、调用getLimits()接口获取容器限制值,将该node下的所有容器请求值求和获取该node的CPU和内存请求值,所有容器限制值求和获取该node的CPU和内存限制值;调用getCreationTimestamp()接口可以获取该node的创建时间,调用getStatus()接口可以获取该node的是否就绪状态。
监视Pod实例的静态信息和运行状态信息,需要调用KubernetesClient提供的API接口Pods()获取Kubernetes集群的Pod列表,其中,可以调用inNamespace()接口,参数为namespace名称,来获取指定namespace下的Pod列表。再调用withLabel()接口,参数为service的app标签值,来获取指定service下的Pod列表。最后调用withName()接口,参数为Pod名称,来获取该Pod的实体类。其中,调用Pod的getLabels()接口可以获取该Pod的分类标识;通过查找具有相同app标签值的方法来获取该Pod的service名称;调用getNodeName()接口获取该Pod的node名称;而Pod的已重启次数的获取是获取该Pod下的所有容器,将这些容器的已重启次数求和,即可获取该Pod的已重启次数;调用getCreationTimestamp()接口可以获取该Pod的创建时间,调用getStatus()接口可以获取该Pod的运行状态。而Pod的资源使用情况,则使用上述的Prometheus 监控组件进行采集,主要的修改就是将PromQL查询语句中的“Pod=”后添加该Pod名称,即可采集到该Pod的相关资源使用数据。
监视Pod实例内容器的静态信息和运行状态信息,因为KubernetesClient提供的接口中没有直接获取容器信息的接口,所以获取Pod内容器的信息需要先按照上述监视Pod信息的方法获取容器所属Pod的实体类,再调用所属Pod的getContainers()接口获取该Pod下的容器列表。当获取指定容器的信息时,通过调用所属Pod的getContainerStatuses()接口,可以获取到容器信息列表,容器信息包括容器名称,所以可以通过遍历查询到指定容器名的容器信息,即容器信息的实体类。其中,容器所属的Pod、service都可以通过所属Pod实体信息获取;调用getCreationTimestamp()接口可以获取该容器的创建时间;调用getState()接口可以获取该容器的运行状态;调用getRestartCount()可以获取容器的已重启次数;而容器的资源使用情况,则使用上述的prometheus 监控组件进行采集,主要的修改就是将PromQL查询语句中的“container=”后添加该容器名称,即可采集到该容器的相关资源使用数据。
监视容器内进程的静态信息和运行状态信息,如图4所示,图4展示了监视容器内进程信息的调用接口示意图。因为Kubernetes没有提供关于容器内进程的信息,所以需要调用Linux系统命令获取进程的相关信息。首先,需要调用Docker平台提供的API接口,定义Docker的客户端DockerClient,DockerClient需要配置连接Docker的部署主机IP。然后,调用DockerClient提供的topContainerCmd()接口,参数为容器ID,再调用getProcesses()接口可以获取指定容器内的进程信息列表,类似于调用了Linux系统的top命令,但是此接口返回的进程信息较少,只有进程ID等一些额外信息。所以还需要Linux系统命令pidstat命令,此命令专门统计Linux系统中的进程信息,其中,进程的CPU使用情况可以执行pidstat-u命令获取CPU使用率指标数据,内存使用可以执行pidstat-r命令获取内存使用率数据,磁盘使用可以执行pidstat-d命令获取磁盘读写速率数据。当要获取指定进程的资源使用情况时,可以在上述piddstat命令上加上grep管道过滤,即pidstat -选项 | greppid,这里的pid是指进程ID。在java程序中,调用Runtime.getRuntime().exec()接口,exec方法的参数为执行命令,注意java程序调用包含grep管道的Linux系统命令时,需要在命令前加上/bin/sh -c,因为java程序必须用shell才能执行此类Linux系统命令,获得执行结果。程序在获取命令执行结果后对结果字符串进行解析,即可获取该进程的运行状态、CPU使用率、内存使用率、磁盘读写速率数据。而按照上述监视容器信息的方法获取进程所属容器信息的实体类,就可以获取到容器(即进程)所属的Pod名称、所属的service名称。
监视持久化存储卷(简称PV)的静态信息和运行状态信息,需要调用KubernetesClient提供的API接口persistentVolumes()获取Kubernetes集群的PV列表,再调用withName()接口,参数为PV名称,来获取该PV的实体类。其中,调用getAccessModes()可以获取该PV的访问模式,调用getCapacity()可以获取该PV的总量,调用getClaimRef()可以获取该PV的声明类名称,调用getPersistentVolumeReclaimPolicy()可以获取该PV的回收策略;而获取该PV挂载的Pod实例则要通过对所有pod进行遍历,调用Pod的getVolumes()接口获取Pod挂载的所有存储卷,调用每个存储卷的getPersistentVolumeClaim()接口获取声明类名称,与该PV的声明类名称比较,相同则说明该Pod挂载在该PV上,遍历完后即可获取该PV的挂载Pod列表;调用getStatus()可以获取该PV的状态。
实施例二:
本发明提供了一种Kubernetes资源数据的监视装置,所述装置包括如下组件:
Prometheus监控组件,用于获取Kubernetes集群资源的性能数据;
Kubernetes客户端组件,用于获取Kubernetes集群资源的静态信息和运行状态信息;
监视组件,用于存储、展示Kubernetes集群资源的性能数据以及Kubernetes集群资源的静态信息和运行状态信息。
具体地, Prometheus监控组件包括如下组件:
Node-exporter组件,所述node-exporter组件包括CPU、内存、网络和文件系统,能够直接安装在Kubernetes集群的每个master节点上,收集node级别的性能数据;
Prometheus组件,所述Prometheus组件能够对Kubernetes集群环境进行监控,收集Kubernetes集群环境的指标数据;
Kube-state-metrics组件,所述kube-state-metrics组件能够将所述Prometheus组件和所述Node-exporter组件收集的数据转换成Kubernetes能够识别的数据类型;
Prometheus-adapter组件,所述Prometheus-adapter组件能够将所述Kube-state-metrics组件整合收集的数据发布到Prometheus监控组件的API接口。
实施例三:
本发明实施例还提供了一种Kubernetes资源数据的监视装置,包括处理器及存储介质;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行第一方面任一项所述方法的步骤。
实施例四:
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面任一项所述方法的步骤。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (9)

1.一种Kubernetes资源数据的监视方法,其特征在于,所述方法包括如下步骤:
在Kubernetes集群环境中部署Prometheus监控组件,调用Prometheus监控组件的API接口,获取Kubernetes集群资源的性能数据;
定义Kubernetes的客户端KubernetesClient,调用客户端KubernetesClient的API接口,获取Kubernetes集群资源的静态信息和运行状态信息;其中,所述Kubernetes集群资源的静态信息和运行状态信息包括:现场namespace的静态信息和运行状态信息、应用service的静态信息和运行状态信息、集群中节点的静态信息和运行状态信息、Pod实例的静态信息和运行状态信息、Pod实例内容器的静态信息和运行状态信息、容器内进程的静态信息和运行状态信息、持久化存储卷的静态信息和运行状态信息;
将Kubernetes集群资源的性能数据以及Kubernetes集群资源的静态信息和运行状态信息存储在监视组件,通过监视组件监视Kubernetes集群的资源数据。
2.根据权利要求1所述的监视方法,其特征在于,所述Kubernetes集群资源的性能数据包括:CPU的使用率、内存使用率、磁盘读写速度和网络流量速率数据。
3.根据权利要求1所述的监视方法,其特征在于,所述定义Kubernetes的客户端KubernetesClient包括如下步骤:
新建Kubernetes的客户端KubernetesClient;查询连接Kubernetes的部署主机的IP,将部署主机的IP配置在Kubernetes的客户端KubernetesClient上。
4.根据权利要求1所述的监视方法,其特征在于,所述Pod实例内容器的静态信息和运行状态信息通过如下步骤获取:
调用客户端KubernetesClient关于Pod的API接口,获取容器所属Pod的实体类,调用Pod的API接口获取Pod实例内容器的静态信息、该容器的运行状态和该容器的已重启次数;
调用Prometheus监控组件采集该容器的资源使用数据,获取Pod实例内容器的运行状态信息。
5.根据权利要求1所述的监视方法,其特征在于,所述容器内进程的静态信息和运行状态信息通过如下步骤获取:
调用客户端KubernetesClient的API接口,调用Docker平台的API接口,获取容器内进程的静态信息;
调用Linux系统的系统命令,获取容器内进程的运行状态信息。
6.一种Kubernetes资源数据的监视装置,其特征在于,所述装置包括如下组件:
Prometheus监控组件,用于获取Kubernetes集群资源的性能数据;
Kubernetes客户端组件,用于获取Kubernetes集群资源的静态信息和运行状态信息;
监视组件,用于存储、展示Kubernetes集群资源的性能数据以及Kubernetes集群资源的静态信息和运行状态信息。
7.根据权利要求6所述的监视装置,其特征在于,所述Prometheus监控组件包括如下组件:
Node-exporter组件,所述Node-exporter组件包括CPU、内存、网络和文件系统,能够直接安装在Kubernetes集群的每个master节点上,收集node级别的性能数据;
Prometheus组件,所述Prometheus组件能够对Kubernetes集群环境进行监控,收集Kubernetes集群环境的指标数据;
Kube-state-metrics组件,所述Kube-state-metrics组件能够将所述Prometheus组件和所述Node-exporter组件收集的数据转换成Kubernetes能够识别的数据类型;
Prometheus-adapter组件,所述Prometheus-adapter组件能够将所述Kube-state-metrics组件整合收集的数据发布到Prometheus监控组件的API接口。
8.一种Kubernetes资源数据的监视装置,其特征在于,包括处理器及存储介质;
所述存储介质用于存储指令;
所述处理器用于根据所述指令进行操作以执行根据权利要求1~5任一项所述方法的步骤。
9.计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1~5任一项所述方法的步骤。
CN202011008650.2A 2020-09-23 2020-09-23 Kubernetes资源数据的监视方法及装置 Active CN112181764B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011008650.2A CN112181764B (zh) 2020-09-23 2020-09-23 Kubernetes资源数据的监视方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011008650.2A CN112181764B (zh) 2020-09-23 2020-09-23 Kubernetes资源数据的监视方法及装置

Publications (2)

Publication Number Publication Date
CN112181764A CN112181764A (zh) 2021-01-05
CN112181764B true CN112181764B (zh) 2022-07-22

Family

ID=73955323

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011008650.2A Active CN112181764B (zh) 2020-09-23 2020-09-23 Kubernetes资源数据的监视方法及装置

Country Status (1)

Country Link
CN (1) CN112181764B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112612529A (zh) * 2021-01-07 2021-04-06 上海明略人工智能(集团)有限公司 基于k8s的Jupyter Notebook运行系统关机方法及装置
CN112764990B (zh) * 2021-01-12 2021-11-16 北京自如信息科技有限公司 一种目标进程的监控方法、装置及计算机设备
CN113110918A (zh) * 2021-05-13 2021-07-13 广州虎牙科技有限公司 读写速率管控方法、装置、节点设备及存储介质
CN113296809B (zh) * 2021-05-21 2023-12-12 南京大学 一种声明式的通用Kubernetes调谐方法
CN114143203B (zh) * 2021-11-05 2023-11-10 华东师范大学 一种基于动态服务拓扑映射的Kubernetes容器网络数据包指标采集的方法及系统
CN114079615B (zh) * 2021-11-17 2023-08-11 上海道客网络科技有限公司 一种多集群环境下的应用同步方法、系统、介质和电子设备
CN113849294B (zh) * 2021-11-30 2022-03-11 武汉迈异信息科技有限公司 一种kubernetes pod扩缩容的系统及方法
CN115269341B (zh) * 2022-09-26 2023-01-03 浩鲸云计算科技股份有限公司 一种gpu虚拟化资源使用率的多维度监控方法和系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110262899A (zh) * 2019-06-20 2019-09-20 无锡华云数据技术服务有限公司 基于Kubernetes集群的监控组件弹性伸缩方法、装置及受控终端

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110262899A (zh) * 2019-06-20 2019-09-20 无锡华云数据技术服务有限公司 基于Kubernetes集群的监控组件弹性伸缩方法、装置及受控终端

Also Published As

Publication number Publication date
CN112181764A (zh) 2021-01-05

Similar Documents

Publication Publication Date Title
CN112181764B (zh) Kubernetes资源数据的监视方法及装置
US7496912B2 (en) Methods and arrangements for ordering changes in computing systems
US10338958B1 (en) Stream adapter for batch-oriented processing frameworks
JP2553307B2 (ja) プロセス監視方法
US20040210877A1 (en) Method of providing open access to application profiling data
US20020178262A1 (en) System and method for dynamic load balancing
US8041683B1 (en) Methods and apparatus for locating network logs
WO2001082058A2 (en) Dynamic file system configurations
JPH04233654A (ja) コンピュータシステム
CN110912782B (zh) 一种数据采集方法、装置及存储介质
CN114791846B (zh) 一种针对云原生混沌工程实验实现可观测性的方法
CN105141702A (zh) 一种基于模型的混合云构造方法
GB2378546A (en) Automatic configuration of performance management software
CN114706690B (zh) 一种Kubernetes容器共享GPU方法及系统
CN108009004B (zh) 基于Docker的业务应用可用度测量监控的实现方法
Weng et al. Kmon: An in-kernel transparent monitoring system for microservice systems with ebpf
US20060059118A1 (en) Apparatus, system, and method for associating resources using a behavior based algorithm
CN110196751A (zh) 互扰服务的隔离方法及装置、电子设备、存储介质
CN101968747B (zh) 一种机群应用管理系统及其应用管理方法
CN112579552A (zh) 日志存储及调用方法、装置及系统
CN113010385B (zh) 一种任务状态更新方法、装置、设备及介质
CN112685370B (zh) 一种日志采集方法、装置、设备和介质
CN109344032A (zh) 一种监控方法和装置
CN115061841A (zh) 一种告警归并方法、装置、电子设备及存储介质
CN112422308A (zh) 一种实现运维监控的方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant