apiVersion: v1 kind: Namespace metadata: name: monitoring --- apiVersion: v1 kind: ServiceAccount metadata: name: prometheus namespace: monitoring --- 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", "networking.k8s.io"] resources: [ingresses] verbs: [get, list, watch] --- 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 --- apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: monitoring data: prometheus.yml: | global: scrape_interval: 15s external_labels: cluster: planck scrape_configs: - job_name: prometheus static_configs: - targets: ["localhost:9090"] - job_name: node-exporter kubernetes_sd_configs: - role: pod selectors: - role: pod label: "app=node-exporter" relabel_configs: - source_labels: [__meta_kubernetes_pod_node_name] target_label: instance - source_labels: [__meta_kubernetes_pod_container_port_number] action: keep regex: "9100" - job_name: kube-state-metrics kubernetes_sd_configs: - role: pod selectors: - role: pod label: "app=kube-state-metrics" relabel_configs: - source_labels: [__meta_kubernetes_pod_container_port_number] action: keep regex: "8080" - job_name: kubelet scheme: https tls_config: insecure_skip_verify: true authorization: credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__meta_kubernetes_node_name] target_label: instance - target_label: __address__ replacement: kubernetes.default.svc:443 - source_labels: [__meta_kubernetes_node_name] target_label: __metrics_path__ regex: (.+) replacement: /api/v1/nodes/${1}/proxy/metrics - job_name: cadvisor scheme: https tls_config: insecure_skip_verify: true authorization: credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__meta_kubernetes_node_name] target_label: instance - target_label: __address__ replacement: kubernetes.default.svc:443 - source_labels: [__meta_kubernetes_node_name] target_label: __metrics_path__ regex: (.+) replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor --- apiVersion: apps/v1 kind: StatefulSet metadata: name: prometheus namespace: monitoring spec: serviceName: prometheus replicas: 1 selector: matchLabels: {app: prometheus} template: metadata: labels: {app: prometheus} spec: serviceAccountName: prometheus containers: - name: prometheus image: prom/prometheus:v3.6.0 args: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.retention.time=15d - --storage.tsdb.path=/data - --web.enable-remote-write-receiver ports: - containerPort: 9090 resources: requests: {cpu: 150m, memory: 512Mi} limits: {memory: 1Gi} volumeMounts: - {name: config, mountPath: /etc/prometheus} - {name: data, mountPath: /data} volumes: - name: config configMap: {name: prometheus-config} volumeClaimTemplates: - metadata: {name: data} spec: accessModes: [ReadWriteOnce] storageClassName: local-path resources: requests: {storage: 20Gi} --- apiVersion: v1 kind: Service metadata: name: prometheus namespace: monitoring spec: selector: {app: prometheus} ports: - port: 9090 targetPort: 9090