要在 Kubernetes 中安装监控,可以通过多种方式实现,Prometheus、Grafana、Heapster 是最常见的工具。这里我们重点介绍 Prometheus 和 Grafana 的安装和配置。Prometheus 是一个开源的系统监控和报警工具,Grafana 是一个开源的分析和监控平台。 安装和配置这两个工具可以帮助你轻松实现对 Kubernetes 集群的监控。先安装 Prometheus,然后再安装 Grafana,最后将 Grafana 配置为使用 Prometheus 作为数据源,并创建仪表盘来显示监控数据。
一、安装 PROMETHEUS
首先需要创建一个命名空间来安装 Prometheus。可以使用以下命令来创建命名空间:
kubectl create namespace monitoring
接下来,创建一个 Prometheus 配置文件 prometheus-config.yaml
,内容如下:
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-server-conf
namespace: monitoring
data:
prometheus.yml: |-
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:10255'
target_label: __address__
- job_name: 'kubernetes-cadvisor'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:4194'
target_label: __address__
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
应用配置文件:
kubectl apply -f prometheus-config.yaml
创建 Prometheus 部署和服务文件 prometheus-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-server
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
component: server
template:
metadata:
labels:
app: prometheus
component: server
spec:
containers:
- name: prometheus
image: prom/prometheus
args:
- "--config.file=/etc/config/prometheus.yml"
- "--storage.tsdb.path=/prometheus/"
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
- "--web.console.templates=/usr/share/prometheus/consoles"
ports:
- containerPort: 9090
volumeMounts:
- name: config-volume
mountPath: /etc/config
- name: storage-volume
mountPath: /prometheus
volumes:
- name: config-volume
configMap:
name: prometheus-server-conf
- name: storage-volume
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: prometheus-server
namespace: monitoring
labels:
app: prometheus
component: server
spec:
type: NodePort
ports:
- port: 9090
targetPort: 9090
nodePort: 30090
selector:
app: prometheus
component: server
应用部署文件:
kubectl apply -f prometheus-deployment.yaml
二、安装 GRAFANA
在 Kubernetes 中安装 Grafana 同样需要创建一个命名空间以及配置和部署文件。
首先,创建 Grafana 配置文件 grafana-datasource-config.yaml
:
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-datasources
namespace: monitoring
data:
datasource.yaml: |-
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus-server.monitoring.svc.cluster.local:9090
应用配置文件:
kubectl apply -f grafana-datasource-config.yaml
创建 Grafana 部署和服务文件 grafana-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana
ports:
- containerPort: 3000
volumeMounts:
- name: grafana-storage
mountPath: /var/lib/grafana
volumes:
- name: grafana-storage
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: monitoring
labels:
app: grafana
spec:
type: NodePort
ports:
- port: 3000
targetPort: 3000
nodePort: 30030
selector:
app: grafana
应用部署文件:
kubectl apply -f grafana-deployment.yaml
三、配置 GRAFANA 仪表盘
Grafana 部署完成后,可以通过浏览器访问 Grafana 界面。默认用户名和密码都是 admin
,登录后需要进行以下配置:
-
添加数据源:
- 打开 Grafana 界面,点击左侧的齿轮图标,选择 “Data Sources”。
- 点击 “Add data source”,选择 “Prometheus”。
- 在 URL 栏输入
http://prometheus-server.monitoring.svc.cluster.local:9090
。 - 点击 “Save & Test” 来测试数据源是否配置成功。
-
导入仪表盘:
- 点击左侧的加号图标,选择 “Import”。
- 在 “Import via grafana.com” 栏输入 6417,这是一个 Kubernetes 监控的预定义仪表盘。
- 点击 “Load”,选择刚刚添加的 Prometheus 数据源,点击 “Import”。
四、监控 METRICS 和 ALERTING
Prometheus 和 Grafana 配置完成后,可以监控 Kubernetes 集群的各种性能指标,包括节点、Pod、服务和容器的 CPU、内存、网络和磁盘使用情况。为了更好地监控和报警,可以配置 Prometheus 的 Alertmanager。
- 创建 Alertmanager 配置文件
alertmanager-config.yaml
:
apiVersion: v1
kind: ConfigMap
metadata:
name: alertmanager-config
namespace: monitoring
data:
alertmanager.yml: |-
global:
resolve_timeout: 5m
route:
group_by: ['job']
group_wait: 30s
group_interval: 5m
repeat_interval: 12h
receiver: 'default-receiver'
receivers:
- name: 'default-receiver'
email_configs:
- to: 'youremail@example.com'
from: 'alertmanager@example.com'
smarthost: 'smtp.example.com:587'
auth_username: 'alertmanager'
auth_password: 'password'
应用配置文件:
kubectl apply -f alertmanager-config.yaml
- 创建 Alertmanager 部署和服务文件
alertmanager-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: alertmanager
namespace: monitoring
spec:
replicas: 1
selector:
matchLabels:
app: alertmanager
template:
metadata:
labels:
app: alertmanager
spec:
containers:
- name: alertmanager
image: prom/alertmanager
args:
- "--config.file=/etc/alertmanager/alertmanager.yml"
ports:
- containerPort: 9093
volumeMounts:
- name: config-volume
mountPath: /etc/alertmanager
volumes:
- name: config-volume
configMap:
name: alertmanager-config
---
apiVersion: v1
kind: Service
metadata:
name: alertmanager
namespace: monitoring
labels:
app: alertmanager
spec:
type: NodePort
ports:
- port: 9093
targetPort: 9093
nodePort: 30093
selector:
app: alertmanager
应用部署文件:
kubectl apply -f alertmanager-deployment.yaml
- 更新 Prometheus 配置文件
prometheus-config.yaml
,添加 Alertmanager 配置:
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-server-conf
namespace: monitoring
data:
prometheus.yml: |-
global:
scrape_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager.monitoring.svc.cluster.local:9093
scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:10255'
target_label: __address__
- job_name: 'kubernetes-cadvisor'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:4194'
target_label: __address__
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
应用更新后的配置文件:
kubectl apply -f prometheus-config.yaml
五、扩展监控和自定义告警规则
为了更好地满足具体需求,可以根据业务需求扩展监控范围和自定义告警规则。可以通过修改 Prometheus 和 Alertmanager 的配置文件来实现。
- 创建自定义告警规则文件
prometheus-alert-rules.yaml
:
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-alert-rules
namespace: monitoring
data:
alert.rules: |-
groups:
- name: example
rules:
- alert: HighCPUUsage
expr: sum(rate(container_cpu_usage_seconds_total[1m])) by (pod) > 0.5
for: 2m
labels:
severity: warning
annotations:
summary: "High CPU usage detected"
description: "Pod {{ $labels.pod }} is using high CPU for more than 2 minutes."
应用自定义告警规则:
kubectl apply -f prometheus-alert-rules.yaml
- 更新 Prometheus 配置文件
prometheus-config.yaml
,添加告警规则:
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-server-conf
namespace: monitoring
data:
prometheus.yml: |-
global:
scrape_interval: 15s
rule_files:
- /etc/prometheus/alert.rules
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager.monitoring.svc.cluster.local:9093
scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https
- job_name: 'kubernetes-nodes'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:10255'
target_label: __address__
- job_name: 'kubernetes-cadvisor'
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:4194'
target_label: __address__
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
应用更新后的配置文件:
kubectl apply -f prometheus-config.yaml
通过上述步骤,你可以在 Kubernetes 集群中安装和配置 Prometheus 和 Grafana 来实现监控。通过配置告警规则和 Alertmanager,可以在出现问题时及时得到通知。
相关问答FAQs:
1. Kubernetes中为什么需要安装监控系统?
Kubernetes作为一个集群管理平台,部署和运行的应用实例可能会非常庞大和复杂。因此,为了及时发现和解决潜在的问题,监控系统在Kubernetes集群中就显得尤为重要。监控系统可以帮助管理员实时监测集群的运行状态、资源利用情况、应用程序性能等,提高集群的稳定性和可靠性。
2. Kubernetes中常用的监控系统有哪些?
在Kubernetes集群中,常用的监控系统包括Prometheus、Grafana、Elasticsearch等。其中,Prometheus是一种开源的监控和报警工具,具有灵活的数据模型和强大的查询语言;Grafana则是一个流行的可视化工具,可以将Prometheus采集的监控数据进行图形化展示;Elasticsearch则适用于日志的收集和分析,可以帮助管理员更好地了解集群中的各种日志信息。
3. 如何在Kubernetes中安装监控系统?
要在Kubernetes集群中安装监控系统,通常可以通过Helm包管理工具来简化部署流程。首先,需要在Kubernetes集群中安装Helm客户端,并配置好Tiller服务端。然后,可以通过Helm Charts来安装Prometheus Operator、Grafana、Elasticsearch等监控组件。在安装完成后,可以根据需要配置监控规则、仪表盘、报警规则等,以实现对集群的全面监控和管理。
关于 GitLab 的更多内容,可以查看官网文档:
官网地址:
文档地址:
论坛地址:
原创文章,作者:DevSecOps,如若转载,请注明出处:https://devops.gitlab.cn/archives/27902