前端万花筒

引言我们紧接着上篇的PromQL,接着往上盖大楼。这篇我们的主角是 Prometheus-Operator 的Prometheus,它的重要性就不言而喻了。Prometheus-Operator 是

Prometheus 的新战场:精准监控阿里云 AKS Serverless 集群

引言

我们紧接着上篇的战场 PromQL ,接着往上盖大楼 。精准监控集群这篇我们的阿里主角是 Prometheus-Operator 的 Prometheus,它的战场重要性就不言而喻了 。

Prometheus-Operator 是精准监控集群 Kubernetes 生态中广泛应用的监控组件,能够简化 Prometheus 的阿里部署和管理。然而 ,战场随着云原生技术的精准监控集群发展 ,香港云服务器监控阿里云 AKS Serverless 集群成为了一个新的阿里挑战。这些服务本质上是战场无服务器的  ,无法通过传统的精准监控集群节点指标采集方式进行监控。因此 ,阿里我们需要对 Prometheus 自身进行调整 ,战场以更好地适配阿里云 AKS Serverless 场景 。精准监控集群

本文将探讨如何通过重塑 Prometheus ,阿里使其高效监控阿里云 AKS Serverless 环境 。

开始

基本设计

prometheus-operator 的控制链路其实非常简单 ,我们只需要知道以下基本原理就行 :

• PodMonitor 和 ServiceMonitor 最终是用于生成 Prometheus 配置文件中的云计算 srape_config;

• Prometheus 可以使用一个 HTTP Post 请求 /-/reload 来在运行时重新加载配置文件使新的 scrape_config 生效;

以上文为例,prometheus-operator 的控制链路是:

Prometheus

prometheus-operator 监听 Promtheus 资源,当有 Add Event 发生时,prometheus-operator 将以 StatefulSet 的形式部署 Prometheus 实例。每一个 Prometheus Pod 里有两个容器:

• prometheus 容器 :主容器,使用 /etc/prometheus/config_out/prometheus.env.yaml 作为主要的配置文件 :

复制... - --config.file=/etc/prometheus/config_out/prometheus.env.yaml ...1.2.3.

• prometheus-config-reloader 容器:辅助容器 ,用于监听上游配置文件的变化并调用主容器的 reload 接口重新加载配置;

当我们观察这个 Pod 的 volumes 时候 ,有两个 volume 可以重点关注:

复制... volumes: - name: config secret: defaultMode: 420 secretName: prom-agent-prometheus-agent - name: config-out emptyDir: medium: Memory ...1.2.3.4.5.6.7.8.9.10.

• config-out :EmptyDir 类型的服务器租用卷 ,主要是用于 prometheus 容器与 prometheus-config-reloader 容器的数据共享 ,同时挂载于两个容器的 /etc/prometheus/config_out/ 中;

• config :底层是一个 Secret,这个 config 将被挂载为 prometheus-config-reloader 容器中的 /etc/prometheus/config/prometheus.yaml.gz 。 prometheus-config-reloader 会监听这个文件的变化  ,一旦有变化 ,将基于新的文件内容生成新的配置文件 /etc/prometheus/config_out/prometheus.env.yaml。 prometheus-config-reloader 将调用主容器的源码库 reload API 来重新加载配置文件;

PodMonitor / ServiceMonitor

• prometheus-operator 监听 PodMonitor 和 ServiceMonitor 的变化。一旦对应资源发生了变化,prometheus-operator 将基于新的资源生成新的配置文件并将其更新到对应的 Secrets 中 。由于对应 Secrets 以文件形式挂载于 prometheus-config-reloader 容器中并被监听文件变化 ,所以当底层 Secrets 发生了变化,kubelet 将分钟级传播变化到对应容器内部,从而触发 prometheus-config-reloader 容器内的监听逻辑。

• Secrets 内部是一个 Base64 之后的 gz 格式的 prometheus.yaml  ,模板下载比如我们可以用下面这种方式解码出 prometheus.yaml:

复制kubectl get secrets prometheus-k8s -o jsonpath="{ .data.prometheus\.yaml\.gz}" | base64 -d > prometheus.yaml.gz gzip -d prometheus.yaml.gz1.2.3.

我们这些了解完成之后,对于我们后面的改进可谓是……语文不好 ,有点丢人,想不出来成语了 。

Prometheus CRD YAML 优化

我们先从 Prometheus 的持久化数据说起  :

复制storage: volumeClaimTemplate: spec: storageClassName: alicloud-nas-subpath accessModes: - ReadWriteOnce resources: requests: storage: 15Gi1.2.3.4.5.6.7.8.9.

本地存储优化;

启用 WAL 压缩;

复制wal_compression: true1.

减少数据保留时间;

复制retention: 7d1.

还有我们资源的优化,如果你的集群应用很多,资源太少,就会导致 pod 异常,这边你自己调整 :

复制resources: limits: cpu: "3" memory: 3Gi requests: cpu: 1000m memory: 1024Mi1.2.3.4.5.6.7.

完整文件;

复制apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: labels: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 3.0.1 name: k8s namespace: monitoring spec: alerting: alertmanagers: - apiVersion: v2 name: alertmanager-main namespace: monitoring port: web enableFeatures: [] storage: volumeClaimTemplate: spec: storageClassName: alicloud-nas-subpath accessModes: - ReadWriteOnce resources: requests: storage: 15Gi externalLabels: { } image: quay.io/prometheus/prometheus:v3.0.1 nodeSelector: kubernetes.io/os: linux podMetadata: labels: app.kubernetes.io/component: prometheus app.kubernetes.io/instance: k8s app.kubernetes.io/name: prometheus app.kubernetes.io/part-of: kube-prometheus app.kubernetes.io/version: 3.0.1 podMonitorNamespaceSelector: { } # matchExpressions: # - key: kubernetes.io/metadata.name # operator: In # values: # - monitoring # - lobby podMonitorSelector: { } probeNamespaceSelector: { } probeSelector: { } replicas: 2 resources: limits: cpu: "5" memory: 5Gi requests: cpu: 2000m memory: 2048Mi ruleNamespaceSelector: { } ruleSelector: { } scrapeConfigNamespaceSelector: { } scrapeConfigSelector: { } securityContext: fsGroup: 2000 runAsNonRoot: true runAsUser: 1000 serviceAccountName: prometheus-k8s serviceMonitorSelector: { } serviceMonitorNamespaceSelector: { } # matchExpressions: # - key: kubernetes.io/metadata.name # operator: In # values: # - monitoring # - lobby version: 3.0.1 retention: 15d wal_compression: true1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.

扩展

因为 Prometheus 这边优化的还挺多的,免费模板所以我们这一篇就先讲到这里 ,后面我们会更多的剖析相关内容。

• Prometheus Agent

• PrometheusRule

结语

我们 Prometheus 基础的优化和改进就结束了,相比较前几篇,这篇的东西不是很多。其实还有很多的东西都需要讲,我会把它们给分开。

访客,请您发表评论:

网站分类
热门文章
友情链接

© 2025.滇ICP备2023006006号-50sitemap