Vertical Pod Autoscaler(VPA)使用户无需为其pods中的容器设置最新的资源request。配置后,它将根据使用情况自动设置request,从而允许在节点上进行适当的调度,以便为每个pod提供适当的资源量。
使用名为VerticalPodAutoscaler的自定义资源定义对象配置自动缩放 。它允许指定垂直自动缩放的pod以及是否/如何应用资源建议。
要在群集上启用vpa,请按照下面介绍的安装步骤进行操作。
在alpha期间,VPA CRD对象可能以不同版本之间的兼容方式发展。如果安装新版本的VPA,最安全的做法是删除现有的VPA CRD对象。请注意,如果您只是使用vpa-down.sh脚本拆除旧的VPA安装,则会自动执行此操作。
kubectl
应该连接到要安装VPA的群集。$ gcloud info | grep Account #获取当前的Google身份
Account:[myname@example.org]
$ kubectl create clusterrolebinding myname-cluster-admin-binding --clusterrole = cluster-admin --user=myname@example.org
Clusterrolebinding“myname-cluster-admin-binding”created
./hack/vpa-down.sh
要安装VPA,请下载VPA的源代码(例如使用 git clone https://github.com/kubernetes/autoscaler.git
)并在vertical-pod-autoscaler
目录中运行以下命令:
./hack/vpa-up.sh
注意:脚本当前读取环境变量:$REGISTRY和$TAG。除非您要使用非默认版本的VPA,否则请确保不设置它们。
该脚本kubectl
向集群发出多个命令,这些命令插入配置并在kube-system
命名空间中启动所有需要的pod(请参阅 体系结构)。它还会生成并上载VPA Admission Controller在与API服务器通信时使用的机密(CA证书)。
安装完成后,系统就可以为您的pod建议和设置资源请求。为了使用它,您需要为具有相似资源要求的每个逻辑pod组插入Vertical Pod Autoscaler资源。我们建议为每个要自动控制的部署插入VPA,并使用与部署使用的相同的标签选择器。VPA有三种运作模式:
"Auto"
:VPA在创建pod时分配资源请求,并使用首选更新机制在现有pod上更新它们。目前这相当于"Recreate"(见下文)。一旦重启免费(“in-place”),pod请求的更新可用,"Auto"模式可以被用作优选的更新机制。"Recreate"
:VPA在创建pod时分配资源请求,并在请求的资源与新建议明显不同时(如果已定义,则遵循Pod中断预算),通过逐出驱动来更新它们。只有在需要确保在资源请求发生更改时重新启动pod时,才应该很少使用此模式。否则更喜欢"Auto"可以利用免重启的更新模式。"Initial"
:VPA仅在创建pod时分配资源请求,并且以后永远不会更改它们。"Off"
:VPA不会自动更改pods的资源要求。计算建议并可在VPA对象中检查。检查Vertical Pod Autoscaler在集群中是否完全可操作的一种简单方法是创建示例部署和相应的VPA配置:
kubectl create -f examples/hamster.yaml
上面的命令创建了一个包含2个pod的deployment,每个pod运行一个请求100 millicores 的容器,并尝试使用略高于500millicores的容器。该命令还会创建一个VPA配置,其中包含与部署中的pod匹配的选择器。VPA将观察pod的行为,大约5分钟后,他们应该使用更高的CPU请求进行更新(请注意,VPA不会修改部署中的模板,但会更新pod的实际请求)。要查看VPA配置和当前建议的资源请求,请执行:
kubectl describe vpa
注意:如果您的群集的可用容量很小,则这些容器可能无法安排。您可能需要添加更多节点或调整examples / hamster.yaml以使用更少的CPU。
apiVersion: poc.autoscaling.k8s.io/v1alpha1
kind: VerticalPodAutoscaler
metadata:
name: my-app-vpa
spec:
selector:
matchLabels:
app: my-app
updatePolicy:
updateMode: "Auto"
要诊断VPA安装问题,请执行以下步骤:
kubectl --namespace=kube-system get pods|grep vpa
上面的命令应该列出状态为Running的3个pod(推荐者,更新者和准入控制器)。
kubectl --namespace=kube-system logs [pod name]| grep -e '^E[0-9]\{4\}'
kubectl get customresourcedefinition|grep verticalpodautoscalers
该项目包括3个组成部分:
Recommender - 它监视当前和过去的资源消耗,并根据它提供推荐值容器的CPU和内存请求。
Updater - 它检查哪些托管窗格具有正确的资源集,如果没有,则检查它们,以便控制器可以使用更新的请求重新创建它们。
Admission Plugin - 它在新pod上设置正确的资源请求(由于Updater的活动而刚刚由其控制器创建或重新创建)。
有关建筑的更多信息,请点击此处。
请注意,如果您停止在群集中运行VPA,则VPA已修改的pod的资源请求将不会更改,但任何新pod将获取控制器中定义的资源(即部署或复制),而不是根据先前的建议由VPA。
要停止在群集中使用Vertical Pod Autoscaling:
如果在GKE上运行,请清除在先决条件中创建的角色绑定:
kubectl delete clusterrolebinding myname-cluster-admin-binding
删除VPA组件:
./hack/vpa-down.sh
欢迎加入QQ群:k8s开发与实践(482956822)一起交流k8s技术