terraform - Terraform 中的 Prometheus 配置和部署
问题描述
我有一个 IaaC 项目,它使用 Terraform 和 Helm 图表来部署 Prometheus(以及 Grafana、Kubernetes 和平台应用程序)。我确实有关于 Prometheus 的 Kubernetes 指标。但是,我意识到部署的 Prometheus 上的配置并不是真正来自项目中的 Prometheus 配置文件。我不确定是 configMap 还是其他配置的问题。以下是项目中涉及的文件:
/terraform/kubernetes/files/prometheus_config_map.yaml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_pod_label_component]
action: replace
target_label: job
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: kubernetes_pod_name
/terraform/kubernetes/prometheus.tf
resource "kubernetes_namespace" "prometheus" {
metadata {
name = "prometheus"
}
}
resource "kubernetes_config_map" "prometheus_config" {
metadata {
name = "prometheus-config"
namespace = "prometheus"
}
data = {
"prometheus.yml" = file("${path.module}/files/prometheus_config_map.yaml")
}
depends_on = [
kubernetes_namespace.prometheus
]
}
# Values documentation: https://github.com/bitnami/charts/blob/master/bitnami/kube-prometheus/values.yaml
resource "helm_release" "prometheus" {
name = "prometheus"
repository = local.helm_repositories.bitnami
chart = "kube-prometheus"
version = "3.4.0"
namespace = "prometheus"
atomic = true
max_history = 5
values = [
file("${path.module}/helm_values/security.yaml.tpl"),
file("${path.module}/helm_values/prometheus.yaml")
]
depends_on = [
kubernetes_config_map.prometheus_config
]
}
/terraform/kubernetes/helm_values/prometheus.yaml
prometheus:
podMetadata:
annotations:
container.apparmor.security.beta.kubernetes.io/prometheus-operator: runtime/default
seccomp.security.alpha.kubernetes.io/pod: runtime/default
nodeAffinityPreset:
## Node affinity type
## Allowed values: soft, hard
##
type: "hard"
## Node label key to match
## E.g.
## key: "kubernetes.io/e2e-az-name"
##
key: "cloud.google.com/gke-nodepool"
## Node label values to match
## E.g.
## values:
## - e2e-az1
## - e2e-az2
##
values: [
"project-primary-pool"
]
prometheus:
configMaps:
- prometheus-config
在这个文件/terraform/kubernetes/helm_values/prometheus.yaml
中,我尝试删除最后一个并根据此文档prometheus:
移至根目录,但它破坏了 Prometheus 配置。正如您在文件中看到的那样,但是当我检查 Prometheus UI 配置时,所有的 scrape_interval 都是 30s,因此,可以肯定部署的 Prometheus 的配置不是来自该文件。因此,我没有办法更改scrape_interval等配置configMaps:
/terraform/kubernetes/files/prometheus_config_map.yaml
scrape_interval
15s
我还在此文档中注意到我在文件中缺少许多配置,/terraform/kubernetes/helm_values/prometheus.yaml
但我不确定要添加什么。你能告诉我如何解决这个问题吗?先感谢您。
解决方案
如果您检查该行,请在 values.yaml 中:577
https://github.com/bitnami/charts/blob/master/bitnami/kube-prometheus/values.yaml
有一个选项可以将配置映射安装到部署中。
应该挂载到 Prometheus Pod 中的 ConfigMap
配置映射:[]
您可以将配置映射设置为部署并更改间隔时间。
如果它没有使用配置映射值,则它必须使用卷中的默认配置,或者直接进入 POD 并检查一次以进行验证。
推荐阅读
- r - 在格点图上显示值
- powershell - 简单的 Powershell 7.0 脚本
- angular - Angular 11 在 SSR @nguniversal/express-engine 上运行 ReferenceError: globalThis is not defined
- bash - 如何连接路径(读入文件)和bash中的字符串?
- python - 在python中使用变量字符串作为对象参数
- python - 将网站的响应代码和响应时间放入单个循环中
- python - 应用函数需要很长时间才能运行
- php - php preg_replace 没有放回破折号?
- python - 尝试使用 python ftplib 从 NCBI ftp 下载一系列档案,但 ftplib 在长文件传输结束时冻结
- c++ - 从 git 克隆时 Wxwidgets setup.h 文件更改