Kubernetes在内存上无法自动缩放但可在CPU上运行

时间:2018-11-21 08:23:32

标签: docker kubernetes

我使用的Yaml如下所示

Macro() => Gosub()
MacroExit() => Return()

服务,HPA,部署均成功部署,但是当我检查hpa(kubectl获取hpa)时,我得到的结果低于预期

    apiVersion: v1
    kind: Service
    metadata:
      name: xxx-svc
      labels:
        app: xxxxxx
    spec:
      type: NodePort
      ports:
      - port: 8080
      selector:
        app: xxxxxx
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-xxx
      labels:
        app: xxxxxx
    spec:
      selector:
        matchLabels:
          app: xxxxxx
      template:
        metadata:
          labels:
            app: xxxxxx
        spec:
          containers:
          - name: xxxxxx
            image: yyy/xxxxxx:latest
            ports:
            - containerPort: 8080
            resources:
              requests:
                cpu: "100m"
                memory: "504Mi"
              limits:
                cpu: "100m"
                memory: "504Mi"
    ---
    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: xxxxxx
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: my-xxx
      minReplicas: 1
      maxReplicas: 3
      metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
  - type: Resource
    resource:
      name: memory
      target:
        type: Value
        averageValue: 500Mi

我得到(kubectl描述hpa)的原因是

  

警告FailedComputeMetricsReplicas 21m(x4超过22m)horizo​​ntal-pod-autoscaler无法获得内存利用率:缺少内存请求

内存未知但CPU可以工作的原因可能是什么

2 个答案:

答案 0 :(得分:0)

原因:

  

警告失败计算指标重复21m(x4超过22m)   horizo​​ntal-pod-autoscaler无法获得内存利用率:丢失   要求记忆

Kubernetes HPA在默认情况下不适用于内存,您需要为内存创建自定义指标然后使用它。 我发现了here一些其他信息,人们如何尝试解决同一问题。

  

基于Pod内存的AutoScaling

     

在本节中,我们将讨论如何在   Pod正在消耗的内存基础。我们使用了命令   “ kubectl top pod ”以获取已利用的pod内存并应用   逻辑。

     
      
  • 获取正在运行的Pod的平均Pod内存:执行脚本,如下所示:
  •   

答案 1 :(得分:0)

Kubernetes的内存自动缩放尚未应用。您可以编写一个脚本,在所需的容器顶部放置并获取内存值,然后将其除以所需的内存,以获取百分比并按比例放大或缩小容器。只需在cron作业中运行脚本即可,该作业会定期检查统计信息。