kuboard部署prometheus

61 阅读2分钟

最近要做一个监控,需要在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'