来源:

https://juejin.im/post/5c36054251882525a50bbdf0

https://github.com/redhatxl/k8s-prometheus-grafana

Prometheus

master/node节点环境部署

git clone https://github.com/redhatxl/k8s-prometheus-grafana.git

在node节点下载监控所需镜像(在所有节点也下载了)

  1. docker pull prom/node-exporter
  2. docker pull prom/prometheus:v2.0.0
  3. docker pull grafana/grafana:4.2.0

采用daemonset方式部署node-exporter组件

kubectl create -f node-exporter.yaml

部署prometheus组件

rbac文件

kubectl create -f k8s-prometheus-grafana/prometheus/rbac-setup.yaml

以configmap的形式管理prometheus组件的配置文件

kubectl create -f k8s-prometheus-grafana/prometheus/configmap.yaml

Prometheus deployment 文件

kubectl create -f k8s-prometheus-grafana/prometheus/prometheus.deploy.yml

Prometheus service文件

kubectl create -f k8s-prometheus-grafana/prometheus/prometheus.svc.yml

部署grafana组件

grafana deployment配置文件

kubectl create -f k8s-prometheus-grafana/grafana/grafana-deploy.yaml

grafana service配置文件

kubectl create -f k8s-prometheus-grafana/grafana/grafana-svc.yaml

grafana ingress配置文件

kubectl create -f k8s-prometheus-grafana/grafana/grafana-ing.yaml

访问

  1. k get po -n kube-system -owide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. coredns-5c98db65d4-j2925 1/1 Running 4 2d23h 10.244.0.13 k8s-master <none> <none>
  4. coredns-5c98db65d4-k2rcj 1/1 Running 4 2d23h 10.244.0.12 k8s-master <none> <none>
  5. etcd-k8s-master 1/1 Running 4 2d23h 192.168.190.140 k8s-master <none> <none>
  6. grafana-core-6ff599bfdc-pbdzf 1/1 Running 0 99m 10.244.1.66 k8s-node1 <none> <none>
  7. kube-apiserver-k8s-master 1/1 Running 4 2d23h 192.168.190.140 k8s-master <none> <none>
  8. kube-controller-manager-k8s-master 1/1 Running 4 2d23h 192.168.190.140 k8s-master <none> <none>
  9. kube-flannel-ds-amd64-6rq62 1/1 Running 5 2d23h 192.168.190.140 k8s-master <none> <none>
  10. kube-flannel-ds-amd64-ctmdz 1/1 Running 4 2d23h 192.168.190.141 k8s-node1 <none> <none>
  11. kube-proxy-kmgc5 1/1 Running 4 2d23h 192.168.190.140 k8s-master <none> <none>
  12. kube-proxy-ss8jr 1/1 Running 4 2d23h 192.168.190.141 k8s-node1 <none> <none>
  13. kube-scheduler-k8s-master 1/1 Running 4 2d23h 192.168.190.140 k8s-master <none> <none>
  14. node-exporter-fsfkb 1/1 Running 0 102m 10.244.1.64 k8s-node1 <none> <none>
  15. prometheus-68545d4fd8-hnltb 1/1 Running 0 101m 10.244.1.65 k8s-node1 <none> <none>
  16. k get svc -n kube-system
  17. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  18. grafana NodePort 10.106.70.200 <none> 3000:30592/TCP 98m
  19. kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 2d23h
  20. node-exporter NodePort 10.102.245.168 <none> 9100:31672/TCP 101m
  21. prometheus NodePort 10.101.205.6 <none> 9090:30003/TCP 99m

访问prometheus :

任一个节点的物理地址+暴露的端口(9090:30003/TCP )

访问grafana:

任一个节点的物理地址+暴露的端口(3000:30592/TCP)

输入密码登录:

admin/admin

添加数据源

类型:prometheus

url: http://prometheus:9090

save& test

导入模板

模板下载地址https:///dashboards/315, 或在线导入315 /1621

各配置文件

daemonset方式部署的node-exporter

  1. cat node-exporter.yaml
  2. ---
  3. apiVersion: extensions/v1beta1
  4. kind: DaemonSet
  5. metadata:
  6. name: node-exporter
  7. namespace: kube-system
  8. labels:
  9. k8s-app: node-exporter
  10. spec:
  11. template:
  12. metadata:
  13. labels:
  14. k8s-app: node-exporter
  15. spec:
  16. containers:
  17. - image: prom/node-exporter
  18. name: node-exporter
  19. ports:
  20. - containerPort: 9100
  21. protocol: TCP
  22. name: http
  23. ---
  24. apiVersion: v1
  25. kind: Service
  26. metadata:
  27. labels:
  28. k8s-app: node-exporter
  29. name: node-exporter
  30. namespace: kube-system
  31. spec:
  32. ports:
  33. - name: http
  34. port: 9100
  35. nodePort: 31672
  36. protocol: TCP
  37. type: NodePort
  38. selector:
  39. k8s-app: node-exporter

prometheus的rbac-setup.yaml

  1. cat rbac-setup.yaml
  2. apiVersion: rbac.authorization.k8s.io/v1
  3. kind: ClusterRole
  4. metadata:
  5. name: prometheus
  6. rules:
  7. - apiGroups: [""]
  8. resources:
  9. - nodes
  10. - nodes/proxy
  11. - services
  12. - endpoints
  13. - pods
  14. verbs: ["get", "list", "watch"]
  15. - apiGroups:
  16. - extensions
  17. resources:
  18. - ingresses
  19. verbs: ["get", "list", "watch"]
  20. - nonResourceURLs: ["/metrics"]
  21. verbs: ["get"]
  22. ---
  23. apiVersion: v1
  24. kind: ServiceAccount
  25. metadata:
  26. name: prometheus
  27. namespace: kube-system
  28. ---
  29. apiVersion: rbac.authorization.k8s.io/v1
  30. kind: ClusterRoleBinding
  31. metadata:
  32. name: prometheus
  33. roleRef:
  34. apiGroup: rbac.authorization.k8s.io
  35. kind: ClusterRole
  36. name: prometheus
  37. subjects:
  38. - kind: ServiceAccount
  39. name: prometheus
  40. namespace: kube-system

prometheus的configmap

  1. cat configmap.yaml
  2. apiVersion: v1
  3. kind: ConfigMap
  4. metadata:
  5. name: prometheus-config
  6. namespace: kube-system
  7. data:
  8. prometheus.yml: |
  9. global:
  10. scrape_interval: 15s
  11. evaluation_interval: 15s
  12. scrape_configs:
  13. - job_name: 'kubernetes-apiservers'
  14. kubernetes_sd_configs:
  15. - role: endpoints
  16. scheme: https
  17. tls_config:
  18. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  19. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  20. relabel_configs:
  21. - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
  22. action: keep
  23. regex: default;kubernetes;https
  24. - job_name: 'kubernetes-nodes'
  25. kubernetes_sd_configs:
  26. - role: node
  27. scheme: https
  28. tls_config:
  29. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  30. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  31. relabel_configs:
  32. - action: labelmap
  33. regex: __meta_kubernetes_node_label_(.+)
  34. - target_label: __address__
  35. replacement: kubernetes.default.svc:443
  36. - source_labels: [__meta_kubernetes_node_name]
  37. regex: (.+)
  38. target_label: __metrics_path__
  39. replacement: /api/v1/nodes/${1}/proxy/metrics
  40. - job_name: 'kubernetes-cadvisor'
  41. kubernetes_sd_configs:
  42. - role: node
  43. scheme: https
  44. tls_config:
  45. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  46. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  47. relabel_configs:
  48. - action: labelmap
  49. regex: __meta_kubernetes_node_label_(.+)
  50. - target_label: __address__
  51. replacement: kubernetes.default.svc:443
  52. - source_labels: [__meta_kubernetes_node_name]
  53. regex: (.+)
  54. target_label: __metrics_path__
  55. replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
  56. - job_name: 'kubernetes-service-endpoints'
  57. kubernetes_sd_configs:
  58. - role: endpoints
  59. relabel_configs:
  60. - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
  61. action: keep
  62. regex: true
  63. - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
  64. action: replace
  65. target_label: __scheme__
  66. regex: (https?)
  67. - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
  68. action: replace
  69. target_label: __metrics_path__
  70. regex: (.+)
  71. - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
  72. action: replace
  73. target_label: __address__
  74. regex: ([^:]+)(?::\d+)?;(\d+)
  75. replacement: $1:$2
  76. - action: labelmap
  77. regex: __meta_kubernetes_service_label_(.+)
  78. - source_labels: [__meta_kubernetes_namespace]
  79. action: replace
  80. target_label: kubernetes_namespace
  81. - source_labels: [__meta_kubernetes_service_name]
  82. action: replace
  83. target_label: kubernetes_name
  84. - job_name: 'kubernetes-services'
  85. kubernetes_sd_configs:
  86. - role: service
  87. metrics_path: /probe
  88. params:
  89. module: [http_2xx]
  90. relabel_configs:
  91. - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_probe]
  92. action: keep
  93. regex: true
  94. - source_labels: [__address__]
  95. target_label: __param_target
  96. - target_label: __address__
  97. replacement: blackbox-exporter.example.com:9115
  98. - source_labels: [__param_target]
  99. target_label: instance
  100. - action: labelmap
  101. regex: __meta_kubernetes_service_label_(.+)
  102. - source_labels: [__meta_kubernetes_namespace]
  103. target_label: kubernetes_namespace
  104. - source_labels: [__meta_kubernetes_service_name]
  105. target_label: kubernetes_name
  106. - job_name: 'kubernetes-ingresses'
  107. kubernetes_sd_configs:
  108. - role: ingress
  109. relabel_configs:
  110. - source_labels: [__meta_kubernetes_ingress_annotation_prometheus_io_probe]
  111. action: keep
  112. regex: true
  113. - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
  114. regex: (.+);(.+);(.+)
  115. replacement: ${1}://${2}${3}
  116. target_label: __param_target
  117. - target_label: __address__
  118. replacement: blackbox-exporter.example.com:9115
  119. - source_labels: [__param_target]
  120. target_label: instance
  121. - action: labelmap
  122. regex: __meta_kubernetes_ingress_label_(.+)
  123. - source_labels: [__meta_kubernetes_namespace]
  124. target_label: kubernetes_namespace
  125. - source_labels: [__meta_kubernetes_ingress_name]
  126. target_label: kubernetes_name
  127. - job_name: 'kubernetes-pods'
  128. kubernetes_sd_configs:
  129. - role: pod
  130. relabel_configs:
  131. - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
  132. action: keep
  133. regex: true
  134. - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
  135. action: replace
  136. target_label: __metrics_path__
  137. regex: (.+)
  138. - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
  139. action: replace
  140. regex: ([^:]+)(?::\d+)?;(\d+)
  141. replacement: $1:$2
  142. target_label: __address__
  143. - action: labelmap
  144. regex: __meta_kubernetes_pod_label_(.+)
  145. - source_labels: [__meta_kubernetes_namespace]
  146. action: replace
  147. target_label: kubernetes_namespace
  148. - source_labels: [__meta_kubernetes_pod_name]
  149. action: replace
  150. target_label: kubernetes_pod_name

配置说明:来源官网

https://prometheus.io/docs/prometheus/latest/configuration/configuration/

<kubernetes_sd_config>

Kubernetes SD配置允许从Kubernetes的 REST API 检索抓取目标, 并始终与集群状态保持同步。

role可以将以下类型之一配置为发现目标:

1,node

该node角色为每个群集节点发现一个目标,其地址默认为Kubelet的HTTP端口。目标地址默认为的地址类型顺序Kubernetes节点对象的第一个现有地址NodeInternalIP,NodeExternalIP, NodeLegacyHostIP,和NodeHostName。

可用的元标签:

__meta_kubernetes_node_name:节点对象的名称。

_meta_kubernetes_node_label:来自节点对象的每个标签。

_meta_kubernetes_node_labelpresent:true对于节点对象中的每个标签。

_meta_kubernetes_node_annotation:来自节点对象的每个注释。

_meta_kubernetes_node_annotationpresent:true用于节点对象的每个注释。

_meta_kubernetes_node_address<address_type>:每个节点地址类型的第一个地址(如果存在)。

此外,该instance节点的标签将设置为从API服务器检索到的节点名称

2,service

该service角色发现每一个服务端口为每个服务的目标。这通常用于监视服务的黑盒。该地址将设置为服务的Kubernetes DNS名称以及相应的服务端口

可用的元标签:

__meta_kubernetes_namespace:服务对象的名称空间。

_meta_kubernetes_service_annotation:来自服务对象的每个注释。

_meta_kubernetes_service_annotationpresent:对于服务对象的每个注释为“ true”。

__meta_kubernetes_service_cluster_ip:服务的群集IP地址。(不适用于外部名称类型的服务)

__meta_kubernetes_service_external_name:服务的DNS名称。(适用于外部名称类型的服务)

_meta_kubernetes_service_label:服务对象中的每个标签。

_meta_kubernetes_service_labelpresent:true用于服务对象的每个标签。

__meta_kubernetes_service_name:服务对象的名称。

__meta_kubernetes_service_port_name:目标服务端口的名称。

__meta_kubernetes_service_port_protocol:目标服务端口的协议。

3,pod

该pod角色发现所有pods并将其内容器公开为目标。对于容器的每个声明的端口,将生成一个目标。如果容器没有指定的端口,则会为每个容器创建无端口目标,以通过重新标记手动添加端口

可用的元标签:

__meta_kubernetes_namespace:pod对象的名称空间。

__meta_kubernetes_pod_name:pod对象的名称。

__meta_kubernetes_pod_ip:pod对象的pod IP。

_meta_kubernetes_pod_label:来自pod对象的每个标签。

_meta_kubernetes_pod_labelpresent:true用于pod对象中的每个标签。

_meta_kubernetes_pod_annotation:来自pod对象的每个注释。

_meta_kubernetes_pod_annotationpresent:true用于pod对象的每个注释。

__meta_kubernetes_pod_container_init:true如果容器是InitContainer

__meta_kubernetes_pod_container_name:目标地址指向的容器的名称。

__meta_kubernetes_pod_container_port_name:容器端口的名称。

__meta_kubernetes_pod_container_port_number:容器端口号。

__meta_kubernetes_pod_container_port_protocol:容器端口的协议。

__meta_kubernetes_pod_ready:设置为true或false吊舱的就绪状态。

__meta_kubernetes_pod_phase:设置为Pending,Running,Succeeded,Failed或Unknown 在生命周期。

__meta_kubernetes_pod_node_name:将Pod调度到的节点的名称。

__meta_kubernetes_pod_host_ip:pod对象的当前主机IP。

__meta_kubernetes_pod_uid:pod对象的UID。

__meta_kubernetes_pod_controller_kind:pod控制器的对象种类。

__meta_kubernetes_pod_controller_name:pod控制器的名称。

4,endpoints

该endpoints角色从服务的列表中的终端发现目标。对于每个端点地址,每个端口都发现一个目标。如果端点由Pod支持,则该Pod的所有其他未绑定到端点端口的容器端口也将被发现为目标

可用的元标签:

__meta_kubernetes_namespace:端点对象的名称空间。

__meta_kubernetes_endpoints_name:端点对象的名称。

对于直接从端点列表中发现的所有目标(未从基础容器额外推断出的所有目标),将附加以下标签:

__meta_kubernetes_endpoint_hostname:端点的主机名。

__meta_kubernetes_endpoint_node_name:托管端点的节点的名称。

__meta_kubernetes_endpoint_ready:设置为true或false为端点的就绪状态。

__meta_kubernetes_endpoint_port_name:端点端口的名称。

__meta_kubernetes_endpoint_port_protocol:端点端口的协议。

__meta_kubernetes_endpoint_address_target_kind:端点地址目标的种类。

__meta_kubernetes_endpoint_address_target_name:端点地址目标的名称。

如果端点属于服务,role: service则会附加发现的所有标签。

对于由Pod支持的所有目标,role: pod将附加发现的所有标签。

5,ingress

该ingress角色发现了一个目标,为每个进入的每个路径。这通常对黑盒监视入口很有用。该地址将设置为入口规范中指定的主机。

可用的元标签:

__meta_kubernetes_namespace:入口对象的名称空间。

__meta_kubernetes_ingress_name:入口对象的名称。

_meta_kubernetes_ingress_label:来自入口对象的每个标签。

_meta_kubernetes_ingress_labelpresent:true用于来自入口对象的每个标签。

_meta_kubernetes_ingress_annotation:来自入口对象的每个注释。

_meta_kubernetes_ingress_annotationpresent:true用于来自入口对象的每个注释。

__meta_kubernetes_ingress_scheme:https如果设置了TLS配置,则为入口的协议方案。默认为http。

__meta_kubernetes_ingress_path:来自入口规范的路径。默认为/

有关Kubernetes发现的配置选项:

  1. # The information to access the Kubernetes API.
  2. # The API server addresses. If left empty, Prometheus is assumed to run inside
  3. # of the cluster and will discover API servers automatically and use the pod's
  4. # CA certificate and bearer token file at /var/run/secrets/kubernetes.io/serviceaccount/.
  5. [ api_server: <host> ]
  6. # The Kubernetes role of entities that should be discovered.
  7. role: <role>
  8. # Optional authentication information used to authenticate to the API server.
  9. # Note that `basic_auth`, `bearer_token` and `bearer_token_file` options are
  10. # mutually exclusive.
  11. # password and password_file are mutually exclusive.
  12. # Optional HTTP basic authentication information.
  13. basic_auth:
  14. [ username: <string> ]
  15. [ password: <secret> ]
  16. [ password_file: <string> ]
  17. # Optional bearer token authentication information.
  18. [ bearer_token: <secret> ]
  19. # Optional bearer token file authentication information.
  20. [ bearer_token_file: <filename> ]
  21. # Optional proxy URL.
  22. [ proxy_url: <string> ]
  23. # TLS configuration.
  24. tls_config:
  25. [ <tls_config> ]
  26. # Optional namespace discovery. If omitted, all namespaces are used.
  27. namespaces:
  28. names:
  29. [ - <string> ]

prometheus-kubernetes.yml:

来源:https://github.com/prometheus/prometheus/blob/release-2.14/documentation/examples/prometheus-kubernetes.yml

  1. # A scrape configuration for running Prometheus on a Kubernetes cluster.
  2. # This uses separate scrape configs for cluster components (i.e. API server, node)
  3. # and services to allow each to use different authentication configs.
  4. #
  5. # Kubernetes labels will be added as Prometheus labels on metrics via the
  6. # `labelmap` relabeling action.
  7. #
  8. # If you are using Kubernetes 1.7.2 or earlier, please take note of the comments
  9. # for the kubernetes-cadvisor job; you will need to edit or remove this job.
  10. # Scrape config for API servers.
  11. #
  12. # Kubernetes exposes API servers as endpoints to the default/kubernetes
  13. # service so this uses `endpoints` role and uses relabelling to only keep
  14. # the endpoints associated with the default/kubernetes service using the
  15. # default named port `https`. This works for single API server deployments as
  16. # well as HA API server deployments.
  17. scrape_configs:
  18. - job_name: 'kubernetes-apiservers'
  19. kubernetes_sd_configs:
  20. - role: endpoints
  21. # Default to scraping over https. If required, just disable this or change to
  22. # `http`.
  23. scheme: https
  24. # This TLS & bearer token file config is used to connect to the actual scrape
  25. # endpoints for cluster components. This is separate to discovery auth
  26. # configuration because discovery & scraping are two separate concerns in
  27. # Prometheus. The discovery auth config is automatic if Prometheus runs inside
  28. # the cluster. Otherwise, more config options have to be provided within the
  29. # <kubernetes_sd_config>.
  30. tls_config:
  31. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  32. # If your node certificates are self-signed or use a different CA to the
  33. # master CA, then disable certificate verification below. Note that
  34. # certificate verification is an integral part of a secure infrastructure
  35. # so this should only be disabled in a controlled environment. You can
  36. # disable certificate verification by uncommenting the line below.
  37. #
  38. # insecure_skip_verify: true
  39. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  40. # Keep only the default/kubernetes service endpoints for the https port. This
  41. # will add targets for each API server which Kubernetes adds an endpoint to
  42. # the default/kubernetes service.
  43. relabel_configs:
  44. - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
  45. action: keep
  46. regex: default;kubernetes;https
  47. # Scrape config for nodes (kubelet).
  48. #
  49. # Rather than connecting directly to the node, the scrape is proxied though the
  50. # Kubernetes apiserver. This means it will work if Prometheus is running out of
  51. # cluster, or can't connect to nodes for some other reason (e.g. because of
  52. # firewalling).
  53. - job_name: 'kubernetes-nodes'
  54. # Default to scraping over https. If required, just disable this or change to
  55. # `http`.
  56. scheme: https
  57. # This TLS & bearer token file config is used to connect to the actual scrape
  58. # endpoints for cluster components. This is separate to discovery auth
  59. # configuration because discovery & scraping are two separate concerns in
  60. # Prometheus. The discovery auth config is automatic if Prometheus runs inside
  61. # the cluster. Otherwise, more config options have to be provided within the
  62. # <kubernetes_sd_config>.
  63. tls_config:
  64. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  65. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  66. kubernetes_sd_configs:
  67. - role: node
  68. relabel_configs:
  69. - action: labelmap
  70. regex: __meta_kubernetes_node_label_(.+)
  71. - target_label: __address__
  72. replacement: kubernetes.default.svc:443
  73. - source_labels: [__meta_kubernetes_node_name]
  74. regex: (.+)
  75. target_label: __metrics_path__
  76. replacement: /api/v1/nodes/${1}/proxy/metrics
  77. # Scrape config for Kubelet cAdvisor.
  78. #
  79. # This is required for Kubernetes 1.7.3 and later, where cAdvisor metrics
  80. # (those whose names begin with 'container_') have been removed from the
  81. # Kubelet metrics endpoint. This job scrapes the cAdvisor endpoint to
  82. # retrieve those metrics.
  83. #
  84. # In Kubernetes 1.7.0-1.7.2, these metrics are only exposed on the cAdvisor
  85. # HTTP endpoint; use "replacement: /api/v1/nodes/${1}:4194/proxy/metrics"
  86. # in that case (and ensure cAdvisor's HTTP server hasn't been disabled with
  87. # the --cadvisor-port=0 Kubelet flag).
  88. #
  89. # This job is not necessary and should be removed in Kubernetes 1.6 and
  90. # earlier versions, or it will cause the metrics to be scraped twice.
  91. - job_name: 'kubernetes-cadvisor'
  92. # Default to scraping over https. If required, just disable this or change to
  93. # `http`.
  94. scheme: https
  95. # This TLS & bearer token file config is used to connect to the actual scrape
  96. # endpoints for cluster components. This is separate to discovery auth
  97. # configuration because discovery & scraping are two separate concerns in
  98. # Prometheus. The discovery auth config is automatic if Prometheus runs inside
  99. # the cluster. Otherwise, more config options have to be provided within the
  100. # <kubernetes_sd_config>.
  101. tls_config:
  102. ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  103. bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  104. kubernetes_sd_configs:
  105. - role: node
  106. relabel_configs:
  107. - action: labelmap
  108. regex: __meta_kubernetes_node_label_(.+)
  109. - target_label: __address__
  110. replacement: kubernetes.default.svc:443
  111. - source_labels: [__meta_kubernetes_node_name]
  112. regex: (.+)
  113. target_label: __metrics_path__
  114. replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor
  115. # Example scrape config for service endpoints.
  116. #
  117. # The relabeling allows the actual service scrape endpoint to be configured
  118. # for all or only some endpoints.
  119. - job_name: 'kubernetes-service-endpoints'
  120. kubernetes_sd_configs:
  121. - role: endpoints
  122. relabel_configs:
  123. # Example relabel to scrape only endpoints that have
  124. # "example.io/should_be_scraped = true" annotation.
  125. # - source_labels: [__meta_kubernetes_service_annotation_example_io_should_be_scraped]
  126. # action: keep
  127. # regex: true
  128. #
  129. # Example relabel to customize metric path based on endpoints
  130. # "example.io/metric_path = <metric path>" annotation.
  131. # - source_labels: [__meta_kubernetes_service_annotation_example_io_metric_path]
  132. # action: replace
  133. # target_label: __metrics_path__
  134. # regex: (.+)
  135. #
  136. # Example relabel to scrape only single, desired port for the service based
  137. # on endpoints "example.io/scrape_port = <port>" annotation.
  138. # - source_labels: [__address__, __meta_kubernetes_service_annotation_example_io_scrape_port]
  139. # action: replace
  140. # regex: ([^:]+)(?::\d+)?;(\d+)
  141. # replacement: $1:$2
  142. # target_label: __address__
  143. #
  144. # Example relabel to configure scrape scheme for all service scrape targets
  145. # based on endpoints "example.io/scrape_scheme = <scheme>" annotation.
  146. # - source_labels: [__meta_kubernetes_service_annotation_example_io_scrape_scheme]
  147. # action: replace
  148. # target_label: __scheme__
  149. # regex: (https?)
  150. - action: labelmap
  151. regex: __meta_kubernetes_service_label_(.+)
  152. - source_labels: [__meta_kubernetes_namespace]
  153. action: replace
  154. target_label: kubernetes_namespace
  155. - source_labels: [__meta_kubernetes_service_name]
  156. action: replace
  157. target_label: kubernetes_name
  158. # Example scrape config for probing services via the Blackbox Exporter.
  159. #
  160. # The relabeling allows the actual service scrape endpoint to be configured
  161. # for all or only some services.
  162. - job_name: 'kubernetes-services'
  163. metrics_path: /probe
  164. params:
  165. module: [http_2xx]
  166. kubernetes_sd_configs:
  167. - role: service
  168. relabel_configs:
  169. # Example relabel to probe only some services that have "example.io/should_be_probed = true" annotation
  170. # - source_labels: [__meta_kubernetes_service_annotation_example_io_should_be_probed]
  171. # action: keep
  172. # regex: true
  173. - source_labels: [__address__]
  174. target_label: __param_target
  175. - target_label: __address__
  176. replacement: blackbox-exporter.example.com:9115
  177. - source_labels: [__param_target]
  178. target_label: instance
  179. - action: labelmap
  180. regex: __meta_kubernetes_service_label_(.+)
  181. - source_labels: [__meta_kubernetes_namespace]
  182. target_label: kubernetes_namespace
  183. - source_labels: [__meta_kubernetes_service_name]
  184. target_label: kubernetes_name
  185. # Example scrape config for probing ingresses via the Blackbox Exporter.
  186. #
  187. # The relabeling allows the actual ingress scrape endpoint to be configured
  188. # for all or only some services.
  189. - job_name: 'kubernetes-ingresses'
  190. metrics_path: /probe
  191. params:
  192. module: [http_2xx]
  193. kubernetes_sd_configs:
  194. - role: ingress
  195. relabel_configs:
  196. # Example relabel to probe only some ingresses that have "example.io/should_be_probed = true" annotation
  197. # - source_labels: [__meta_kubernetes_ingress_annotation_example_io_should_be_probed]
  198. # action: keep
  199. # regex: true
  200. - source_labels: [__meta_kubernetes_ingress_scheme,__address__,__meta_kubernetes_ingress_path]
  201. regex: (.+);(.+);(.+)
  202. replacement: ${1}://${2}${3}
  203. target_label: __param_target
  204. - target_label: __address__
  205. replacement: blackbox-exporter.example.com:9115
  206. - source_labels: [__param_target]
  207. target_label: instance
  208. - action: labelmap
  209. regex: __meta_kubernetes_ingress_label_(.+)
  210. - source_labels: [__meta_kubernetes_namespace]
  211. target_label: kubernetes_namespace
  212. - source_labels: [__meta_kubernetes_ingress_name]
  213. target_label: kubernetes_name
  214. # Example scrape config for pods
  215. #
  216. # The relabeling allows the actual pod scrape to be configured
  217. # for all the declared ports (or port-free target if none is declared)
  218. # or only some ports.
  219. - job_name: 'kubernetes-pods'
  220. kubernetes_sd_configs:
  221. - role: pod
  222. relabel_configs:
  223. # Example relabel to scrape only pods that have
  224. # "example.io/should_be_scraped = true" annotation.
  225. # - source_labels: [__meta_kubernetes_pod_annotation_example_io_should_be_scraped]
  226. # action: keep
  227. # regex: true
  228. #
  229. # Example relabel to customize metric path based on pod
  230. # "example.io/metric_path = <metric path>" annotation.
  231. # - source_labels: [__meta_kubernetes_pod_annotation_example_io_metric_path]
  232. # action: replace
  233. # target_label: __metrics_path__
  234. # regex: (.+)
  235. #
  236. # Example relabel to scrape only single, desired port for the pod
  237. # based on pod "example.io/scrape_port = <port>" annotation.
  238. # Note that __address__ is modified here, so if pod containers' ports
  239. # are declared, they all will be ignored.
  240. # - source_labels: [__address__, __meta_kubernetes_pod_annotation_example_io_scrape_port]
  241. # action: replace
  242. # regex: ([^:]+)(?::\d+)?;(\d+)
  243. # replacement: $1:$2
  244. # target_label: __address__
  245. - action: labelmap
  246. regex: __meta_kubernetes_pod_label_(.+)
  247. - source_labels: [__meta_kubernetes_namespace]
  248. action: replace
  249. target_label: kubernetes_namespace
  250. - source_labels: [__meta_kubernetes_pod_name]
  251. action: replace
  252. target_label: kubernetes_pod_name

Prometheus deployment

  1. cat prometheus.deploy.yml
  2. ---
  3. apiVersion: apps/v1beta2
  4. kind: Deployment
  5. metadata:
  6. labels:
  7. name: prometheus-deployment
  8. name: prometheus
  9. namespace: kube-system
  10. spec:
  11. replicas: 1
  12. selector:
  13. matchLabels:
  14. app: prometheus
  15. template:
  16. metadata:
  17. labels:
  18. app: prometheus
  19. spec:
  20. containers:
  21. - image: prom/prometheus:v2.0.0
  22. name: prometheus
  23. command:
  24. - "/bin/prometheus"
  25. args:
  26. - "--config.file=/etc/prometheus/prometheus.yml"
  27. - "--storage.tsdb.path=/prometheus"
  28. - "--storage.tsdb.retention=24h"
  29. ports:
  30. - containerPort: 9090
  31. protocol: TCP
  32. volumeMounts:
  33. - mountPath: "/prometheus"
  34. name: data
  35. - mountPath: "/etc/prometheus"
  36. name: config-volume
  37. resources:
  38. requests:
  39. cpu: 100m
  40. memory: 100Mi
  41. limits:
  42. cpu: 500m
  43. memory: 2500Mi
  44. serviceAccountName: prometheus
  45. volumes:
  46. - name: data
  47. emptyDir: {}
  48. - name: config-volume
  49. configMap:
  50. name: prometheus-config

prometheus的service

  1. cat prometheus.svc.yml
  2. ---
  3. kind: Service
  4. apiVersion: v1
  5. metadata:
  6. labels:
  7. app: prometheus
  8. name: prometheus
  9. namespace: kube-system
  10. spec:
  11. type: NodePort
  12. ports:
  13. - port: 9090
  14. targetPort: 9090
  15. nodePort: 30003
  16. selector:
  17. app: prometheus

grafana-deployment配置文件

  1. cat grafana-deploy.yaml
  2. apiVersion: extensions/v1beta1
  3. kind: Deployment
  4. metadata:
  5. name: grafana-core
  6. namespace: kube-system
  7. labels:
  8. app: grafana
  9. component: core
  10. spec:
  11. replicas: 1
  12. template:
  13. metadata:
  14. labels:
  15. app: grafana
  16. component: core
  17. spec:
  18. containers:
  19. - image: grafana/grafana:4.2.0
  20. name: grafana-core
  21. imagePullPolicy: IfNotPresent
  22. # env:
  23. resources:
  24. # keep request = limit to keep this container in guaranteed class
  25. limits:
  26. cpu: 100m
  27. memory: 100Mi
  28. requests:
  29. cpu: 100m
  30. memory: 100Mi
  31. env:
  32. # The following env variables set up basic auth twith the default admin user and admin password.
  33. - name: GF_AUTH_BASIC_ENABLED
  34. value: "true"
  35. - name: GF_AUTH_ANONYMOUS_ENABLED
  36. value: "false"
  37. # - name: GF_AUTH_ANONYMOUS_ORG_ROLE
  38. # value: Admin
  39. # does not really work, because of template variables in exported dashboards:
  40. # - name: GF_DASHBOARDS_JSON_ENABLED
  41. # value: "true"
  42. readinessProbe:
  43. httpGet:
  44. path: /login
  45. port: 3000
  46. # initialDelaySeconds: 30
  47. # timeoutSeconds: 1
  48. volumeMounts:
  49. - name: grafana-persistent-storage
  50. mountPath: /var
  51. volumes:
  52. - name: grafana-persistent-storage
  53. emptyDir: {}

grafana service

  1. cat grafana-svc.yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: grafana
  6. namespace: kube-system
  7. labels:
  8. app: grafana
  9. component: core
  10. spec:
  11. type: NodePort
  12. ports:
  13. - port: 3000
  14. selector:
  15. app: grafana
  16. component: core

grafana ingress

  1. cat grafana-ing.yaml
  2. apiVersion: extensions/v1beta1
  3. kind: Ingress
  4. metadata:
  5. name: grafana
  6. namespace: kube-system
  7. spec:
  8. rules:
  9. - host: k8s.grafana
  10. http:
  11. paths:
  12. - path: /
  13. backend:
  14. serviceName: grafana
  15. servicePort: 3000

k8b部署prometheus+grafana的更多相关文章

  1. Rancher2.x 一键式部署 Prometheus + Grafana 监控 Kubernetes 集群

    目录 1.Prometheus & Grafana 介绍 2.环境.软件准备 3.Rancher 2.x 应用商店 4.一键式部署 Prometheus 5.验证 Prometheus + G ...

  2. 部署Prometheus+Grafana监控

    Prometheus 1.不是很友好,各种配置都手写 2.对docker和k8s监控有成熟解决方案 Prometheus(普罗米修斯) 是一个最初在SoudCloud上构建的监控系统,开源项目,拥有非 ...

  3. k8s实战之部署Prometheus+Grafana可视化监控告警平台

    写在前面 之前部署web网站的时候,架构图中有一环节是监控部分,并且搭建一套有效的监控平台对于运维来说非常之重要,只有这样才能更有效率的保证我们的服务器和服务的稳定运行,常见的开源监控软件有好几种,如 ...

  4. kubenetes部署prometheus+grafana

    文章目录 环境介绍 创建node-exporter 创建Prometheus 创建Grafana 测试 环境介绍 # 关于k8s的集群部署,可以查看我其他博客 [root@master ~]# cat ...

  5. 群晖-使用docker套件部署Prometheus+Grafana

    Docker 部署 Prometheus 说明: 先在群辉管理界面安装好docker套件,修改一下镜像源(更快一点) 所需容器如下 Prometheus Server(普罗米修斯监控主服务器 ) No ...

  6. K8s 部署 Prometheus + Grafana

    一.简介 1. Prometheus 一款开源的监控&报警&时间序列数据库的组合,起始是由 SoundCloud 公司开发的 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态, ...

  7. Kubernetes部署Prometheus+Grafana(非存储持久化方式部署)

    1.在master节点处新建一个文件夹,用于保存下载prometheus+granfana的yaml文件 mkdir /root/prometheus cd /root/prometheus git ...

  8. 【Linux】【Services】【SaaS】Docker+kubernetes(12. 部署prometheus/grafana/Influxdb实现监控)

    1.简介 1.1. 官方网站: promethos:https://prometheus.io/ grafana:https://grafana.com/ 1.2. 架构图 2. 环境 2.1. 机器 ...

  9. CentOS7安装部署Prometheus+Grafana (转)

    转自:https://www.jianshu.com/p/967cb76cd5ca 作为监控系统的后起之秀,prometheus的安装可谓非常简单,不需要第三方的依赖(数据库.缓存.PHP之类的).下 ...

随机推荐

  1. Django2.2 Mysql数据表一对一映射(字段绑定) --Model拓展学习笔记shen

    我:本次继上次的Model继续延伸一下数据表之间的一对一映射关系 访客:有什么用? 我:众所周知,一张数据表的字段太多会显得冗余.杂乱,那么就需要将一张表进行拆分成多个表,这样不会太杂乱,也比较好维护 ...

  2. Elasticsearch-如何控制存储和索引文档(_source、_all、返回源文档的某些字段)

    Elasticsearch-如何控制存储和索引文档(_source._all) _source:可以在索引中存储文档._all:可以在单个字段上索引所有内容. 1. 存储原有内容的_source _s ...

  3. JS小知识--获取当前日期的时间和上周五时间

    获取当前日期的时间和上周五时间 var today=new Date();//获取当前时间var weekday=today.getDay();//获取星期几    var monday=new Da ...

  4. Python内置函数Object

    英文文档 class object Return a new featureless object. object is a base for all classes. It has the meth ...

  5. C++多线程基础学习笔记(八)

    shared_futrue和futrue_status的用法 shared_futrue是一个类模板,类似于futrue,不同的是它的成员函数get()可以使用多次,因为是复制数据,而futrue的g ...

  6. 对C++类的继承和派生的理解

    C++中的继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如儿子继承父亲的财产. 1.继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程. ...

  7. python-day42(正式学习)

    目录 数据库 卸载 安装 连接数据库 用户信息查看 数据库的基本操作 表的基本操作 记录的基本操作 复习 今日内容 数据库配置 数据库修改信息 用户操作:重点 表的修改 创建表的完整语法 数据库表的引 ...

  8. 分布式---Raft算法

    6.Raft   Raft也是分布式一致性协议,主要是用来竞选主节点. 单个Candidate的竞选   有三种节点:Follower,Candidate和Leader.Leader会周期性的发送心跳 ...

  9. C#中的编译为什么不叫Compile而叫build

    是因为Build包含了compile,build既compile了你自己的代码,又把你compile的Assembly和引用别人的Assembly放在一起buiid.

  10. pycharm terminal打开在虚拟环境

    pycharm调试是虚拟环境,terminal不是虚拟环境,搞了好久,原来需要激活一下 cd   venv\Scripts> 去虚拟环境的Script目录下,运行activate.bat激活环境 ...