Kubernetes 是一个用于管理容器化应用的开源平台,它为开发人员和运维人员提供了一套基于容器的应用程序跨主机部署的方案,从而更加简单、高效和可靠的管理容器化应用。但是,随着 Kubernetes 系统规模的扩大,监控和问题排查变得愈发困难。
在 Kubernetes 集群中,应用程序会被部署在多个主机上,在这个过程中,面临着很多的挑战。例如,如何快速发现故障,了解服务运行情况,及时提出优化建议等等。针对这些问题,我们可以使用 Prometheus 作为 Kubernetes 监控及问题排查的解决方案。
为什么选择 Prometheus 进行 Kubernetes 监控及问题排查
在 Kubernetes 中,每个 Pod 都会拥有一个独立的 IP 地址,因此,如何从 Pod 中获取数据是一个挑战。此时,Prometheus 就能帮助我们解决这个问题。Prometheus 是一款开源的监控和警报系统,其能够帮助我们收集和分析我们的 Kubernetes 集群数据,并快速发现故障。同时,Prometheus 还拥有强大的查询和可视化工具,让我们可以更加直观的了解集群运行情况。
下面是一些优点:
- Prometheus 可以监控多种 Kubernetes 资源,包括 Pod、ReplicaSet、Deployment、Service 等等。
- Prometheus 通过标准的 API 暴露了数据,因此我们可以使用多种方法来获取数据。
- Prometheus 具有强大的查询语言,它可以用来解决多种问题,而不仅仅是监控问题。
如何使用 Prometheus 进行 Kubernetes 监控及问题排查
安装 Prometheus
安装 Prometheus 最简单的方法是使用 Helm。以下是安装 Prometheus 的 Helm Chart 的示例:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update helm install prometheus prometheus-community/kube-prometheus-stack
定义监控规则
Prometheus 需要一组规则来定义它应该如何收集和处理数据。这些规则通过 Kubernetes 配置文件定义,我们可以使用 ConfigMap 或者 Secret 存储这些文件。
以下是 prometheus-rules.yaml 文件的示例,其中定义了 CPU 使用率、内存使用率、请求延迟等几个例子。请根据您的实际情况编辑此文件。
// www.javascriptcn.com code example
groups:
- name: kubernetes
rules:
- alert: HighCPUUsage
expr: sum(rate(container_cpu_usage_seconds_total{id="/"}[5m])) by (pod_name) > 0.7
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.pod_name }}"
description: "{{ $labels.pod_name }} has high CPU usage ({{ $value }})."
- alert: HighMemoryUsage
expr: sum(container_memory_usage_bytes{container!="", pod_id!=""}) by (pod_name) / sum(label_replace(container_spec_memory_limit_bytes{container!="", pod_id!=""}, "container_name", "$1", "container_name", "(.*)")) by (pod_name) > 0.7
for: 5m
labels:
severity: warning
annotations:
summary: "High memory usage on {{ $labels.pod_name }}"
description: "{{ $labels.pod_name }} has high memory usage ({{ $value }})."
- alert: HighRequestLatency
expr: histogram_quantile(0.99, sum(rate(request_duration_seconds_bucket{id="/"}[5m])) by (le, route)) > 0.3
for: 5m
labels:
severity: warning
annotations:
summary: "High request latency"
description: "High request latency ({{ $value }}) on route {{ $labels.route }}."部署 Exporter
Prometheus 需要通过 Exporter 收集各种数据,而 Exporter 通常是由第三方开发人员开发的,用于收集特定类型的数据。此外,Prometheus 还支持自定义 Exporter,从而可以扩展对 Kubernetes 集群资源的监控和分析。
以下是安装 node Exporter 的步骤:
- 创建 node-exporter-deployment.yaml 文件,其中定义了要部署的 Pod 和容器的映像名称:
// www.javascriptcn.com code example
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-exporter
spec:
replicas: 1
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
containers:
- name: node-exporter
image: prom/node-exporter:v1.0.1
ports:
- containerPort: 9100- 创建 service.yaml 文件,其中定义了服务端口和选择器:
// www.javascriptcn.com code example
apiVersion: v1
kind: Service
metadata:
name: node-exporter
spec:
ports:
- name: metrics
port: 9100
protocol: TCP
targetPort: metrics
selector:
app: node-exporter- 使用 kubectl 命令部署 node Exporter:
kubectl apply -f node-exporter-deployment.yaml kubectl apply -f service.yaml
启用和配置 Alertmanager
Alertmanager 用于管理 Alerts 并将它们发送到指定的接收器。我们可以通过 Alertmanager 样本文件对其进行配置,并使用 ConfigMap 或 Secret 存储它。
以下是 Alertmanager 配置文件的示例:
// www.javascriptcn.com code example global: resolve_timeout: 5m route: group_by: ['alertname', 'priority'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: ops-team receivers: - name: ops-team email_configs: - to: 'ops-team@example.com'
配置 Prometheus
现在,我们可以通过以下两种方式之一来配置 Prometheus:
- 在安装 Prometheus 时修改默认配置。
- 在 Prometheus 运行时修改 Prometheus.yml。
在 Prometheus 配置文件中,我们可以定义我们要采集的标签和度量标准。
// www.javascriptcn.com code example
global:
scrape_interval: 10s
scrape_timeout: 10s
evaluation_interval: 10s
scrape_configs:
- job_name: kubernetes-apiservers
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
cert_file: /var/run/secrets/kubernetes.io/serviceaccount/tls.crt
key_file: /var/run/secrets/kubernetes.io/serviceaccount/tls.key
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: endpoints
api_server: https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT_HTTPS
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_number]
action: keep
regex: default;kubernetes;https以上是部分 Prometheus 配置文件的示例,详情请参考 Prometheus 官方文档。
小结
本文详细介绍了使用 Prometheus 进行 Kubernetes 监控及问题排查的方法和步骤,包括安装、定义监控规则、部署 Exporter、启用和配置 Alertmanager、配置 Prometheus 等。Prometheus 可以帮助我们更加直观的了解 Kubernetes 集群的运行情况,并能够快速发现故障,提高 Kubernetes 应用程序的可靠性和稳定性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d5e39ca941bf7134b3e583