做笑話(huà)網(wǎng)站賺錢(qián)站長(zhǎng)統(tǒng)計(jì)app進(jìn)入網(wǎng)址新版小豬
kube-state-metrics
是一個(gè)Kubernetes的附加組件,它通過(guò)監(jiān)聽(tīng) Kubernetes API 服務(wù)器來(lái)收集和生成關(guān)于 Kubernetes 對(duì)象(如部署、節(jié)點(diǎn)和Pod等)的狀態(tài)的指標(biāo)。這些指標(biāo)可供 Prometheus 進(jìn)行抓取和存儲(chǔ),從而使你能夠監(jiān)控和分析Kubernetes集群的狀態(tài)和性能。
之前介紹過(guò)node-exporter和cAdvisor,但是他們收集的指標(biāo)和kube-state-metrics是不同的。
不同插件的指標(biāo)
node_exporter的指標(biāo)主要關(guān)注節(jié)點(diǎn)的CPU、內(nèi)存、磁盤(pán)和網(wǎng)絡(luò)利用率等指標(biāo),以及系統(tǒng)負(fù)載,I/O操作和運(yùn)行進(jìn)程數(shù)。cAdvisor是一個(gè)容器監(jiān)控工具,集成在Kubelet中,關(guān)注容器的CPU、內(nèi)存和網(wǎng)絡(luò)的資源使用情況。這兩種都是與運(yùn)行狀態(tài)直接相關(guān)的物理或虛擬資源的度量。
而kube-state-metrics指標(biāo)則是記錄部署中期望副本數(shù)與當(dāng)前副本數(shù)、pod的生命周期狀態(tài)、重啟次數(shù)、服務(wù)端點(diǎn)的狀態(tài)等。
在實(shí)際應(yīng)用中,將這兩類(lèi)指標(biāo)結(jié)合起來(lái)使用可以提供更全面的視圖來(lái)監(jiān)控和管理 Kubernetes 集群。使用 node_exporter
和 cAdvisor
的指標(biāo)可以幫助理解節(jié)點(diǎn)和容器的性能瓶頸。使用 kube-state-metrics
的指標(biāo)可以幫助理解集群中的工作負(fù)載如何分布,以及 Kubernetes 控制平面的健康狀態(tài)。
kube-state-metrics部署
創(chuàng)建sa文件
因?yàn)檫@個(gè)插件需要和kubernetes API交互,所以需要權(quán)限。
apiVersion: v1
kind: ServiceAccount
metadata:name: kube-state-metricsnamespace: kube-system
創(chuàng)建role文件?
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: kube-state-metrics
rules:
- apiGroups: [""]resources: ["nodes", "pods", "services", "resourcequotas", "replicationcontrollers", "limitranges", "persistentvolumeclaims", "persistentvolumes", "namespaces", "endpoints"]verbs: ["list", "watch"]
- apiGroups: ["extensions"]resources: ["daemonsets", "deployments", "replicasets"]verbs: ["list", "watch"]
- apiGroups: ["apps"]resources: ["statefulsets"]verbs: ["list", "watch"]
- apiGroups: ["batch"]resources: ["cronjobs", "jobs"]verbs: ["list", "watch"]
- apiGroups: ["autoscaling"]resources: ["horizontalpodautoscalers"]verbs: ["list", "watch"]
創(chuàng)建rolebinding
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: kube-state-metrics
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: kube-state-metrics
subjects:
- kind: ServiceAccountname: kube-state-metricsnamespace: kube-system
可以看到把之前創(chuàng)建的sa和clusterRole綁定在了一起。
[root@master prometheus]# kubectl get sa -n kube-system | grep kube-state-metrics
kube-state-metrics 1 43s
創(chuàng)建pod
[root@master prometheus]# cat kube-state-metrics-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:namespace: kube-systemname: kube-state-metrics
spec:replicas: 1selector:matchLabels:app: kube-state-metricstemplate:metadata:labels:app: kube-state-metricsspec:serviceAccountName: kube-state-metricscontainers:- name: kube-state-metricsimage: quay.io/coreos/kube-state-metrics:v1.9.0imagePullPolicy: IfNotPresentports:- containerPort: 8080
這里的deployment使用了之前定義的sa??梢钥吹絧od成功啟動(dòng),ip地址為:10.244.166.164
[root@master prometheus]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-state-metrics-57794dcf65-8wt8g 1/1 Running 0 110s 10.244.166.164 node1 <none> <none>
monitoring-grafana-5bb6bb7867-9j2xb 1/1 Running 0 24h 10.244.166.160 node1 <none> <none>
創(chuàng)建service
[root@master prometheus]# cat kube-state-metrics-service.yaml
apiVersion: v1
kind: Service
metadata:annotations:prometheus.io/scrape: 'true'name: kube-state-metricsnamespace: kube-systemlabels:app: kube-state-metrics
spec:type: NodePortports:- name: kube-state-metricsport: 8080protocol: TCPselector:app: kube-state-metrics
[root@master prometheus]# kubectl get svc -n kube-system -owide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 19d k8s-app=kube-dns
kube-state-metrics NodePort 10.106.104.112 <none> 8080:31711/TCP 10s app=kube-state-metrics
monitoring-grafana NodePort 10.110.10.133 <none> 80:31519/TCP 24h k8s-app=grafana
此時(shí)查看Prometheus,可以看到endpoint里面已經(jīng)識(shí)別到了這個(gè)pod
導(dǎo)入相應(yīng)的json文件,在grafana里面也可以看到數(shù)據(jù)了。?