kubernetes - `kubectl get hpa` 将目标显示为未知并且在负载增加时不自动缩放 Pod?
问题描述
我为该部署创建了一个部署和一个 HPA(单节点 minikube 集群)。但是当我运行时kubectl get hpa
,它显示目标为未知(下面的截图)
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
producer Deployment/producer <unknown>/1% 1 3 1 42m
下面是deployment.yaml 文件:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.1.0 (36652f6)
creationTimestamp: null
labels:
io.kompose.service: producer
name: producer
spec:
replicas: 1
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
io.kompose.service: producer
spec:
containers:
- image: <image name>
name: producer
ports:
- containerPort: 8090
env:
- name: mongoUrl
value: mongodb://mongo:27017
- name: mongoHost
value: mongo
- name: mongoPort
value: "27017"
resources:
requests:
cpu: 10m
resources: {}
restartPolicy: Always
status: {}
我运行kubectl autoscale deployment producer --cpu-percent=1 --min=1 --max=3
命令为生产者部署设置自动缩放器。下面是输出kubectl describe hpa
:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedComputeMetricsReplicas 43m (x13 over 49m) horizontal-pod-autoscaler failed to get cpu utilization: missing request for cpu on container producer in pod default/producer-c7dd566f6-69gbq
Warning FailedGetResourceMetric 4m (x91 over 49m) horizontal-pod-autoscaler missing request for cpu on container producer in pod default/producer-c7dd566f6-69gbq
我已经在 minikube 上启用了heapster
和metrics-server
插件,并等待 hpa 从最后 30 分钟开始运行。
来自kube-controller-manager
minikube 的日志:
{"log":"I0912 10:36:40.806224 1 event.go:218] Event(v1.ObjectReference{Kind:\"HorizontalPodAutoscaler\", Namespace:\"default\", Name:\"producer\", UID:\"135d0ebc-b671-11e8-a19f-080027646864\", APIVersion:\"autoscaling/v2beta1\", ResourceVersion:\"71101\", FieldPath:\"\"}): type: 'Warning' reason: 'FailedGetResourceMetric' missing request for cpu on container producer in pod default/producer-c7dd566f6-w8zcd\n","stream":"stderr","time":"2018-09-12T10:36:40.80645916Z"}
{"log":"I0912 10:36:40.806511 1 event.go:218] Event(v1.ObjectReference{Kind:\"HorizontalPodAutoscaler\", Namespace:\"default\", Name:\"producer\", UID:\"135d0ebc-b671-11e8-a19f-080027646864\", APIVersion:\"autoscaling/v2beta1\", ResourceVersion:\"71101\", FieldPath:\"\"}): type: 'Warning' reason: 'FailedComputeMetricsReplicas' failed to get cpu utilization: missing request for cpu on container producer in pod default/producer-c7dd566f6-w8zcd\n","stream":"stderr","time":"2018-09-12T10:36:40.806564094Z"}
输出自kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
minikube 336m 16% 1518Mi 19%
我尝试设置horizontal-pod-autoscaler-use-rest-clients=false
for kube-controller-manager
,仍然面临同样的问题。
解决方案
问题出在我的问题上,producer-deployment.yaml
因为我通过编写以下行再次将资源请求覆盖为空:resources: {}
之后
resources:
requests:
cpu: 10m
这使我的资源请求为空,这就是 heapster 显示的原因missing request for cpu on container producer
。
删除线形resources: {}
解决producer-deployment.yaml
了这个问题。
推荐阅读
- sql - 创建 Athena 表时是否可以删除特定列中的某些字符?
- php - 表单::打开动作变量
- intel-pin - 英特尔 PIN 指令计数取决于什么以及为什么在执行之间会有所不同?
- regex - 如果输入的值已经出现在同一行,则有条件地格式化单元格,下一列是 CSV
- javascript - 浅渲染不渲染包装在 Consumer(jest/Enzyme) 中的组件
- powershell - 如何让 PowerShell 找出我的“字符串 X 字符串数组”参数集?
- typescript - 如何从 json 文件中获取特定的键值?
- excel - 将某些项目移至工作簿适用于其中一项,但不适用于其他项
- python - 具有多处理的特定标准输出行顺序
- asp-classic - 实时流中的异常未出现在分析中