容器监控之kube-state-metrics
参考:
理论基础
metric-server(或heapster)是从api-server中获取cpu、内存使用率这种监控指标,并把他们发送给存储后端,如influxdb或云厂商,他当前的核心作用是:为HPA等组件提供决策指标支持。
kube-state-metrics关注于获取k8s各种资源的最新状态,如deployment或者daemonset,之所以没有把kube-state-metrics纳入到metric-server的能力中,是因为他们的关注点本质上是不一样的。metric-server仅仅是获取、格式化现有数据,写入特定的存储,实质上是一个监控系统。而kube-state-metrics是将k8s的运行状况在内存中做了个快照,并且获取新的指标,但他没有能力导出这些指标。
可以监控的指标
不能精确到每一个pod状态和客户端。
kube_configmap_info
kube_daemonset_
kube_deployment
kube_endpoint
kube_ingress
kube_namespace
kube_node
kube_pod_info
….
默认注释的监控项。
kube_persistent
kube_hpa
kube_poddisruption
安装部署
[root@mer kube-state-metrics]# for file in kube-state-metrics-service.yaml kube-state-metrics-cluster-role-binding.yaml kube-state-metrics-cluster-role.yaml kube-state-metrics-deployment.yaml kube-state-metrics-service-account.yaml;do wget https://raw.githubusercontent.com/kubernetes/kube-state-metrics/master/kubernetes/$file;done
[root@master kube-state-metrics]# kubectl apply -f ./
[root@master ~]# kubectl get pods -n kube-system|grep metric
kube-state-metrics-74f9f4ddb9-kzdbj 1/1 Running 0 19m
metrics-server-v0.3.3-6448dcfb78-rrhd8 2/2 Running 2 20h
[root@master ~]# kubectl get svc -n kube-system|grep metric
kube-state-metrics ClusterIP 10.103.111.189 <none> 8080/TCP,8081/TCP 20m
metrics-server ClusterIP 10.108.249.201 <none> 443/TCP 20h
[root@master ~]#
容器内部访问正常展示。
[root@master ~]#
需要通过ingress服务将其暴露出去。
访问正常,浏览器配置hosts文件,均正常。
相关命令汇总。
[root@master ~]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-state-metrics ClusterIP 10.103.111.189 <none> 8080/TCP,8081/TCP 101m
[root@master ~]# kubectl get ing -n kube-system
NAME HOSTS ADDRESS PORTS AGE
ingress-kube-state metrics.kube.state 80 25m
[root@master ~]# kubectl describe ing/ingress-kube-state -n kube-system
Name: ingress-kube-state
Namespace: kube-system
Address:
Default backend: default-http-backend:80 (<none>)
默认是Clusterip方式部署,通过ingress暴露服务。
[root@master ~]# cat ingress_kube-state.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-kube-state
namespace: kube-system
spec:
rules:
- host: metrics.kube.state
http:
paths:
- path: /
backend:
serviceName: kube-state-metrics
servicePort: 8080
配置granfa组件,查看。
自此完成了容器监控kube-state-metrics服务部署和暴露对外访问。