【问题标题】:Is there any pitfalls to use different pods with different autoscaler APIs in the same cluster在同一集群中使用具有不同自动扩缩器 API 的不同 pod 是否有任何陷阱
【发布时间】:2021-05-20 04:42:00
【问题描述】:
我们的 pod 使用 Autoscaling/v2beta1 API 运行。为了利用基于自定义指标的 HPA,我们希望对一些 pod 使用 Autoscaling/v2beta2。由于还有一些其他的 Pod 不急于升级,我们希望将它们与 Autoscaling/v2beta1 留在同一集群的 yaml 中。我认为这应该没有问题。这样使用有没有什么坑?
【问题讨论】:
标签:
kubernetes
horizontal-pod-autoscaling
【解决方案1】:
是的,不会有任何问题,但在同一部署上或为同一 POD 创建不同的 HPA 可能会产生判断问题。
如果存在自定义指标要求,则使用不同 API 版本的 HPA 将起作用。
【解决方案2】:
一般Harsh Manvar 已经回答了您的问题。我将添加更多细节和疑虑。
回答您的问题:是的,您可以在您的 yamls 中使用不同的 HorizontalPodAutoscaler API 版本。然而,它很有可能会以低效的支持和更高的错误机会告终。我建议将所有内容移至v2beta2(最后一点是关于弃用和将来删除v2beta1)。
下一点是,例如,如果您错误地将不同的 HPA 应用于一个部署,它们将并行工作并以相同的方式做出反应(这是 CPU 目标设置相同时)。请看下面的例子。 (但请记住,这是一个简单的示例,如果它有很多指标,它可能会出人意料地工作)
hpa.yaml
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache2
namespace: default
spec:
maxReplicas: 10
metrics:
- resource:
name: cpu
targetAverageUtilization: 50
type: Resource
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
maxReplicas: 10
metrics:
- resource:
name: cpu
target:
averageUtilization: 50
type: Utilization
type: Resource
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
kubectl get hpa --watch的输出:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 10 1 2m28s
php-apache2 Deployment/php-apache 0%/50% 1 10 1 2m28s
php-apache2 Deployment/php-apache 251%/50% 1 10 1 4m16s
php-apache Deployment/php-apache 251%/50% 1 10 4 4m16s
php-apache2 Deployment/php-apache 251%/50% 1 10 6 4m31s
php-apache Deployment/php-apache 251%/50% 1 10 6 4m31s
php-apache2 Deployment/php-apache 52%/50% 1 10 6 5m16s
php-apache Deployment/php-apache 52%/50% 1 10 6 5m16s
php-apache2 Deployment/php-apache 54%/50% 1 10 6 6m16s
php-apache Deployment/php-apache 54%/50% 1 10 6 6m16s
php-apache2 Deployment/php-apache 56%/50% 1 10 6 7m16s
php-apache Deployment/php-apache 56%/50% 1 10 7 7m16s
php-apache2 Deployment/php-apache 56%/50% 1 10 7 7m31s
php-apache2 Deployment/php-apache 46%/50% 1 10 7 8m16s
php-apache Deployment/php-apache 46%/50% 1 10 7 8m16s
php-apache2 Deployment/php-apache 43%/50% 1 10 7 9m17s
php-apache Deployment/php-apache 43%/50% 1 10 7 9m17s
php-apache2 Deployment/php-apache 36%/50% 1 10 7 10m
php-apache Deployment/php-apache 36%/50% 1 10 7 10m
php-apache2 Deployment/php-apache 0%/50% 1 10 7 11m
php-apache Deployment/php-apache 0%/50% 1 10 7 11m
php-apache2 Deployment/php-apache 0%/50% 1 10 7 15m
php-apache Deployment/php-apache 0%/50% 1 10 6 15m
php-apache2 Deployment/php-apache 0%/50% 1 10 6 15m
php-apache Deployment/php-apache 0%/50% 1 10 1 17m
php-apache2 Deployment/php-apache 0%/50% 1 10 1 17m
最后一点是 v2beta1 计划在 1.19 中被弃用,以支持 v2beta2。现在它被重新安排在 1.25 中删除。您可以在this pull request查看它