最近项目中通过Kubernetes部署Prometheus完成可视化大屏数据采集,特此记录便于日后查阅。
1、deploy.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- labels:
- name: prometheus-deployment
- name: prometheus
- namespace: monitoring
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: prometheus
- template:
- metadata:
- labels:
- app: prometheus
- spec:
- containers:
- - image: prom/prometheus:v2.7.1
- name: prometheus
- command:
- - "/bin/prometheus"
- args:
- - "--config.file=/etc/prometheus/prometheus.yml"
- - "--storage.tsdb.path=/prometheus"
- - "--storage.tsdb.retention=72h"
- ports:
- - containerPort: 9090
- protocol: TCP
- volumeMounts:
- - mountPath: "/prometheus"
- name: data
- - mountPath: "/etc/prometheus"
- name: prometheus-config-volume
- resources:
- requests:
- cpu: 100m
- memory: 100Mi
- limits:
- cpu: 500m
- memory: 2500Mi
- serviceAccountName: prometheus
- volumes:
- - name: data
- emptyDir: {}
- - name: prometheus-config-volume
- configMap:
- name: prometheus-config
- ---
- kind: Service
- apiVersion: v1
- metadata:
- labels:
- app: prometheus
- name: prometheus
- namespace: monitoring
- spec:
- type: NodePort
- ports:
- - port: 9090
- targetPort: 9090
- nodePort: 30003
- selector:
- app: prometheus
2、configmap.yaml
- apiVersion: v1
- kind: ConfigMap
- metadata:
- name: prometheus-config
- namespace: monitoring
- data:
- prometheus.yml: |
- global:
- scrape_interval: 15s
- evaluation_interval: 15s
- scrape_configs:
- - job_name: 'k8s-cadvisor'
- metrics_path: /metrics/cadvisor
- kubernetes_sd_configs:
- - role: node
- relabel_configs:
- - source_labels: [__address__]
- regex: '(.*):10250'
- replacement: '${1}:10255'
- target_label: __address__
- action: replace
- - action: labelmap
- regex: __meta_kubernetes_node_label_(.+)
-
- metric_relabel_configs:
- - source_labels: [instance]
- separator: ;
- regex: (.+)
- target_label: node
- replacement: $1
- action: replace
-
- - source_labels: [pod_name]
- separator: ;
- regex: (.+)
- target_label: pod
- replacement: $1
- action: replace
- - source_labels: [container_name]
- separator: ;
- regex: (.+)
- target_label: container
- replacement: $1
- action: replace
-
- - job_name: kube-state-metrics
- kubernetes_sd_configs:
- - role: endpoints
- namespaces:
- names:
- - ops-monit
- relabel_configs:
- - source_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name]
- regex: kube-state-metrics
- replacement: $1
- action: keep
- - action: labelmap
- regex: __meta_kubernetes_service_label_(.+)
- - source_labels: [__meta_kubernetes_namespace]
- action: replace
- target_label: k8s_namespace
- - source_labels: [__meta_kubernetes_service_name]
- action: replace
- target_label: k8s_sname
-
- - job_name: spring-boot-metrics
- kubernetes_sd_configs:
- - role: endpoints
- relabel_configs:
- - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_spring]
- action: keep
- regex: true
- - 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: spring_namespace
- - source_labels: [__meta_kubernetes_service_name]
- action: replace
- target_label: spring_name
3、kube-state-metrics.yaml
- apiVersion: rbac.authorization.k8s.io/v1
- kind: ClusterRoleBinding
- metadata:
- labels:
- app.kubernetes.io/name: kube-state-metrics
- app.kubernetes.io/version: v1.9.7
- name: kube-state-metrics
- roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: kube-state-metrics
- subjects:
- - kind: ServiceAccount
- name: kube-state-metrics
- namespace: ops-monit
- ---
- apiVersion: rbac.authorization.k8s.io/v1
- kind: ClusterRole
- metadata:
- labels:
- app.kubernetes.io/name: kube-state-metrics
- app.kubernetes.io/version: v1.9.7
- name: kube-state-metrics
- rules:
- - apiGroups:
- - ""
- resources:
- - configmaps
- - secrets
- - nodes
- - pods
- - services
- - resourcequotas
- - replicationcontrollers
- - limitranges
- - persistentvolumeclaims
- - persistentvolumes
- - namespaces
- - endpoints
- verbs:
- - list
- - watch
- - apiGroups:
- - extensions
- resources:
- - daemonsets
- - deployments
- - replicasets
- - ingresses
- 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:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
- - apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
- - 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
- verbs:
- - list
- - watch
- ---
- apiVersion: v1
- kind: ServiceAccount
- metadata:
- labels:
- app.kubernetes.io/name: kube-state-metrics
- app.kubernetes.io/version: v1.9.7
- name: kube-state-metrics
- namespace: ops-monit
- ---
- apiVersion: v1
- kind: Service
- metadata:
- # annotations:
- # prometheus.io/scrape: 'true'
- labels:
- app.kubernetes.io/name: kube-state-metrics
- app.kubernetes.io/version: v1.9.7
- name: kube-state-metrics
- namespace: ops-monit
- spec:
- clusterIP: None
- ports:
- - name: http-metrics
- port: 8080
- targetPort: http-metrics
- - name: telemetry
- port: 8081
- targetPort: telemetry
- selector:
- app.kubernetes.io/name: kube-state-metrics
- ---
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- labels:
- app.kubernetes.io/name: kube-state-metrics
- app.kubernetes.io/version: v1.9.7
- name: kube-state-metrics
- namespace: ops-monit
- spec:
- replicas: 1
- selector:
- matchLabels:
- app.kubernetes.io/name: kube-state-metrics
- template:
- metadata:
- labels:
- app.kubernetes.io/name: kube-state-metrics
- app.kubernetes.io/version: v1.9.7
- spec:
- containers:
- - image: quay.mirrors.ustc.edu.cn/coreos/kube-state-metrics:v1.9.7
- livenessProbe:
- httpGet:
- path: /healthz
- port: 8080
- initialDelaySeconds: 5
- timeoutSeconds: 5
- name: kube-state-metrics
- ports:
- - containerPort: 8080
- name: http-metrics
- - containerPort: 8081
- name: telemetry
- readinessProbe:
- httpGet:
- path: /
- port: 8081
- initialDelaySeconds: 5
- timeoutSeconds: 5
- nodeSelector:
- beta.kubernetes.io/os: linux
- serviceAccountName: kube-state-metrics
-
4、node-exporter.yaml
- apiVersion: apps/v1
- kind: DaemonSet
- metadata:
- name: node-exporter
- namespace: monitoring
- labels:
- k8s-app: node-exporter
- spec:
- selector:
- matchLabels:
- k8s-app: node-exporter
- template:
- metadata:
- labels:
- k8s-app: node-exporter
- spec:
- containers:
- - image: prom/node-exporter:v1.0.1
- name: node-exporter
- ports:
- - containerPort: 9100
- protocol: TCP
- name: http
- ---
- apiVersion: v1
- kind: Service
- metadata:
- labels:
- k8s-app: node-exporter
- name: node-exporter
- namespace: monitoring
- spec:
- ports:
- - name: http
- port: 9100
- nodePort: 31672
- protocol: TCP
- type: NodePort
- selector:
- k8s-app: node-exporter
-
5、sa.yaml
- 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: monitoring
- ---
- 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: monitoring
到此Centos7 部署Prometheus(Kubernetes)介绍完成。