组件监控
k8s服务组件指标
kubernetes
云原生集群作为大规模多节点容器调度平台,在交付和部署上的巨大优势逐渐让其称为一种技术趋势,如基于工作负载快速进行扩/缩容、故障自愈、资源弹性等。但是,另一方面
kubernetes
云原生集群「复杂性较高」,集群自身存在非常多的组件,如master节点上运行着:api-server组件、etcd组件、kube-scheduler组件、kube-controller-manager组件、coredns组件等,node节点上有kubelet组件、kube-proxy组件等。这里还隐含着另一个问题就是:一旦云原生集群出现问题,云原生集群上部署的应用组件可能都会受到影响,「影响面比较大」。所以,作为云原生集群的运维人员,关注云原生集群组件的整体运行情况,特别是一些核心组件的运行状况,避免某些组件出现性能瓶颈、异常奔溃等导致整个云原生集群性能低下甚至不可用风险的发生,这一节我们就来重点关注下云原生集群核心组件的监控。
kubernetes架构
在对
kubernetes
服务组件进行监控之前,我们要先来了解下kubernetes
的架构(见下图):kubernetes
集群节点大致分为两类:控制节点和工作节点。左边蓝色框框中就是控制节点上运行的核心组件:
API Server
组件:API Server
可以看着的整个集群的大脑,从图上可以看出基本所有组件都要和API Server
组件进行交互,同时,内外部接口请求也都要经过API Server
组件,如kubectl
指令、client-go
获取监听集群资源等。
ETCD
组件:API Server
组件作为集群的对外接口层,会接收大量外部请求,肯定需要持久化数据库存储这些元数据信息,ETCD
组件就是kubernetes
元数据存储的数据库。
Scheduler
组件:kubernetes
作为大规模多节点容器调度平台,可灵活的基于多种策略实现容器的调度,这就是Scheduler
组件的职责。
Controller Manager
组件:kubernetes
中核心的设计理念是声明式,kubernetes
集群中所有的操作都可以通过声明式的yaml文件将需求描述清楚,具体底层如何实现用户是无需太多关注的,这其中背后实现的逻辑就是kubernetes
集群中存在的大量控制器的功劳,kubernetes
二次开发主要也是自定义各种控制器,而Controller Manager
组件就是管理这些控制器的管理器。
右边框框就是工作节点,控制节点相当于集群管理层,驱动着整个集群的运行,而工作节点是真正运行业务容器的节点,即将控制节点调度分配过来的任务干好即可。其核心组件:
kubelet
组件:工作节点上最重要的一个组件就是kubelet组件,主要负责底层容器创建、管理、运行等,kubelet
基于CRI(Container Runtime Interface)
与容器运行时(Docker、containerd
等)进行通信,这种标准化的接口使得kubernetes
能够与不同的容器运行时进行交互,提高了系统的灵活性和可扩展性。
kube-proxy
组件:kube-proxy
是kubernetes
集群中负责网络代理和负载均衡的重要组件,它通过转发请求、负载均衡和会话绑定等功能,确保服务的可访问性和高可用性,为应用程序提供稳定和可靠的网络服务。
API Server组件监控
1、
API Server
作为kubernetes
最核心的组件,当然他的监控也是非常有必要的。API Server
组件部署在kube-system
命名空间下:并在
default
命名空间下创建service
,并通过手工配置endpoint
:2、因此,我们可以基于
service
的endpoints
服务发现:3、通过
prometheus target
界面查看采集点接入正常:4、导入
15761 dashboard
,API Server
组件监控指标就展示到模板上。比如可以看到API Server组件健康检查状态,
API Server
组件作为kubernetes
集群大脑,主要对外提供API
接口,所以,这里重点监控API Server
组件的请求量、请求响应延迟大小、错误请求量等:ETCD组件监控
kubernetes
集群的ETCD
默认是开启暴露metrics
数据的。1、获取
Etcd Pod
名称:我们可以看到启动参数里面有一个
--listen-metrics-urls=http://127.0.0.1:2381
的配置,该参数就是来指定 Metrics 接口运行在 2381 端口下面的,而且是http的协议,所以也不需要什么证书配置,这就比以前的版本要简单许多了,以前的版本需要用 https 协议访问,所以要配置对应的证书。注意:这里监听的是
127.0.0.1
,需要修改/etc/kubernetes/manifests/etcd.yaml
,将--listen-metrics-urls=http://127.0.0.1:2381
修改成--listen-metrics-urls=http://0.0.0.0:2381
,编辑后会自动更新Pod(静态Pod)。2、创建
etcd
组件service
服务:3、
prometheus
监控接入:4、通过
prometheus target
界面查看采集点接入正常:5、导入
3973 或者 3070 dashboard
,ETCD
组件监控指标就展示到模板上。Scheduler组件监控
1、创建
kube-scheduler
组件service
:kube-scheduler.yaml
2、修改
/etc/kubernetes/manifests/kube-scheduler.yaml
修改点主要有两处:
- 将
-bind-address=127.0.0.1
修改成-bind-address=0.0.0.0
,否则外部无法访问。
- 使用
-port
标志为 HTTP 服务指定端口,你可能已经完全-port=0
禁用HTTP服务,这里配置-port=10251
。
修改完成后等待重启:
在kube-scheduler-k8s-01组件运行的master节点(k8s-01)上查看端口是否开启监听:
❝
- -port=0禁用时,只有10259 HTTPS监听端口开启,将--port=10251配置后,10251 HTTP监听端口也会开启。
3、
prometheus
监控接入:4、通过
prometheus target
界面查看采集点接入正常:Controller Manager组件
1、创建
kube-scheduler
组件service
:kubeControllerManager.yaml
2、修改
/etc/kubernetes/manifests/kube-controller-manager.yaml
修改点主要有两处:
- 将
-bind-address=127.0.0.1
修改成-bind-address=0.0.0.0
,否则外部无法访问。
- 使用
-port
标志为 HTTP 服务指定端口,你可能已经完全-port=0
禁用HTTP服务,这里配置-port=10252
。
修改完成后等待重启:
在
kube-controller-manager-k8s-01
组件运行的master
节点(k8s-01
)上查看端口是否开启监听:❝
- -port=0禁用时,只有10257 HTTPS监听端口开启,将--port=10251配置后,10252 HTTP监听端口也会开启。
3、
prometheus
监控接入:4、通过
prometheus target
界面查看采集点接入正常:kubelet组件
kubelet
组件集成cAdvisor
,通过/metrics/cadvisor
端点暴露容器性能指标,kubelet
组件还通过/metrics
端点暴露自身组件指标。1、
prometheus
监控接入:2、通过
prometheus target
界面查看采集点接入正常:kube-proxy组件
kube-proxy
默认暴露两个端口,一个是10249,在/metrics端点暴露监控指标,另一个是10256。可以使用netstat
命令检查这两个端口是否监听:如果需要修改监听端口,修改
kubectl edit configmap kube-proxy -n kube-system
,将metricsBindAddress
这段修改成metricsBindAddress: 0.0.0.0:10249
即可。默认监听127.0.0.1
,修改:然后重新启动
kube-proxy
这个pod
:再次使用
netstat
检测10249监听到0.0.0.0上:1、创建
service
:2、
prometheus
监控接入:3、通过
prometheus target
界面查看采集点接入正常:CoreDNS
kubernetes
集群中非常重要的CoreDNS
插件,一般默认情况下就开启了 /metrics
接口:上面
ConfigMap
中 prometheus :9153
就是开启prometheus
的插件:我们可以先尝试手动访问下
/metrics
接口,如果能够手动访问到那证明接口是没有任何问题的:我们可以看到可以正常访问到,从这里可以看到
CoreDNS
的监控数据接口是正常的了,然后我们就可以将这个 /metrics
接口配置到 prometheus.yml
中去。默认,以在
kube-system
命名空间下创建了CoreDNS
组件的service
:CoreDNS
组件监控接入配置:通过
prometheus target
界面查看采集点接入正常:Loading...