容器監控之kube-state-metrics
參考:https://github.com/kubernetes/kube-state-metrics/tree/master/kubernetes
https://www.kubernetes.org.cn/5435.html
理論基礎
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服務部署和暴露對外訪問。