当前位置: 首页 > 知识库问答 >
问题:

水平Pod自动缩放目标显示/50%,带有“kubectl get hpa”

艾翼
2023-03-14

尝试将自动缩放部署到我的集群,但目标显示为“未知”,我尝试了不同的指标服务器,但无济于事。我关注了[这个githhub问题](https“//github.com/kubernetes/minikube/issues4456/)甚至认为我使用的是Kubeadm而不是迷你库贝,它并没有改变问题。

我也关注了这个堆栈帖子,但也没有成功。

我正在运行Ubuntu 20.0.4 LTS。

使用 kubernetes version 1.23.5, for kubeadm ,kubcectl, ect

按照另一个stack帖子的建议,我通过curl获得了最新版本

<代码>卷曲-Lhttps://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

我将文件编辑如下:

    spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubectl-insecure-tls
        - --kubelet-preferred-address-types=InternalIP
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        image: k8s.gcr.io/metrics-server/metrics-server:v0.6.1
        imagePullPolicy: IfNotPresent

然后我运行了kubectl apply -f components.yaml

仍然不起作用:

$kubectl获取hpa名称参考目标MINPODS MAXPODS REPLICAS AGE teastore-webui-hpa部署/teastore-webui

另一个建议是明确声明限制。

$ kubectl autoscale deployment teastore-webui --max=20 --cpu-percent=50 --min=1
horizontalpodautoscaler.autoscaling/teastore-webui autoscaled
 
group8@group8:~/Downloads/TeaStore-master/examples/kubernetes$ kubectl get hpa
NAME                 REFERENCE                   TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
teastore-webui       Deployment/teastore-webui   <unknown>/50%   1         20        0          4s
teastore-webui-hpa   Deployment/teastore-webui   <unknown>/50%   1         20        1          20h

这也没有奏效。

这是我尝试自动缩放的部署和服务配置的一个应用。

    spec:
      containers:
        - name: teastore-webui
          image: descartesresearch/teastore-webui
          ports:
            - containerPort: 8080
          env:
            - name: HOST_NAME
              value: "teastore-webui"
            - name: REGISTRY_HOST
              value: "teastore-registry"
          resources:
            requests:
              cpu: "250m"
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: teastore-webui-hpa
  labels:
    app: teastore
spec:
  maxReplicas: 20
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: teastore-webui
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50
---
apiVersion: v1
kind: Service
metadata:
  name: teastore-webui
  labels:
    app: teastore
    run: teastore-webui
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30080
      protocol: TCP
  selector:
    run: teastore-webui

根据其他建议,我将资源明确声明为cpu,利用率为50%,cpu请求设置为250 milicores。

   $kubectl describe hpa
Warning: autoscaling/v2beta2 HorizontalPodAutoscaler is deprecated in v1.23+, unavailable in v1.26+; use autoscaling/v2 HorizontalPodAutoscaler
Name:                                                  teastore-webui
Namespace:                                             default
Labels:                                                <none>
Annotations:                                           <none>
CreationTimestamp:                                     Sat, 02 Apr 2022 16:07:25 -0400
Reference:                                             Deployment/teastore-webui
Metrics:                                               ( current / target )
  resource cpu on pods  (as a percentage of request):  <unknown> / 50%
Min replicas:                                          1
Max replicas:                                          20
Deployment 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   FailedGetResourceMetric  the HPA was unable to compute the replica count: failed to get cpu utilization: unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API: the server is currently unable to handle the request (get pods.metrics.k8s.io)
Events:
  Type     Reason                        Age                    From                       Message
  ----     ------                        ----                   ----                       -------
  Warning  FailedComputeMetricsReplicas  29m (x12 over 32m)     horizontal-pod-autoscaler  invalid metrics (1 invalid out of 1), first error is: failed to get cpu utilization: unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API: the server is currently unable to handle the request (get pods.metrics.k8s.io)
  Warning  FailedGetResourceMetric       2m12s (x121 over 32m)  horizontal-pod-autoscaler  failed to get cpu utilization: unable to get metrics for resource cpu: unable to fetch metrics from resource metrics API: the server is currently unable to handle the request (get pods.metrics.k8s.io)

共有1个答案

终波涛
2023-03-14

这个yaml第6行的语法错误。它需要--kubelet不安全tls,而不是--kubectl不安全tls

spec:
  containers:
  - args:
    - --cert-dir=/tmp
    - --secure-port=4443
    - --kubectl-insecure-tls
    - --kubelet-preferred-address-types=InternalIP
    - --kubelet-use-node-status-port
    - --metric-resolution=15s
    image: k8s.gcr.io/metrics-server/metrics-server:v0.6.1
    imagePullPolicy: IfNotPresent

通过检查日志文件注意到

kubectl logs -f metric-server -n kube-system

谢谢大卫·麦子的评论。

 类似资料:
  • 我是一名Ruby/PHP web应用程序开发人员已经有一段时间了,我已经习惯了水平缩放服务器实例以处理更多请求的想法。水平缩放-意味着位于负载均衡器后面的应用程序的独立实例,它们什么都不共享,彼此不知道。 由于websocket有效地保持了浏览器和服务器之间的开放式通信线路,那么PHP/Ruby世界中典型的水平缩放架构是否会导致像链接中所解释的那样的聊天应用程序中断--因为新的websocket连

  • 我有一个Spring boot应用程序,并为此创建了一个部署yaml文件。现在我已经为它分配了资源: 并且我已将我的自动标量创建为: 现在我的问题是,当我的应用程序启动时,pod的CPU利用率几乎达到100%(启动期间仅5-10分钟,然后恢复正常),因此我的自动标量创建了一个新pod。 但我想要的是它应该在pod启动后等待一段特定的时间(准备状态探测完成),然后只有在需要时才会创建新的pod

  • 我使用的是AWS SQS,所以我的两个应用程序(我们称它们为app1和app2)可以彼此交互。到目前为止,app1正在向queue发送消息,而app2正在监听和处理app1发送的消息。流程是客户端(reactJS应用程序)向App1发送http请求,App1使用AWS SQS将消息转发给App2,然后App2通过websockets向所有其他用户/客户端广播某个消息(这里重要的是所有websock

  • 我正在学习负载平衡器和托管实例组自动扩展。我不理解MIG在使用HTTP负载平衡利用率时如何自动缩放: 因此,在MIG自动缩放设置中,我将目标HTTP负载平衡利用率设置为10%: 在设置外部HTTP负载平衡器时:我有以下两个选项: 利用: 速率: 我可以理解基于CPU的MIG自动缩放,如果平均CPU使用量大于我输入的数量,那么MIG将添加更多VM以降低数量。它非常简单明了。 但我不知道在使用HTTP

  • 我在中有10个标记。我想尽可能地放大,让所有的标记都在视野中?在早期版本中,这可以通过实现,但在v2中,我不知道该如何实现。进一步,我知道需要可见的圆的半径。

  • 我希望一个应用程序从队列中提取一个项目,在队列中处理该项目,然后销毁它自己。拉->过程->破坏。 我已经研究了使用作业模式队列和每个工作项的Pod,因为这适合于使用,但是,当我需要作业在队列为空时自动缩放AKA0/1 Pod,并且在添加项时缩放到某个点时,这是不合适的。我能看到的唯一方法是通过部署,但这将删除每个工作项带有Pod的队列模式。每个项目必须有一个新鲜容器。 有没有一种方法可以让每个工作