【问题标题】:Stackdriver Prometheus sidecar with Prometheus Operator helm chartStackdriver Prometheus sidecar 和 Prometheus Operator helm 图表
【发布时间】:2020-10-08 22:32:32
【问题描述】:

我们使用stable/prometheus-operator helm chart 在我们的 GKE 集群上设置了 Prometheus + Grafana。现在我们想将一些指标导出到 Stackdriver,因为我们已经安装了自定义指标 Stackdriver 适配器。我们已经在使用 Stackdriver 的一些 Pub/Sub 指标来自动扩展少数部署。现在我们还想在其他部署的自动缩放中使用一些 Prometheus 指标(主要是 nginx 请求率)。

那么,我的第一个问题是:我们可以将 Prometheus 适配器与 Stackdriver 适配器并行使用以在同一个集群中进行自动扩缩吗?

如果没有,我们需要安装 Stackdriver Prometheus Sidecar 以将 Prometheus 指标导出到 Stackdriver,然后通过 Stackdriver 适配器使用它们进行自动缩放。

根据here 的说明,看起来我们需要在运行 Prometheus 的同一 pod 上安装 Stackdriver sidecar。我试了一下。当我运行patch.sh 脚本时,我收到了消息:statefulset.apps/prometheus-prom-operator-prometheus-o-prometheus patched 但是当我再次检查 statefulset 时,它里面没有 Stackdriver sidecar 容器。由于这个 statefulset 是由 Helm chart 创建的,我们可能无法直接修改它。在 Helm 中有推荐的方法吗?

【问题讨论】:

  • 你仍然可以修改有状态集,即使它是由 Helm 创建的。 Helm 不维护部署的状态,它只是根据图表和模板部署资源。
  • 我有时会看到修补实时资源的问题。您可以通过更新 helm 模板或 kuebctl get statefulset prometheus-prom-operator-prometheus-o-prometheus -o yaml --export file.yaml 之类的东西来更新部署,添加必填字段,然后添加 kubectl apply -f file.yaml
  • @PatrickW 不,这似乎不起作用。即使我只是删除 statefulset,它也会自动重新创建。在这个 statefulset 的生成的 yaml 文件中有这行代码块。 ownerReferences: - apiVersion: monitoring.coreos.com/v1 blockOwnerDeletion: true controller: true kind: Prometheus name: prom-operator-prometheus-o-prometheus uid: 5f3e13d6-0caa-428c-88b0-39c883f93ec4这能负责吗?
  • 您是否尝试编辑负责生成此 Statefulset 的 Helm 图表以包含边车的定义并重新创建 pod?
  • @MuhammadAnas 很高兴听到您解决了它。您能否分享您的结果作为答案,因为它会更容易被其他社区成员看到?

标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-helm stackdriver


【解决方案1】:

感谢this comment on GitHub,我想通了。这个 Helm 图表接受了很多配置选项,以至于我在阅读文档时错过了它。

所以,这个 Helm 图表接受了一个配置选项prometheus.prometheusSpec.containers。它在docs 中的描述说:“容器允许注入额外的容器。这意味着允许向 Prometheus pod 添加身份验证代理”。但显然,它不限于身份验证代理,您可以在此处传递任何容器规范,它将被添加到此 Helm 图表创建的 Prometheus StatefulSet 中。

这是我使用的示例配置。一些关键点:

  1. 请将尖括号中的值替换为您的实际值。
  2. 请随意删除 arg --include。我添加它是因为 nginx_http_requests_total 是我现在要发送给 Stackdriver 的唯一 Prometheus 指标。查看Managing costs for Prometheus-derived metrics了解更多详情。
  3. 要找出在volumeMounts 中使用的卷名:
    1. 列出 Prometheus Operator 命名空间中的 StatefulSet。假设您将其安装在 monitoring 命名空间中:kubectl get statefulsets -n monitoring
    2. 描述 Prometheus StatefulSet 假设它的名字是prometheus-prom-operator-prometheus-o-prometheus:kubectl describe statefulset prometheus-prom-operator-prometheus-o-prometheus -n monitoring
    3. 在此 StatefulSet 的详细信息中,找到名为 prometheus 的容器。注意在 arg --storage.tsdb.path 中传递给它的值
    4. 在同一路径上找到安装在此容器上的卷。在我的例子中,它是prometheus-prom-operator-prometheus-o-prometheus-db,所以我也在我的 Stackdriver sidecar 容器上安装了相同的卷。
prometheus:
  prometheusSpec:
    containers:
      - name: stackdriver-sidecar
        image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:0.7.5
        imagePullPolicy: Always
        args:
          - --stackdriver.project-id=<GCP PROJECT ID>
          - --prometheus.wal-directory=/prometheus/wal
          - --stackdriver.kubernetes.location=<GCP PROJECT REGION>
          - --stackdriver.kubernetes.cluster-name=<GKE CLUSTER NAME>
          - --include=nginx_http_requests_total
        ports:
          - name: stackdriver
            containerPort: 9091
        volumeMounts:
          - name: prometheus-prom-operator-prometheus-o-prometheus-db
            mountPath: /prometheus

将此 yaml 保存到文件中。假设您将其保存到 prom-config.yaml

现在,找到您用于在集群上安装 Prometheus Operator Helm chart 的版本名称:

helm list

假设版本名称为prom-operator,您可以通过运行以下命令根据上面组成的配置更新此版本:

helm upgrade -f prom-config.yaml prom-operator stable/prometheus-operator

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多