文章目录
1. 下载
-
下载地址:
https://github.com/kubernetes/kube-state-metrics/tree/main -
选择适合的分支下载
-
拷贝example目录到要部署的集群master节点,包含如下目录:
drwxr-xr-x 2 root root 204 7月 30 16:43 autosharding
drwxr-xr-x 2 root root 234 7月 30 16:43 daemonsetsharding
drwxr-xr-x 2 root root 25 7月 30 16:44 prometheus-alerting-rules
drwxr-xr-x 2 root root 161 7月 30 16:43 standard
2. 部署
- 我们使用
standard
目录中的文件
-rw-r--r-- 1 root root 419 7月 30 16:43 cluster-role-binding.yaml
-rw-r--r-- 1 root root 1951 7月 30 16:43 cluster-role.yaml
-rw-r--r-- 1 root root 1517 7月 30 16:43 deployment.yaml
-rw-r--r-- 1 root root 203 7月 30 16:43 kustomization.yaml
-rw-r--r-- 1 root root 271 7月 30 16:43 service-account.yaml
-rw-r--r-- 1 root root 448 7月 30 16:43 service.yaml
如果你不想看过程,可以直接执行
kubectl apply -k kustomization.yaml
2.1 创建ClusterRole
- 创建集群用户
kubectl create -f cluster-role.yaml
- 查看结果
[root@k8s-dev-m01 standard]# kubectl get ClusterRole kube-state-metrics
NAME CREATED AT
kube-state-metrics 2024-07-30T08:57:45Z
2.2 创建服务账户
- 创建服务账户
kubectl create -f service-account.yaml
- 查看结果
[root@k8s-dev-m01 standard]# kubectl get ServiceAccount kube-state-metrics -n kube-system
NAME SECRETS AGE
kube-state-metrics 1 39s
2.3 绑定集群用户
- 绑定集群用户
kubectl create -f cluster-role-binding.yaml
- 查看结果
[root@k8s-dev-m01 standard]# kubectl describe ClusterRoleBinding kube-state-metrics -n kube-system
Name: kube-state-metrics
Labels: app.kubernetes.io/component=exporter
app.kubernetes.io/name=kube-state-metrics
app.kubernetes.io/version=2.13.0
Annotations: <none>
Role:
Kind: ClusterRole
Name: kube-state-metrics
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount kube-state-metrics kube-system
2.4 部署deployment
- 部署
kubectl create -f deployment.yml
- 查看结果
[root@k8s-dev-m01 standard]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
……
kube-state-metrics-ffd4dcd49-c8kxm 1/1 Running 0 21s
……
2.5 部署service
- 启动
kubectl create -f service.yaml
- 查看结果
[root@k8s-dev-m01 standard]# kubectl get service -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
……
kube-state-metrics ClusterIP None <none> 8080/TCP,8081/TCP 18s
……
3. 部署prometheus
3.1 创建rabc权限
- 创建 文件prometheus.rbac.yaml
为prometheus提供rabc权限。包括 ClusterRole、ServiceAccount、ClusterRoleBinding
之前创建kube-state-metrics时是分开写的,既然已经熟悉了,我们这里写在一起。
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/proxy
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups:
- extensions
resources:
- ingresses
verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus
namespace: monitor
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prometheus
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus
subjects:
- kind: ServiceAccount
name: prometheus
namespace: monitor
- 创建集群角色
kubectl create -f prometheus.rbac.yaml
- 查看角色
[root@DoM01 promethues]# kubectl describe ClusterRole prometheus
Name: prometheus
Labels: <none>
Annotations: <none>
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
endpoints [] [] [get list watch]
nodes/proxy [] [] [get list watch]
nodes [] [] [get list watch]
pods [] [] [get list watch]
services [] [] [get list watch]
ingresses.extensions [] [] [get list watch]
[/metrics] [] [get]
- 查看账户
[root@DoM01 promethues]# kubectl describe ServiceAccount prometheus -n monitor
Name: prometheus
Namespace: monitor
Labels: <none>
Annotations: <none>
Image pull secrets: <none>
Mountable secrets: prometheus-token-t7msz
Tokens: prometheus-token-t7msz
Events: <none>
- 查看绑定
[root@DoM01 promethues]# kubectl describe ClusterRoleBinding prometheus -n monitor
Name: prometheus
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: prometheus
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount prometheus monitor
3.2 创建promethues配置文件
- 创建 prometheus.config.yaml文件
创建comfigmap,为prometheus提供配置文件
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
namespace: monitor
data:
prometheus.yml: |
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- role: node
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/${1}/proxy/metrics
- job_name: 'kubernetes-cadvisor'
kubernetes_sd_configs:
- role: node
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: kubernetes_name
- job_name: 'kubernetes-services'
kubernetes_sd_configs:
- role: service
metrics_path: /probe
params:
module: [http_2xx]
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
action: keep
regex: true
- source_labels: [__address__]
target_label: __param_target
- target_label: __address__
replacement: blackbox-exporter.example.com:9115
- source_labels: [__param_target]
target_label: instance
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_service_name]
target_label: kubernetes_name
- job_name: 'kubernetes-ingresses'
kubernetes_sd_configs:
- role: ingress
relabel_configs:
- source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]
action: keep
regex: true
- source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
regex: (.+);(.+);(.+)
replacement: ${1}://${2}${3}
target_label: __param_target
- target_label: __address__
replacement: blackbox-exporter.example.com:9115
- source_labels: [__param_target]
target_label: instance
- action: labelmap
regex: __meta_kubernetes_ingress_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_ingress_name]
target_label: kubernetes_name
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: kubernetes_pod_name
- 创建configmap
kubectl create -f prometheus.config.yaml
- 查看结果
[root@DoM01 promethues]# kubectl get configmaps -n monitor
NAME DATA AGE
prometheus-config 1 3h7m
3.3 deployment和service
- 创建 prometheus.deployment.yaml文件
以部署deployment和serivce。
apiVersion: apps/v1beta2
kind: Deployment
metadata:
labels:
name: prometheus-deployment
name: prometheus
namespace: monitor
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- image: prom/prometheus:v2.2.1
name: prometheus
command:
- "/bin/prometheus"
args:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention=24h"
ports:
- containerPort: 9090
protocol: TCP
volumeMounts:
- mountPath: "/prometheus"
name: data
- mountPath: "/etc/prometheus"
name: config-volume
- name: host-time
mountPath: /etc/localtime
readOnly: true
resources:
requests:
cpu: 100m
memory: 100Mi
limits:
cpu: 500m
memory: 2500Mi
serviceAccountName: prometheus
imagePullSecrets:
- name: login-harbor
volumes:
- name: host-time
hostPath:
path: /etc/localtime
- name: data
emptyDir: {}
- name: config-volume
configMap:
name: prometheus-config
---
kind: Service
apiVersion: v1
metadata:
labels:
app: prometheus
name: prometheus
namespace: monitor
spec:
type: NodePort
ports:
- port: 9090
targetPort: 9090
nodePort: 30003
selector:
app: prometheus
- 启动
kubectl create -f prometheus.deployment.yaml
- 查看结果
[root@k8s-dev-m01 promethues]# kubectl get pod -n monitor
NAME READY STATUS RESTARTS AGE
prometheus-79dd48f684-6lr7p 1/1 Running 0 128m