Horizontal Pod Autoscaler (HPA):当前利用率:<unknown> with custom namespace
Horizontal Pod Autoscaler (HPA): Current utilization: <unknown> with custom namespace
更新:我在 kops 的帮助下在 AWS 云上部署。
我正在为我的一个 kubernete 部署应用 HPA。
在测试示例应用程序时,我使用默认命名空间进行部署,我可以看到公开的指标如下(显示当前利用率为 0%)
$ kubectl run busybox --image=busybox --port 8080 -- sh -c "while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; \
env | grep HOSTNAME | sed 's/.*=//g'; } | nc -l -p 8080; done"
$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
busybox Deployment/busybox 0%/20% 1 4 1 14m
但是当我使用自定义命名空间(示例:test)进行部署时,当前利用率显示未知
$ kubectl get hpa --namespace test
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
busybox Deployment/busybox <unknown>/20% 1 4 1 25m
有人可以告诉我这里有什么问题吗?
在您遇到此问题的命名空间中尝试运行下面的命令,看看您是否得到任何指示。
kubectl get --raw /apis/metrics.k8s.io/
- 这应该显示有效的 JSON
- 此外,执行
kubectl describe hpa name_of_hpa_deployment
- 这可能表明您在该命名空间中的 hpa 部署是否存在任何问题。
将来您需要满足几个条件才能让 HPA 发挥作用。你的集群需要有 metrics server 或 heapster 运行。重要的是在命名空间的基础上设置资源。
您没有提供您的集群运行在什么环境下,但在GKE中默认您有一个cpu资源集(100m),但您需要在新命名空间上指定它:
Please note that if some of the pod’s containers do not have the
relevant resource request set, CPU utilization for the pod will not be
defined and the autoscaler will not take any action for that metric.
对于你的情况,我不确定为什么它在重新部署后仍然有效,因为没有足够的信息。但为了将来记得:
1) 您要缩放的对象和 HPA 应该在同一个命名空间中
2) 在每个命名空间 CPU 上设置资源,或者简单地添加 --requests=cpu=value
,以便 HPA 能够基于此进行扩展。
更新:
对于您的具体情况:
1) kubectl run busybox --image=busybox --port 8080 -n test --requests=cpu=200m -- sh -c "while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; \
env | grep HOSTNAME | sed 's/.*=//g'; } | nc -l -p 8080; done"
2) kubectl autoscale deployment busybox --cpu-percent=50 --min=1 --max=10 -n test
更新:我在 kops 的帮助下在 AWS 云上部署。
我正在为我的一个 kubernete 部署应用 HPA。 在测试示例应用程序时,我使用默认命名空间进行部署,我可以看到公开的指标如下(显示当前利用率为 0%)
$ kubectl run busybox --image=busybox --port 8080 -- sh -c "while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; \
env | grep HOSTNAME | sed 's/.*=//g'; } | nc -l -p 8080; done"
$ kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
busybox Deployment/busybox 0%/20% 1 4 1 14m
但是当我使用自定义命名空间(示例:test)进行部署时,当前利用率显示未知
$ kubectl get hpa --namespace test
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
busybox Deployment/busybox <unknown>/20% 1 4 1 25m
有人可以告诉我这里有什么问题吗?
在您遇到此问题的命名空间中尝试运行下面的命令,看看您是否得到任何指示。
kubectl get --raw /apis/metrics.k8s.io/
- 这应该显示有效的 JSON- 此外,执行
kubectl describe hpa name_of_hpa_deployment
- 这可能表明您在该命名空间中的 hpa 部署是否存在任何问题。
将来您需要满足几个条件才能让 HPA 发挥作用。你的集群需要有 metrics server 或 heapster 运行。重要的是在命名空间的基础上设置资源。
您没有提供您的集群运行在什么环境下,但在GKE中默认您有一个cpu资源集(100m),但您需要在新命名空间上指定它:
Please note that if some of the pod’s containers do not have the relevant resource request set, CPU utilization for the pod will not be defined and the autoscaler will not take any action for that metric.
对于你的情况,我不确定为什么它在重新部署后仍然有效,因为没有足够的信息。但为了将来记得:
1) 您要缩放的对象和 HPA 应该在同一个命名空间中
2) 在每个命名空间 CPU 上设置资源,或者简单地添加 --requests=cpu=value
,以便 HPA 能够基于此进行扩展。
更新:
对于您的具体情况:
1) kubectl run busybox --image=busybox --port 8080 -n test --requests=cpu=200m -- sh -c "while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; \
env | grep HOSTNAME | sed 's/.*=//g'; } | nc -l -p 8080; done"
2) kubectl autoscale deployment busybox --cpu-percent=50 --min=1 --max=10 -n test