Kubernetes HPA -- 无法获取资源内存的指标:资源指标未返回任何指标 API
Kubernetes HPA -- Unable to get metrics for resource memory: no metrics returned from resource metrics API
下午好
我刚开始使用 Kubernetes,我正在使用 HPA (HorizontalPodAutoscaler):
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: find-complementary-account-info-1
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: find-complementary-account-info-1
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: memory
target:
type: AverageValue
averageUtilization: 50
但是当我尝试在控制台上查看指标时,它没有显示:
[dockermd@tmp108 APP-MM-ConsultaCuentaPagadoraPospago]$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
find-complementary-account-info-1 Deployment/find-complementary-account-info-1 <unknown>/50% 2 5 2 143m
我的清单是:
apiVersion: apps/v1
kind: Deployment
metadata:
name: find-complementary-account-info-1
labels:
app: find-complementary-account-info-1
spec:
replicas: 2
selector:
matchLabels:
app: find-complementary-account-info-1
template:
metadata:
labels:
app: find-complementary-account-info-1
spec:
containers:
- name: find-complementary-account-info-1
image: find-complementary-account-info-1:latest
imagePullPolicy: IfNotPresent
resources:
limits:
memory: "350Mi"
requests:
memory: "300Mi"
ports:
- containerPort: 8083
env:
- name: URL_CONNECTION_BD
value: jdbc:oracle:thin:@10.161.6.15:1531/DEFAULTSRV.WORLD
- name: USERNAME_CONNECTION_BD
valueFrom:
secretKeyRef:
name: credentials-bd-pers
key: user_pers
- name: PASSWORD_CONNECTION_BD
valueFrom:
secretKeyRef:
name: credentials-bd-pers
key: password_pers
apiVersion: v1
kind: Service
metadata:
name: svc-find-complementary-account-info-1
labels:
app: find-complementary-account-info-1
namespace: default
spec:
selector:
app: find-complementary-account-info-1
type: LoadBalancer
ports:
-
protocol: TCP
port: 8083
targetPort: 8083
nodePort: 30025
externalIPs:
- 10.161.174.68
显示标签
此外,如果我执行 kubect describe hpa,它会抛出以下内容:
[dockermd@tmp108 APP-MM-ConsultaCuentaPagadoraPospago]$ kubectl describe hpa find-complementary-account-info-1
Name: find-complementary-account-info-1
Namespace: default
Labels: <none>
Annotations: <none>
CreationTimestamp: Thu, 29 Oct 2020 13:57:58 -0400
Reference: Deployment/find-complementary-account-info-1
Metrics: ( current / target )
resource memory on pods (as a percentage of request): <unknown> / 50%
Min replicas: 2
Max replicas: 5
Deployment pods: 2 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: unable to get metrics for resource memory: no metrics returned from resource metrics API
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedGetResourceMetric 4m49s (x551 over 144m) horizontal-pod-autoscaler unable to get metrics for resource memory: no metrics returned from resource metrics API
我不在云中工作,我在配置了裸机的本地环境中工作
同时安装 metrics-server:
[dockermd@tmp108 APP-MM-ConsultaCuentaPagadoraPospago]$ kubectl get deployment metrics-server -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 1/1 1 1 177m
我会缺少什么?有人可以帮帮我吗?
[dockermd@tmp108 certs]$ kubectl describe pod metrics-server -n kube-system
Name: metrics-server-5f4b6b9889-6pbv8
Namespace: kube-system
Priority: 0
Node: tmp224/10.164.21.169
Start Time: Thu, 29 Oct 2020 13:27:19 -0400
Labels: k8s-app=metrics-server
pod-template-hash=5f4b6b9889
Annotations: cni.projectcalico.org/podIP: 10.244.119.140/32
cni.projectcalico.org/podIPs: 10.244.119.140/32
Status: Running
IP: 10.244.119.140
IPs:
IP: 10.244.119.140
Controlled By: ReplicaSet/metrics-server-5f4b6b9889
Containers:
metrics-server:
Container ID: docker://f71d26dc2c8e787ae9551faad66f9588a950bf0a6d0d5cb90ff11ceb219e9b37
Image: k8s.gcr.io/metrics-server-amd64:v0.3.6
Image ID: docker-pullable://k8s.gcr.io/metrics-server-amd64@sha256:c9c4e95068b51d6b33a9dccc61875df07dc650abbf4ac1a19d58b4628f89288b
Port: 4443/TCP
Host Port: 0/TCP
Args:
--cert-dir=/tmp
--secure-port=4443
State: Running
Started: Thu, 29 Oct 2020 13:27:51 -0400
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/tmp from tmp-dir (rw)
/var/run/secrets/kubernetes.io/serviceaccount from metrics-server-token-4mn92 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
tmp-dir:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
metrics-server-token-4mn92:
Type: Secret (a volume populated by a Secret)
SecretName: metrics-server-token-4mn92
Optional: false
QoS Class: BestEffort
Node-Selectors: kubernetes.io/arch=amd64
kubernetes.io/os=linux
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events: <none>
错误 unable to get metrics for resource memory: no metrics returned from resource metrics API
不是由错误的 HPA 引起的,而是由 metrics-server 无法抓取任何指标引起的。
大多数情况下,此错误是由 missing commands in metrics-server deployment 引起的。可以通过在部署中添加以下参数来完成。
--kubelet-insecure-tls
--kubelet-preferred-address-types=InternalIP,ExternalIP
问题在:
目标:
类型:平均值
平均利用率:50
您指定了类型“AverageValue”但使用了“averageUtilization”。您应该将类型:更改为“利用率”或使用“averageValue”的值字段。
由于您使用的是 apiVersion: autoscaling/v2beta2 ,根据资源指定扩展策略的正确方法是,
type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
您还可以根据直接值而不是请求值的百分比指定资源指标,方法是使用 target.type 的 AverageValue 而不是 Utilization,并设置相应的 target.averageValue
字段而不是 target.averageUtilization
如果你想尝试 v2beta1,你可以在 metrics 中尝试下面的 yml,
type: Resource
resource:
name: memory
targetAverageUtilization: 60
下午好
我刚开始使用 Kubernetes,我正在使用 HPA (HorizontalPodAutoscaler):
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: find-complementary-account-info-1
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: find-complementary-account-info-1
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: memory
target:
type: AverageValue
averageUtilization: 50
但是当我尝试在控制台上查看指标时,它没有显示:
[dockermd@tmp108 APP-MM-ConsultaCuentaPagadoraPospago]$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
find-complementary-account-info-1 Deployment/find-complementary-account-info-1 <unknown>/50% 2 5 2 143m
我的清单是:
apiVersion: apps/v1
kind: Deployment
metadata:
name: find-complementary-account-info-1
labels:
app: find-complementary-account-info-1
spec:
replicas: 2
selector:
matchLabels:
app: find-complementary-account-info-1
template:
metadata:
labels:
app: find-complementary-account-info-1
spec:
containers:
- name: find-complementary-account-info-1
image: find-complementary-account-info-1:latest
imagePullPolicy: IfNotPresent
resources:
limits:
memory: "350Mi"
requests:
memory: "300Mi"
ports:
- containerPort: 8083
env:
- name: URL_CONNECTION_BD
value: jdbc:oracle:thin:@10.161.6.15:1531/DEFAULTSRV.WORLD
- name: USERNAME_CONNECTION_BD
valueFrom:
secretKeyRef:
name: credentials-bd-pers
key: user_pers
- name: PASSWORD_CONNECTION_BD
valueFrom:
secretKeyRef:
name: credentials-bd-pers
key: password_pers
apiVersion: v1
kind: Service
metadata:
name: svc-find-complementary-account-info-1
labels:
app: find-complementary-account-info-1
namespace: default
spec:
selector:
app: find-complementary-account-info-1
type: LoadBalancer
ports:
-
protocol: TCP
port: 8083
targetPort: 8083
nodePort: 30025
externalIPs:
- 10.161.174.68
显示标签
此外,如果我执行 kubect describe hpa,它会抛出以下内容:
[dockermd@tmp108 APP-MM-ConsultaCuentaPagadoraPospago]$ kubectl describe hpa find-complementary-account-info-1
Name: find-complementary-account-info-1
Namespace: default
Labels: <none>
Annotations: <none>
CreationTimestamp: Thu, 29 Oct 2020 13:57:58 -0400
Reference: Deployment/find-complementary-account-info-1
Metrics: ( current / target )
resource memory on pods (as a percentage of request): <unknown> / 50%
Min replicas: 2
Max replicas: 5
Deployment pods: 2 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: unable to get metrics for resource memory: no metrics returned from resource metrics API
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedGetResourceMetric 4m49s (x551 over 144m) horizontal-pod-autoscaler unable to get metrics for resource memory: no metrics returned from resource metrics API
我不在云中工作,我在配置了裸机的本地环境中工作
同时安装 metrics-server:
[dockermd@tmp108 APP-MM-ConsultaCuentaPagadoraPospago]$ kubectl get deployment metrics-server -n kube-system
NAME READY UP-TO-DATE AVAILABLE AGE
metrics-server 1/1 1 1 177m
我会缺少什么?有人可以帮帮我吗?
[dockermd@tmp108 certs]$ kubectl describe pod metrics-server -n kube-system
Name: metrics-server-5f4b6b9889-6pbv8
Namespace: kube-system
Priority: 0
Node: tmp224/10.164.21.169
Start Time: Thu, 29 Oct 2020 13:27:19 -0400
Labels: k8s-app=metrics-server
pod-template-hash=5f4b6b9889
Annotations: cni.projectcalico.org/podIP: 10.244.119.140/32
cni.projectcalico.org/podIPs: 10.244.119.140/32
Status: Running
IP: 10.244.119.140
IPs:
IP: 10.244.119.140
Controlled By: ReplicaSet/metrics-server-5f4b6b9889
Containers:
metrics-server:
Container ID: docker://f71d26dc2c8e787ae9551faad66f9588a950bf0a6d0d5cb90ff11ceb219e9b37
Image: k8s.gcr.io/metrics-server-amd64:v0.3.6
Image ID: docker-pullable://k8s.gcr.io/metrics-server-amd64@sha256:c9c4e95068b51d6b33a9dccc61875df07dc650abbf4ac1a19d58b4628f89288b
Port: 4443/TCP
Host Port: 0/TCP
Args:
--cert-dir=/tmp
--secure-port=4443
State: Running
Started: Thu, 29 Oct 2020 13:27:51 -0400
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/tmp from tmp-dir (rw)
/var/run/secrets/kubernetes.io/serviceaccount from metrics-server-token-4mn92 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
tmp-dir:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium:
SizeLimit: <unset>
metrics-server-token-4mn92:
Type: Secret (a volume populated by a Secret)
SecretName: metrics-server-token-4mn92
Optional: false
QoS Class: BestEffort
Node-Selectors: kubernetes.io/arch=amd64
kubernetes.io/os=linux
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events: <none>
错误 unable to get metrics for resource memory: no metrics returned from resource metrics API
不是由错误的 HPA 引起的,而是由 metrics-server 无法抓取任何指标引起的。
大多数情况下,此错误是由 missing commands in metrics-server deployment 引起的。可以通过在部署中添加以下参数来完成。
--kubelet-insecure-tls
--kubelet-preferred-address-types=InternalIP,ExternalIP
问题在:
目标: 类型:平均值 平均利用率:50
您指定了类型“AverageValue”但使用了“averageUtilization”。您应该将类型:更改为“利用率”或使用“averageValue”的值字段。
由于您使用的是 apiVersion: autoscaling/v2beta2 ,根据资源指定扩展策略的正确方法是,
type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
您还可以根据直接值而不是请求值的百分比指定资源指标,方法是使用 target.type 的 AverageValue 而不是 Utilization,并设置相应的 target.averageValue
字段而不是 target.averageUtilization
如果你想尝试 v2beta1,你可以在 metrics 中尝试下面的 yml,
type: Resource
resource:
name: memory
targetAverageUtilization: 60