通过在容器集群上部署安装ccse-vertical-pod-autoscaler组件,云容器引擎可以提供垂直的容器伸缩的功能。VPA会基于Pod的资源使用情况自动调整集群中容器的资源请求和限制,从而可以让Pod调度到有充足资源的最佳节点上。
前提条件
请确保您已完成以下操作:
- 已创建一个Kubernetes集群,且Kubernetes版本高于1.23。
- 已使用命令行工具连接集群。
- 已卸载集群中已经部署的VPA,以避免新安装的VPA与旧版VPA冲突而导致VPA不可用。
背景信息
注意容器垂直伸缩功能目前处于试验阶段,请谨慎使用。
- 更新正在运行的Pod资源配置是VPA的一项试验性功能,会导致Pod的重建和重启,而且有可能被调度到其他的节点上。
- VPA不会驱逐没有在副本控制器管理下的Pod。目前对于这类Pod,Auto模式等同于Initial模式。
- 目前VPA不能和监控CPU和内存度量的Horizontal Pod Autoscaler (HPA)同时运行,除非HPA只监控其他定制化的或者外部的资源度量。
- VPA使用admission webhook作为其准入控制器。如果集群中有其他的admission webhook,需要确保它们不会与VPA发生冲突。准入控制器的执行顺序定义在API Server的配置参数中。
- VPA会处理出现的绝大多数OOM(Out Of Memory)的事件,但不保证所有的场景下都有效。
- VPA的性能还没有在大型集群中测试过。
- VPA对Pod资源requests的修改值可能超过实际的资源上限,例如节点资源上限、空闲资源或资源配额,从而造成Pod处于Pending状态无法被调度。同时使用集群自动伸缩(ClusterAutoscaler)可以一定程度上解决这个问题。
- 多个VPA同时匹配同一个Pod会造成未定义的行为。
操作步骤
1、在插件市场选择cube-vertical-pod-autoscaler并安装,安装插件步骤请参考安装插件。
各参数含义如下,您也可以根据实际使用情况修改自定义参数:
storage: prometheus //使用的存储,可根据历史记录(默认为8天)计算推荐值。前提是安装了ccse-monitor插件
prometheusAddress: http://prometheus.kube-system.svc.cluster.local:9090 //prometheus在集群中service的域名及端口
minReplicas: 2 //允许驱逐pod的最小副本数,避免单副本pod被驱逐导致的服务不可用
2、Yaml创建VPA自定义资源对象,并绑定负载。
配置文件示例:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: hamster-vpa
spec:
targetRef: //目标控制器
apiVersion:"apps/v1"
kind: Deployment
name: hamster //按需选择对应的deployment
updatePolicy: //更新策略
updateMode:"Off"
resourcePolicy: //设置计算推荐值的约束,可约束资源的上下限,非必填
containerPolicies:
-containerName: '*' //设置约束的容器
minAllowed: //设置约束的允许最小值
cpu: 100m
memory: 50Mi
maxAllowed: 设置约束的允许最大值
cpu:1
memory: 500Mi
controlledResources:["cpu","memory"] //设置约束的资源
其中updateMode参数有以下四种模式可供选择:
- "Auto":VPA 在创建Pod和存量Pod设置资源请求。目前这是 等效于Recreate(见下文)。一旦pod请求的就地更新是可用的,它将会被自动使用。注意:VPA 的此功能是实验性的,可能会导致应用程序停机。
- "Recreate":当所请求的资源与新建议显著不同时(如果定义了pod中断预算,则尊重),VPA会在创建pod时分配建议的资源请求,也会通过驱逐存量pod更新建议的资源请求。这种模式应该很少使用,当您需要确保在资源请求发生变化时重建pod时才使用。否则,最好选择“自动”模式,一旦就地更新可用,就可以利用就地更新重新启动。注意:VPA的这个特性是实验性的,可能会导致应用程序停机。
- "Initial":VPA 仅在新建 Pod 时修改分配资源请求,对于存量Pod 不驱逐更改它们。
- "Off":VPA 不会自动更改 Pod 的资源要求。 会计算出建议值,并且可在 VPA 对象中查看。
3、执行以下命令可以查询VPA为Deployment推荐的CPU和内存资源的requests值。
kubectl describe vpa hamster-vpa