kube-state-metrics 通过监听 API Server 生成有关资源对象的状态指标,比如Node、Pod,需 要注意的是kube-state-metrics 只是简单的提供一个metrics数据,并不会存储这些指标数据,所 以我们可以使用Prometheus来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,比如 Pod 副本状态等;调度了多少个replicas?现在可用的有几个?多少个Pod是 running/stopped/terminated 状态?Pod 重启了多少次?我有多少job在运行中。
安装kube-state-metrics 组件
1)创建sa,并对sa授权
在master节点创建kube-state-metrics-rbac.yaml文件
vim kube-state-metrics-rbac.yaml
输入:
apiVersion: v1
kind: ServiceAccount
metadata:
name: kube-state-metrics
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kube-state-metrics
rules:
- apiGroups: [""]
resources:
- configmaps
- secrets
- nodes
- pods
- services
- resourcequotas
- replicationcontrollers
- limitranges
- persistentvolumeclaims
- persistentvolumes
- namespaces
- endpoints
verbs: ["list", "watch"]
- apiGroups: ["apps"]
resources:
- statefulsets
- daemonsets
- deployments
- replicasets
verbs: ["list", "watch"]
- apiGroups: ["batch"]
resources:
- cronjobs
- jobs
verbs: ["list", "watch"]
- apiGroups: ["autoscaling"]
resources:
- horizontalpodautoscalers
verbs: ["list", "watch"]
- apiGroups: ["policy"]
resources:
- poddisruptionbudgets
verbs: ["list", "watch"]
- apiGroups: ["certificates.k8s.io"]
resources:
- certificatesigningrequests
verbs: ["list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources:
- storageclasses
- volumeattachments
verbs: ["list", "watch"]
- apiGroups: ["admissionregistration.k8s.io"]
resources:
- mutatingwebhookconfigurations
- validatingwebhookconfigurations
verbs: ["list", "watch"]
- apiGroups: ["networking.k8s.io"]
resources:
- networkpolicies
- ingresses
verbs: ["list", "watch"]
- apiGroups: ["coordination.k8s.io"]
resources:
- leases
verbs: ["list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kube-state-metrics
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kube-state-metrics
subjects:
- kind: ServiceAccount
name: kube-state-metrics
namespace: kube-system
保存退出
kubectl apply -f kube-state-metrics-rbac.yaml
2)安装kube-state-metrics 组件
GitHub 官方仓库地址:
Releases · kubernetes/kube-state-metrics · GitHub
Docker Hub 官方镜像地址:直接拉取官方预构建镜像,无需本地编译
https://hub.docker.com/去这个地址里面搜索下载
ctr -n k8s.io images import kube-state-metrics_1_9_0.tar.gz
vim kube-state-metrics deploy.yaml
输入:
apiVersion: apps/v1
kind: Deployment
metadata:
name: kube-state-metrics
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: kube-state-metrics
template:
metadata:
labels:
app: kube-state-metrics
spec:
serviceAccountName: kube-state-metrics
containers:
- name: kube-state-metrics
image: quay.io/coreos/kube-state-metrics:v1.9.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
保存退出
kubectl apply -f kube-state-metrics-deploy.yaml
查看kube-state-metrics是否部署成功
kubectl get pods -n kube-system -l app=kube-state-metrics
3)创建service
vim kube-state-metrics-svc.yaml
输入:
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/scrape: 'true'
name: kube-state-metrics
namespace: kube-system
labels:
app: kube-state-metrics
spec:
ports:
- name: kube-state-metrics
port: 8080
protocol: TCP
selector:
app: kube-state-metrics
保存退出
kubectl apply -f kube-state-metrics-svc.yaml
查看service是否创建成功
kubectl get svc -n kube-system | grep kube-state-metrics
去网站下载下面grafana可视化的json
Kubernetes Cluster (Prometheus)
Kubernetes cluster monitoring (via Prometheus) (k8s 1.16)
导入,就可以看数据了