简介
Kubernetes 技术已成为云原生应用的标准化开发和部署环境,它在云原生应用中使得各自不同服务间的协同工作更加优化。然而,与此同时, Kubernetes 的集群监控与管理也让人头疼。在 Kubernetes 集群中存在着大量的日志文件、系统指标和应用程序指标等数据,这些数据的采集、存储、处理与可视化等操作必须基于稳定而高效的解决方案。于是,Prometheus 的诞生为我们提供了一种高度可靠、实时监控和可扩展的解决方案,对于进行 Kubernetes 监控是至关重要的。
Kubernetes 集群监控方案
Kubernetes 的集群监控方案使用 Prometheus 技术,该技术在 Kubernetes 环境下非常成熟。Prometheus 是一种尤其适用于微服务监控的开源监控以及时序数据库(Time-Series-Database)系统,它能够对各种设备应用程序进行采集、监控和图形化展示,并提供了强大和灵活的查询和聚合操作。Prometheus 中使用的查询语言 PromQL,已经成为开发人员在容器和云原生技术中编写查询的标准化语言之一。Prometheus 的优点是集成Kubernetes环境,能够提供针对Kubernetes的 metric数据收集以及展示。Prometheus 主要支持以下的功能:
基于指标的监控:Prometheus 通过收集时间序列形式的指标数据来实现服务的监控。实时监控可以帮助您及时发现Kubernetes集群的状态,并降低系统运行故障风险。
自动化的目标发现:Prometheus 提供了 Pioneer 技术,它可以通过标签链接找到需要收集数据的目标对象,实现Kubernetes集群内部服务的自动发现和注册,从而避免了在部署和改变服务的过程中,每次都要手动添加和更新监控目标的工作。
多维度数据聚合:PromQL 可实现复杂的数据处理和分析,它能够根据需求,对数据进行聚合、汇总、统计等多种操作,同时也能通过适配器模式,将其他监控系统或数据采集器与 Prometheus 集成在一起,实现多引擎的集群监控。
有效的告警管理:Prometheus 支持动态配置告警规则,通过高效的告警机制,可以快速响应应用程序事件、报告以及错误。
Prometheus 的安装和部署
这里以 Prometheus Operator 安装方式为例,来进行 Prometheus 集群的安装和配置。
首先,我们需先安装 Prometheus Operator,Prometheus Operator 是一个托管 Prometheus 服务的 Kubernetes 集群管理员,它通过自定义资源和控制器来完成 Prometheus 实例和规则的管理。
接下来,我们安装 CustomResourceDefinitions:
$ kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/release-0.41/example/prometheus-operator-crd/alertmanager.crd.yaml $ kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/release-0.41/example/prometheus-operator-crd/prometheus.crd.yaml $ kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/release-0.41/example/prometheus-operator-crd/prometheusrule.crd.yaml
然后,创建命名空间,安装 Prometheus 实例:
$ kubectl create namespace monitoring $ kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/release-0.41/bundle.yaml
确保 Prometheus 实例正在运行:
$ kubectl get pods -n monitoring prometheus-prometheus-operator-6568db4757-rqb2k 2/2 Running 0 62m
最后,安装 Grafana:
$ kubectl create -f grafana.yaml
现在,我们可以在 Kubernetes 集群中使用 Prometheus 的完整监控系统了。
在 Kubernetes 中使用 Prometheus
在 Kubernetes 中使用 Prometheus 集群监控方案的方法主要是通过为 Prometheus 提供指标数据的方式进行监控。Kubernetes 集群本身也有一些指标数据,包括:
kube-state-metrics:提供 Kubernetes 状态的完整视图。
kubelet:提供集群中每台主机上的容器和 Pod 等相关指标。
cAdvisor:提供容器的资源使用情况。
在 Kubernetes 中配置 Prometheus 与 Kubelet 监控模块的对接如下示例:
// www.javascriptcn.com code example
apiVersion: v1
kind: ServiceAccount
metadata:
name: prometheus-k8s
namespace: monitoring
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: prometheus-k8s
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/proxy
- services
- endpoints
- pods
- deployments
- replicationcontrollers
- statefulsets
- daemonsets
- ingresses
verbs: ["get", "list", "watch"]
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: prometheus-k8s
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: prometheus-k8s
subjects:
- kind: ServiceAccount
name: prometheus-k8s
namespace: monitoring
---
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus-k8s
namespace: monitoring
spec:
replicas: 1
serviceAccountName: prometheus-k8s
serviceMonitorSelector:
matchLabels:
app: kubelet
ruleSelector:
matchLabels:
prometheus: kube-prometheus
matchExpressions:
- key: role
operator: In
values:
- worker
alerting:
alertmanagers:
- staticConfigs:
- targets: []
labels: {}
source: ""
timeout: ""
scrapeInterval: 30s
scrapeTimeout: 30s
evaluationInterval: 30s在 Kubernetes 集群中使用 Prometheus。我们还需要知道如何查询指标。PromQL Query Language 通常被用于在 Prometheus 中查询指标数据。它的语法结构主要由函数、表达式和变量构成。下面是一个简单的 PromQL 查询语句的例子:
rate(kubelet_docker_operations[5m])
这个查询语句查询的是在过去五分钟中 kubelet 使用 Docker 执行的操作的速率。
总结
在本文中,我详细阐述了 Kubernetes 集群监控方案中使用 Prometheus 技术的重要性,并提供了使用 Prometheus 的安装和部署方法以及在 Kubernetes 中使用 Prometheus 的教程和指导。这一集群监控方案是 Kubernetes 在云原生应用开发和部署过程中不可或缺的一部分,非常实用和有益积累开发经验,非常值得学习和掌握。
Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/64c6c50510032fedd38f6540