最近要做一个监控,需要在kuboard上面部署一个prometheus,我这里使用的是yaml方式
命名空间 namespace要注意改成你自己的
先创建配置config
---
apiVersion: v1
data:
prometheus.yml: |
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'kubernetes-pod'
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__
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: pod
- source_labels: [__meta_kubernetes_pod_label_app]
action: replace
target_label: application
kind: ConfigMap
metadata:
name: prometheus-config
namespace: kuboard
创建数据卷prometheus-data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
k8s.kuboard.cn/pvcType: Dynamic
pv.kubernetes.io/bind-completed: 'yes'
pv.kubernetes.io/bound-by-controller: 'yes'
volume.beta.kubernetes.io/storage-provisioner: efs.csi.aws.com
volume.kubernetes.io/storage-provisioner: efs.csi.aws.com
finalizers:
- kubernetes.io/pvc-protection
name: prometheus-data
namespace: kuboard
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: '5'
storageClassName: efs-sc
volumeMode: Filesystem
volumeName: pvc-ece32302-290a-43c9-9adb-e82b06acc09f
创建服务prometheus-service
---
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/port: '9090'
prometheus.io/scrape: 'true'
name: prometheus-service
namespace: kuboard
spec:
ports:
- name: web
port: 9090
protocol: TCP
targetPort: 9090
selector:
app: prometheus
sessionAffinity: None
type: ClusterIP
创建授权账号 ServiceAccount
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus
namespace: kuboard
创建角色权限 prometheus-cluster-role
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus-cluster-role
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/proxy
- nodes/metrics
- services
- endpoints
- pods
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources:
- configmaps
verbs: ["get"]
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources:
- namespaces
verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
创建角色权限和账号的关联 prometheus-cluster-role-binding
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: prometheus-cluster-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus-cluster-role
subjects:
- kind: ServiceAccount
name: prometheus
namespace: kuboard
这里创建Deployment
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations: {}
labels:
app: prometheus
k8s.kuboard.cn/name: prometheus-server
name: prometheus-server
namespace: kuboard
resourceVersion: '828044379'
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: prometheus
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
annotations:
kubectl.kubernetes.io/restartedAt: '2025-11-05T14:51:01+08:00'
creationTimestamp: null
labels:
app: prometheus
spec:
containers:
- args:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
- '--web.listen-address=:9090'
image: >-
registry.cn-hangzhou.aliyuncs.com/google_containers/prometheus:v2.45.0
imagePullPolicy: IfNotPresent
name: prometheus
ports:
- containerPort: 9091
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /etc/prometheus/
name: prometheus-config
- mountPath: /prometheus
name: prometheus-storage
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: prometheus
serviceAccountName: prometheus
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: prometheus-config
name: prometheus-config
- emptyDir: {}
name: prometheus-storage
这里我没有使用系统原先的9090 有需要的可以自己改下,另外没有增加ruler 需要的可以再加
如果需要收集java springboot服务 记得加配置 我这里java服务端口是8181 所以这里配置的是8181
template:
metadata:
annotations:
kubectl.kubernetes.io/restartedAt: '2025-11-05T12:10:04+08:00'
prometheus.io/path: /actuator/prometheus
prometheus.io/port: '8181'
prometheus.io/scheme: http
prometheus.io/scrape: 'true'