如何水平自动缩放 Kubernetes 部署
Posted
技术标签:
【中文标题】如何水平自动缩放 Kubernetes 部署【英文标题】:How to Horizontal Autoscaler a Kubernetes Deployment 【发布时间】:2019-08-29 21:19:50 【问题描述】:编辑:
解决方案:我忘记将target_cpu_utilization_percentage
添加到autoscaler.tf
文件中
我想要一个在 Kubernetes 上运行但具有自动缩放功能的 Python(或其他语言)网络服务。
我创建了一个Deployment
和一个Horizontal Autoscaler
,但没有工作。
我正在使用 Terraform 来配置 Kubernetes。
我有这些文件:
Deployments.tf
resource "kubernetes_deployment" "rui-test"
metadata
name = "rui-test"
labels
app = "rui-test"
spec
strategy =
type = "RollingUpdate"
rolling_update =
max_unavailable = "26%" # This is not working
selector =
match_labels =
app = "rui-test"
template =
metadata =
labels =
app = "rui-test"
spec =
container
name = "python-test1"
image = "***************************"
Autoscaler.tf
resource "kubernetes_horizontal_pod_autoscaler" "test-rui"
metadata
name = "test-rui"
spec
max_replicas = 10 # THIS IS NOT WORKING
min_replicas = 3 # THIS IS NOT WORKING
scale_target_ref
kind = "Deployment"
name = "test-rui" # Name of deployment
Service.tf
resource "kubernetes_service" "rui-test"
metadata
name = "rui-test"
labels
app = "rui-test"
spec
selector
app = "rui-test"
type = "LoadBalancer" # Use 'cluster_ip = "None"' or 'type = "LoadBalancer"'
port
name = "http"
port = 8080
当我运行kubectl get hpa
时,我看到了这个:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
rui-test Deployment/rui-test <unknown>/80% 1 3 1 1h
代替:
rui-test Deployment/rui-test <unknown>/79% 3 10 1 1h
这就是我想要的。
但如果我运行 kubectl autoscale deployment rui-test --min=3 --max=10 --cpu-percent=81
我会看到:
Error from server (AlreadyExists): horizontalpodautoscalers.autoscaling "rui-test" already exists
在 kubernetes 中出现这个
【问题讨论】:
【参考方案1】:您缺少metrics server。 Kubernetes 需要确定当前的 CPU/内存使用情况,以便它可以自动扩展和缩减。
了解您是否安装了指标服务器的一种方法是运行:
$ kubectl top node
$ kubectl top pod
【讨论】:
我运行了这些命令并工作了,然后我猜 Google Cloud Platform 已经预装了一个指标服务器【参考方案2】:Horizontal Pod AutoScaler 取决于为您的部署配置的资源限制。
来自documentation:
请注意,如果某些 pod 的容器没有设置相关的资源请求,则不会定义 pod 的 CPU 利用率,并且自动缩放器不会对该指标采取任何行动。
【讨论】:
但是 Google Cloud Platform 中的 Kubernetes 还没有安装这个?我搜索了文档,我认为我不需要配置更多设置。如果我需要,我不知道我需要改变哪里...... 不,这些不是默认设置的。 Kubernetes 不知道您的应用程序使用了多少资源,但要让 Pod AutoScaler 工作,它需要知道何时进行扩展,例如何时达到 Pod 的 CPU 限制的 70%。要设置这些约束,请查看此处的文档:kubernetes.io/docs/concepts/configuration/…。将资源部分添加到部署中应该很容易。以上是关于如何水平自动缩放 Kubernetes 部署的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 kubectl 命令在 Kubernetes 中关闭自动缩放?