Stackdriver Prometheus sidecar 与 Prometheus Operator helm chart

Stackdriver Prometheus sidecar with Prometheus Operator helm chart

我们使用 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 运行ning 所在的同一个 pod 上安装 Stackdriver sidecar。我试了一下。当我 运行 patch.sh 脚本时,我收到消息:statefulset.apps/prometheus-prom-operator-prometheus-o-prometheus patched 但是当我再次检查 statefulset 时,它没有 Stackdriver sidecar 容器。由于这个 statefulset 是由 Helm chart 创建的,我们可能无法直接修改它。在 Helm 中有推荐的方法吗?

感谢this comment on GitHub,我弄明白了。这个 Helm chart 接受了太多的配置选项,我在阅读文档时错过了它。

所以,原来这个 Helm chart 接受了一个配置选项 prometheus.prometheusSpec.containers。它在 docs 中的描述说:“容器允许注入额外的容器。这意味着允许将身份验证代理添加到 Prometheus pod”。但显然,它不仅限于身份验证代理,您可以在此处传递任何容器规范,它将被添加到此 Helm chart 创建的 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-prometheuskubectl describe statefulset prometheus-prom-operator-prometheus-o-prometheus -n monitoring
    3. 在这个StatefulSet的详细信息中,找到名为prometheus的容器。注意在 arg --storage.tsdb.path
    4. 中传递给它的值
    5. 在同一路径上找到安装在该容器上的卷。在我的例子中,它是 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

希望对您有所帮助。