升级 Kubernetes NGINX 以在外部指标中使用 StackDriver 新资源模型

Upgrading Kubernetes NGINX to use StackDriver new resource model in External Metrics

我已成功将 NGINX 设置为我在 GKE 上的 Kubernetes 集群的入口。我已经启用并配置了外部指标(并且我在我的 HPA 中使用外部指标进行自动缩放)。那里一切都很好,而且运作良好。

但是,我在 StackDriver 中收到了关于这些外部指标的弃用警告。我发现这些警告是因为使用了 "old" 资源类型。

例如,使用这个命令:

kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/custom.googleapis.com|nginx-ingress-controller|nginx_ingress_controller_nginx_process_connections" | jq

我得到这个输出:

{
  "metricName": "custom.googleapis.com|nginx-ingress-controller|nginx_ingress_controller_nginx_process_connections",
  "metricLabels": {
    "metric.labels.controller_class": "nginx",
    "metric.labels.controller_namespace": "ingress-nginx",
    "metric.labels.controller_pod": "nginx-ingress-controller-[snip]",
    "metric.labels.state": "writing",
    "resource.labels.cluster_name": "[snip]",
    "resource.labels.container_name": "",
    "resource.labels.instance_id": "[snip]",
    "resource.labels.namespace_id": "ingress-nginx",
    "resource.labels.pod_id": "nginx-ingress-controller-[snip]",
    "resource.labels.project_id": "[snip]",
    "resource.labels.zone": "[snip]",
    "resource.type": "gke_container"
  },
  "timestamp": "2020-01-26T05:17:33Z",
  "value": "1"
}

请注意 "resource.type" 字段是 "gke_container"。从下一版本的 Kubernetes 开始,这需要 "k8s_container".

我查看了 Kubernetes NGINX 配置,试图确定何时(或是否)进行了升级以支持新的 StackDriver 资源模型,但到目前为止我没有成功。如果可以的话,我宁愿不 "blindly" 升级 NGINX(即使在 UAT 中)。

这些是我目前正在使用的 Docker 个图像:

quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.2
gcr.io/google-containers/prometheus-to-sd:v0.9.0
gcr.io/google-containers/custom-metrics-stackdriver-adapter:v0.10.0

有人能帮忙吗?

提前致谢, 本

好的,这与 NGINX 无关,与 Prometheus(特别是 Prometheus sidecar prometheus-to-sd)有关。

对于未来的读者,如果您的 Prometheus 初创公司看起来像这样:

        - name: prometheus-to-sd
          image: gcr.io/google-containers/prometheus-to-sd:v0.9.0
          ports:
            - name: profiler
              containerPort: 6060
          command:
            - /monitor
            - --stackdriver-prefix=custom.googleapis.com
            - --source=nginx-ingress-controller:http://localhost:10254/metrics
            - --pod-id=$(POD_NAME)
            - --namespace-id=$(POD_NAMESPACE)

然后是这样的:

        - name: prometheus-to-sd
          image: gcr.io/google-containers/prometheus-to-sd:v0.9.0
          ports:
            - name: profiler
              containerPort: 6060
          command:
            - /monitor
            - --stackdriver-prefix=custom.googleapis.com
            - --source=nginx-ingress-controller:http://localhost:10254/metrics
            - --monitored-resource-type-prefix=k8s_
            - --pod-id=$(POD_NAME)
            - --namespace-id=$(POD_NAMESPACE)

即包含 --monitored-resource-type-prefix=k8s_ 选项。