我正在尝试在集群中实现pod的自动伸缩。我尝试过“虚拟”部署和hpa,没有问题。现在,我正在尝试将其集成到我们的“真实的”微服务中,但它不断返回
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: missing request for memory
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedGetResourceMetric 18m (x5 over 19m) horizontal-pod-autoscaler unable to get metrics for resource memory: no metrics returned from resource metrics API
Warning FailedComputeMetricsReplicas 18m (x5 over 19m) horizontal-pod-autoscaler failed to get memory utilization: unable to get metrics for resource memory: no metrics returned from resource metrics API
Warning FailedComputeMetricsReplicas 16m (x7 over 18m) horizontal-pod-autoscaler failed to get memory utilization: missing request for memory
Warning FailedGetResourceMetric 4m38s (x56 over 18m) horizontal-pod-autoscaler missing request for memory
以下是我的个人住房抵押贷款:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: #{Name}
namespace: #{Namespace}
spec:
scaleTargetRef:
apiVersion: apps/v1beta1
kind: Deployment
name: #{Name}
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: #{Name}
namespace: #{Namespace}
spec:
replicas: 2
selector:
matchLabels:
app: #{Name}
template:
metadata:
annotations:
linkerd.io/inject: enabled
labels:
app: #{Name}
spec:
containers:
- name: #{Name}
image: #{image}
resources:
limits:
cpu: 500m
memory: "300Mi"
requests:
cpu: 100m
memory: "200Mi"
ports:
- containerPort: 80
name: #{ContainerPort}
当我执行kubectl top pods
时,我可以看到内存和cpu,当我执行kubectl describe pod
时,我也可以看到请求和限制。
Limits:
cpu: 500m
memory: 300Mi
Requests:
cpu: 100m
memory: 200Mi
我能想到的唯一区别是我的虚拟服务没有linkerd跨斗。
1条答案
按热度按时间9cbw7uwe1#
要使HPA与资源指标一起工作,Pod的 * 每个 * 容器都需要有一个对给定资源(CPU或内存)的请求。
看起来Pod中的Linkerd sidecar容器没有定义内存请求(它可能有CPU请求)。这就是HPA抱怨
missing request for memory
的原因。但是,您可以使用
--proxy-cpu-request
和--proxy-memory-request
injection flags配置Linkerd容器的内存和CPU请求。另一种可能性是使用these annotations配置CPU和内存请求:
config.linkerd.io/proxy-cpu-request
config.linkerd.io/proxy-memory-request
以这两种方式中的任何一种定义内存请求都应该可以使HPA工作。
参考资料:
--proxy-cpu-request
和--proxy-memory-request
取代了--proxy-cpu
和--proxy-memory