前言
Kubernetes 是目前领先的容器编排平台,越来越多的企业和开发者开始使用它来构建和管理应用程序。但是在实际使用中,我们需要对 Kubernetes 进行监控,以便及时发现和解决问题,保障应用的正常运行和稳定性。在本文中,我们将介绍如何使用 Prometheus 和 Grafana 监控 Kubernetes 的状态和性能。
Prometheus
Prometheus 是一款开源的监控系统,它可以对应用程序进行监控并提供有关其运行状态和性能的实时信息。Prometheus 非常适合大规模分布式系统的监控,特别是容器化应用程序的监控。
Prometheus 通过采集和存储时间序列数据来实现监控。它使用 HTTP 协议进行数据采集,并提供 HTTP API 进行数据查询。Prometheus 可以与多种数据源集成,包括 Kubernetes、Docker、Node.js 等。
在 Kubernetes 中,我们可以使用 Prometheus 从 kubelet、kube-proxy、kube-apiserver 等组件中采集数据,并监控容器中的应用程序。Prometheus 提供了用于 Kubernetes 监控的 Helm Chart,可以轻松部署和配置 Prometheus。
Grafana
Grafana 是一款优秀的开源数据可视化和监控分析平台。它可以与多种数据源集成,包括 Prometheus、Elasticsearch、InfluxDB 等。Grafana 提供了灵活的查询语言和可自定义的面板,可以让用户轻松地可视化监控数据。
在 Kubernetes 中,我们可以使用 Grafana 可视化 Prometheus 采集的监控数据。Grafana 提供了用于 Kubernetes 监控的官方 Dashboard 和示例 Dashboard,可以帮助用户快速创建可自定义的监控面板。
使用 Prometheus 和 Grafana 监控 Kubernetes
下面我们将介绍如何使用 Prometheus 和 Grafana 监控 Kubernetes 状态和性能。
安装 Prometheus 和 Grafana
首先,我们需要部署 Prometheus 和 Grafana。可以使用 Helm Chart 快速部署和配置它们。
以 Prometheus 为例,我们可以使用以下命令部署它:
helm install stable/prometheus --name prometheus
然后,我们需要通过 Kubernetes Service 访问 Prometheus。可以将以下 YAML 配置保存为 prometheus-service.yaml 并执行:
// javascriptcn.com 代码示例 apiVersion: v1 kind: Service metadata: name: prometheus spec: type: NodePort selector: app: prometheus ports: - port: 9090 targetPort: 9090
执行以下命令创建 Service:
kubectl create -f prometheus-service.yaml
类似地,我们可以部署和配置 Grafana:
helm install stable/grafana --name grafana
保存以下内容为 grafana-service.yaml 并创建 Service:
// javascriptcn.com 代码示例 apiVersion: v1 kind: Service metadata: name: grafana spec: type: NodePort selector: app: grafana ports: - port: 3000 targetPort: 3000
kubectl create -f grafana-service.yaml
现在,我们可以通过 NodePort 访问 Prometheus 和 Grafana。例如,如果我们部署了 Prometheus 和 Grafana 的 Kubernetes Namespace 名称为 monitoring,我们可以使用以下命令访问它们:
http://{NodeIP}:{PrometheusNodePort} http://{NodeIP}:{GrafanaNodePort}
配置 Prometheus 获取 Kubernetes 信息
下一步,我们需要配置 Prometheus 以获取 Kubernetes 信息。我们可以使用以下 YAML 配置文件创建 ServiceMonitor 和 PrometheusRule,并将其部署到 Kubernetes 中:
// javascriptcn.com 代码示例 apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: kube-state-metrics namespace: monitoring spec: endpoints: - port: http-metrics interval: 30s scrapeTimeout: 10s selector: matchLabels: app: kube-state-metrics --- apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: kube-state-metrics namespace: monitoring spec: groups: - name: KubeStateMetricsAlerts rules: - alert: KubeCPUOvercommit expr: 1 - (sum by(namespace, pod) (kube_pod_container_resource_limits_cpu_cores) / sum by(namespace, pod) (kube_pod_container_resource_requests_cpu_cores)) > 0.1 for: 5m labels: severity: warning annotations: description: "Kubernetes CPU overcommitment detected in {{ $labels.namespace }}/{{ $labels.pod }}"
此配置文件将创建一个 ServiceMonitor,以获取 kube-state-metrics 暴露的 http-metrics 端口的数据,并创建一个 PrometheusRule,以在 Kubernetes 中发现潜在的问题并发出告警。
配置 Grafana 监控面板
最后,我们需要配置 Grafana 根据 Prometheus 采集的数据创建监控面板。我们可以使用以下 YAML 配置文件创建 ConfigMap 和 Deployment,并将其部署到 Kubernetes 中:
// javascriptcn.com 代码示例 apiVersion: v1 kind: ConfigMap metadata: name: grafana-k8s-dashboards namespace: monitoring data: k8s-cpu-dashboard.json: | { "time": { "from": "now-1h", "to": "now" }, "rows": [ { "title": "CPU Usage by Pod (total)", "height": "200px", "panels": [ { "title": "Pod CPU Usage", "type": "graph", "span": 6, "fill": 1, "linewidth": 2, "targets": [ { "expr": "sum by (pod_name) (rate(container_cpu_usage_seconds_total{name=~\"k8s_.*\", container_name!=\"POD\"}[5m]))", "legendFormat": "{{ pod_name }}" } ], "yaxes": [ { "label": "CPU Usage", "format": "short" }, { "format": "short" } ] } ] } ] } --- apiVersion: apps/v1beta1 kind: Deployment metadata: name: grafana-k8s namespace: monitoring spec: replicas: 1 selector: matchLabels: k8s-app: grafana-k8s template: metadata: labels: k8s-app: grafana-k8s spec: containers: - name: grafana image: grafana/grafana:latest ports: - containerPort: 3000 env: - name: GF_SECURITY_ADMIN_PASSWORD value: admin volumeMounts: - name: grafana-dashboards mountPath: /etc/grafana/provisioning/dashboards - name: grafana-plugins mountPath: /var/lib/grafana/plugins volumes: - name: grafana-dashboards configMap: name: grafana-k8s-dashboards - name: grafana-plugins emptyDir: {}
此配置文件将创建一个 ConfigMap,其中包含一个包含一个监控面板的 JSON 文件。然后,它将创建一个 Grafana 副本集,并将 ConfigMap 作为 Volume 和 Prometheus 作为数据源进行配置。最后,它将公开 Grafana 端点以在浏览器中访问。
示例代码
完整的示例代码可以在以下 GitHub 存储库中找到:
https://github.com/kubernetes/examples/tree/master/staging/monitoring/prometheus
你可以通过执行以下命令将它下载到本地:
git clone https://github.com/kubernetes/examples.git cd examples/staging/monitoring/prometheus
总结
本文介绍了如何使用 Prometheus 和 Grafana 监控 Kubernetes 状态和性能。我们首先介绍了 Prometheus 和 Grafana 的基本概念和用途。然后,我们详细介绍了如何在 Kubernetes 中部署 Prometheus 和 Grafana,以及如何配置它们来监控 Kubernetes 的状态和性能。最后,我们提供了一个包含示例代码的 GitHub 存储库,供读者参考。
我希望这篇文章对那些想要监控 Kubernetes 的开发者和运维人员有所帮助,能够更好地理解和使用 Prometheus 和 Grafana 监控 Kubernetes 应用程序。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6530e5c77d4982a6eb2778df