程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 GKE 中的 HPA 中扩展时出错:apiserver 无法写入 JSON 响应:http2:流已关闭大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 GKE 中的 HPA 中扩展时出错:apiserver 无法写入 JSON 响应:http2:流已关闭?

开发过程中遇到在 GKE 中的 HPA 中扩展时出错:apiserver 无法写入 JSON 响应:http2:流已关闭的问题如何解决?下面主要结合日常开发的经验,给出你关于在 GKE 中的 HPA 中扩展时出错:apiserver 无法写入 JSON 响应:http2:流已关闭的解决方法建议,希望对你解决在 GKE 中的 HPA 中扩展时出错:apiserver 无法写入 JSON 响应:http2:流已关闭有所启发或帮助;

按照 Google 为在 Google Kubernetes ENGIne 中部署 HPA 制定的指南:https://cloud.google.com/kubernetes-ENGIne/docs/tutorials/autoscaling-metrics

并添加正确的权限,因为我在本指南中使用了 Workload IDentity:https://github.com/GoogleCloudPlatform/k8s-stackdriver/tree/master/custom-metrics-stackdriver-adapter

并且还添加了此处评论的防火墙规则:https://github.com/kubernetes-sigs/prometheus-adapter/issues/134

我遇到了 HPA 返回此错误的问题:

kubectl describe hpa -n test-namespace
name:                  my-hpa
namespace:             test-namespace
Labels:                <none>
Annotations:           <none>
Creationtimestamp:     Tue,13 Apr 2021 12:47:56 +0200
Reference:             StatefulSet/my-set
Metrics:               ( current / target )
  "my-metric" on pods:  <unkNown> / 1
Min replicas:          1
Max replicas:          60
StatefulSet pods:      1 current / 0 desired
Conditions:
  Type           Status  Reason               message
  ----           ------  ------               -------
  AbletoScale    True    SucceededGetScale    the HPA controller was able to get the target's current scale
  ScalingActive  false   FailedGetPodsMetric  the HPA was unable to compute the replica count: unable to get metric my-metric: no metrics returned from custom metrics API
Events:
  Type     Reason                        Age                   From                       message
  ----     ------                        ----                  ----                       -------
  Warning  FailedGetPodsMetric           8m26s (x40 over 18m)  horizontal-pod-autoscaler  unable to get metric my-metric: no metrics returned from custom metrics API
  Warning  FailedComputeMetricsReplicas  3m26s (x53 over 18m)  horizontal-pod-autoscaler  Failed to compute desired number of replicas based on Listed metrics for StatefulSet/test-namespace/my-set: invalID metrics (1 invalID out of 1),first error is: Failed to get pods metric value: unable to get metric my-metric: no metrics returned from custom metrics API

但是 API@R_696_9260@ces 是真的,

kubectl get API@R_696_9260@ces
name                                     @R_696_9260@CE                                             AVAILABLE   AGE
...
v1beta1.custom.metrics.k8s.io            custom-metrics/custom-metrics-stackdriver-adapter   True        24h
v1beta1.external.metrics.k8s.io          custom-metrics/custom-metrics-stackdriver-adapter   True        24h
v1beta2.custom.metrics.k8s.io            custom-metrics/custom-metrics-stackdriver-adapter   True        24h
...

当我尝试检索指标数据时,它返回正常,

kubectl get --raw "/APIs/custom.metrics.k8s.io/v1beta2/namespaces/test-namespace/pods/*/my-metric" | jq .
{
  "kind": "MetricValueList","APIVersion": "custom.metrics.k8s.io/v1beta2","Metadata": {
    "selflink": "/APIs/custom.metrics.k8s.io/v1beta2/namespaces/test-namespace/pods/%2A/my-metric"
  },"items": [
    {
      "describedobject": {
        "kind": "Pod","namespace": "test-namespace","name": "my-metrics-API-XXXX","APIVersion": "/__internal"
      },"metric": {
        "name": "my-metric","SELEctor": null
      },"timestamp": "2021-04-13T11:15:30Z","value": "5"
    }
  ]
}

但是堆栈驱动程序给了我这个错误:

2021-04-13T11:01:30.432634Z APIserver was unable to write a JsON response: http2: stream closed
2021-04-13T11:01:30.432679Z APIserver received an error that is not an Metav1.Status: &errors.errorString{s:"http2: stream closed"}

我必须像这样配置谷歌提供的适配器:

APIVersion: v1
kind: namespace
Metadata:
  name: custom-metrics
---
APIVersion: v1
kind: @R_696_9260@ceAccount
Metadata:
  name: custom-metrics-stackdriver-adapter
  namespace: custom-metrics
---
APIVersion: rBAC.authorization.k8s.io/v1
kind: ClusterRoleBinding
Metadata:
  name: custom-metrics:system:auth-delegator
roleRef:
  APIGroup: rBAC.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-delegator
subjects:
- kind: @R_696_9260@ceAccount
  name: custom-metrics-stackdriver-adapter
  namespace: custom-metrics
---
APIVersion: rBAC.authorization.k8s.io/v1
kind: RoleBinding
Metadata:
  name: custom-metrics-auth-reader
  namespace: kube-system
roleRef:
  APIGroup: rBAC.authorization.k8s.io
  kind: Role
  name: extension-APIserver-authentication-reader
subjects:
- kind: @R_696_9260@ceAccount
  name: custom-metrics-stackdriver-adapter
  namespace: custom-metrics
---
APIVersion: rBAC.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
Metadata:
  name: custom-metrics-resource-reader
roleRef:
  APIGroup: rBAC.authorization.k8s.io
  kind: ClusterRole
  name: vIEw
subjects:
- kind: @R_696_9260@ceAccount
  name: custom-metrics-stackdriver-adapter
  namespace: custom-metrics
---
APIVersion: apps/v1
kind: Deployment
Metadata:
  name: custom-metrics-stackdriver-adapter
  namespace: custom-metrics
  labels:
    run: custom-metrics-stackdriver-adapter
    k8s-app: custom-metrics-stackdriver-adapter
spec:
  replicas: 1
  SELEctor:
    matchLabels:
      run: custom-metrics-stackdriver-adapter
      k8s-app: custom-metrics-stackdriver-adapter
  template:
    Metadata:
      labels:
        run: custom-metrics-stackdriver-adapter
        k8s-app: custom-metrics-stackdriver-adapter
        kubernetes.io/cluster-@R_696_9260@ce: "true"
    spec:
      @R_696_9260@ceAccountname: custom-metrics-stackdriver-adapter
      containers:
      - image: gcr.io/gke-release/custom-metrics-stackdriver-adapter:v0.12.0-gke.0
        imagePullPolicy: Always
        name: pod-custom-metrics-stackdriver-adapter
        command:
        - /adapter
        - --use-new-resource-model=true
        - --cert-dir=/tmp
        - --secure-port=4443
        resources:
          limits:
            cpu: 250m
            memory: 200Mi
          requests:
            cpu: 250m
            memory: 200Mi
        securityContext:
          runAsnonRoot: true
          runAsUser: 1000
---
APIVersion: v1
kind: @R_696_9260@ce
Metadata:
  labels:
    run: custom-metrics-stackdriver-adapter
    k8s-app: custom-metrics-stackdriver-adapter
    kubernetes.io/cluster-@R_696_9260@ce: 'true'
    kubernetes.io/name: Adapter
  name: custom-metrics-stackdriver-adapter
  namespace: custom-metrics
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 4443
  SELEctor:
    run: custom-metrics-stackdriver-adapter
    k8s-app: custom-metrics-stackdriver-adapter
  type: ClusterIP
---
APIVersion: APIregistration.k8s.io/v1
kind: API@R_696_9260@ce
Metadata:
  name: v1beta1.custom.metrics.k8s.io
spec:
  insecureSkipTLsverify: true
  group: custom.metrics.k8s.io
  groupPriorityminimum: 100
  versionPriority: 100
  @R_696_9260@ce:
    name: custom-metrics-stackdriver-adapter
    namespace: custom-metrics
  version: v1beta1
---
APIVersion: APIregistration.k8s.io/v1
kind: API@R_696_9260@ce
Metadata:
  name: v1beta2.custom.metrics.k8s.io
spec:
  insecureSkipTLsverify: true
  group: custom.metrics.k8s.io
  groupPriorityminimum: 100
  versionPriority: 200
  @R_696_9260@ce:
    name: custom-metrics-stackdriver-adapter
    namespace: custom-metrics
  version: v1beta2
---
APIVersion: APIregistration.k8s.io/v1
kind: API@R_696_9260@ce
Metadata:
  name: v1beta1.external.metrics.k8s.io
spec:
  insecureSkipTLsverify: true
  group: external.metrics.k8s.io
  groupPriorityminimum: 100
  versionPriority: 100
  @R_696_9260@ce:
    name: custom-metrics-stackdriver-adapter
    namespace: custom-metrics
  version: v1beta1
---
APIVersion: rBAC.authorization.k8s.io/v1
kind: ClusterRole
Metadata:
  name: external-metrics-reader
rules:
- APIGroups:
  - "external.metrics.k8s.io"
  resources:
  - "*"
  verbs:
  - List
  - get
  - watch
---
APIVersion: rBAC.authorization.k8s.io/v1
kind: ClusterRoleBinding
Metadata:
  name: external-metrics-reader
roleRef:
  APIGroup: rBAC.authorization.k8s.io
  kind: ClusterRole
  name: external-metrics-reader
subjects:
- kind: @R_696_9260@ceAccount
  name: horizontal-pod-autoscaler
  namespace: kube-system

因为它禁用了 443 端口,我不得不更改为 4443 并加上 --cert-dir=/tmp 选项,因为没有该选项,stackdriver 会返回错误:

"unable to run custom metrics adapter: error creaTing self-signed certificates: mkdir APIserver.local.config: permission denIEd"

我想我解释了我为配置它所做的所有步骤,但没有成功。有什么想法吗?

解决方法

为我解决!

经过多次测试,在HPA yaml中更改,

PodExternal 的度量,以及带有 custom.google.apis/my-metric 的度量名称,它有效!

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-hpa
  namespace: test-namespace
spec:
  maxReplicas: 60
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: StatefulSet
    name: my-set
  metrics:
  - type: External
    external:
      metric: 
        name: custom.googleapis.com|my-metric
      target:
        averageValue: 1
        type: AverageValue

大佬总结

以上是大佬教程为你收集整理的在 GKE 中的 HPA 中扩展时出错:apiserver 无法写入 JSON 响应:http2:流已关闭全部内容,希望文章能够帮你解决在 GKE 中的 HPA 中扩展时出错:apiserver 无法写入 JSON 响应:http2:流已关闭所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。