Auto
模式等效于 Initial
。git clone https://github.com/kubernetes/autoscaler.git
vertical-pod-autoscaler
目录。cd autoscaler/vertical-pod-autoscaler/
./hack/vpa-down.sh
./hack/vpa-up.sh
kubectl get deploy -n kube-system | grep vpa
updateMode
为 Off
的 VPA 对象,并创建具有两个 Pod 的 Deployment,每个 Pod 各有一个容器。在创建 Pod 后,VPA 会分析容器的 CPU 和内存需求,并在 status
字段中记录 Request 推荐值。VPA 不会自动更新正在运行的容器的资源请求。tke-vpa
的 VPA 对象,指向一个名为 tke-deployment
的 Deployment:cat <<EOF | kubectl apply -f -apiVersion: autoscaling.k8s.io/v1kind: VerticalPodAutoscalermetadata:name: tke-vpaspec:targetRef:apiVersion: "apps/v1"kind: Deploymentname: tke-deploymentupdatePolicy:updateMode: "Off"EOF
tke-deployment
的 Deployment 对象:cat <<EOF | kubectl apply -f -apiVersion: apps/v1kind: Deploymentmetadata:name: tke-deploymentspec:replicas: 2selector:matchLabels:app: tke-deploymenttemplate:metadata:labels:app: tke-deploymentspec:containers:- name: tke-containerimage: nginxEOF
tke-deployment
时并没有设置 CPU 或内存的 Request,Pod 中的 Qos 为 BestEffort,此时 Pod 容易被驱逐。建议您在创建业务的 Deployment 时设置 Request 及 Limit。如果您通过容器服务控制台创建工作负载,控制台将自动为每个容器的 Request 和 Limits 设置默认值。
kubectl get vpa tke-vpa -o yaml
...recommendation:containerRecommendations:- containerName: tke-containerlowerBound:cpu: 25mmemory: 262144ktarget: # 推荐值cpu: 25mmemory: 262144kuncappedTarget:cpu: 25mmemory: 262144kupperBound:cpu: 1771mmemory: 1851500k
target
对应的 CPU 和内存为推荐 Request。您可以选择删除之前的 Deployment,并使用推荐的 Request 值创建新的 Deployment。字段 | 释义 |
lowerBound | 推荐的最小值。使用小于该值的 Request 可能会对性能或可用性产生重大影响。 |
target | 推荐值。由 VPA 计算出最合适的 Request。 |
uncappedTarget | 最新建议值。仅基于实际资源使用情况,不考虑 .spec.resourcePolicy.containerPolicies 中设置的容器可以被推荐的数值范围。uncappedTarget 可能与推荐上下界限不同。该字段仅用作状态指示,不会影响实际的资源分配。 |
upperBound | 推荐的最大值。使用高于该值的 Request 可能造成浪费。 |
tke-opt-vpa
的 VPA 对象,指向一个名为 tke-opt-deployment
的 Deployment:cat <<EOF | kubectl apply -f -apiVersion: autoscaling.k8s.io/v1kind: VerticalPodAutoscalermetadata:name: tke-opt-vpaspec:targetRef:apiVersion: "apps/v1"kind: Deploymentname: tke-opt-deploymentupdatePolicy:updateMode: "Off"resourcePolicy:containerPolicies:- containerName: tke-opt-sidecarmode: "Off"EOF
.spec.resourcePolicy.containerPolicies
中,指定了 tke-opt-sidecar
的 mode
为 “Off”,VPA 将不会为 tke-opt-sidecar
计算和推荐新的 Request。tke-deployment
的 Deployment 对象:cat <<EOF | kubectl apply -f -apiVersion: apps/v1kind: Deploymentmetadata:name: tke-opt-deploymentspec:replicas: 1selector:matchLabels:app: tke-opt-deploymenttemplate:metadata:labels:app: tke-opt-deploymentspec:containers:- name: tke-opt-containerimage: nginx- name: tke-opt-sidecarimage: busyboxcommand: ["sh","-c","while true; do echo TKE VPA; sleep 60; done"]EOF
kubectl get vpa tke-opt-vpa -o yaml
...recommendation:containerRecommendations:- containerName: tke-opt-containerlowerBound:cpu: 25mmemory: 262144ktarget:cpu: 25mmemory: 262144kuncappedTarget:cpu: 25mmemory: 262144kupperBound:cpu: 1595mmemory: 1667500k
tke-opt-container
的推荐值,没有 tke-opt-sidecar
的推荐值。tke-auto-vpa
的 VPA 对象,指向一个名为 tke-auto-deployment
的 Deployment:cat <<EOF | kubectl apply -f -apiVersion: autoscaling.k8s.io/v1kind: VerticalPodAutoscalermetadata:name: tke-auto-vpaspec:targetRef:apiVersion: "apps/v1"kind: Deploymentname: tke-auto-deploymentupdatePolicy:updateMode: "Auto"EOF
updateMode
字段的值为 Auto
,表示 VPA 可以在 Pod 的生命周期内更新 CPU 和内存请求。VPA 可以删除 Pod,调整 CPU 和内存请求,然后启动一个新 Pod。tke-auto-deployment
的 Deployment 对象:cat <<EOF | kubectl apply -f -apiVersion: apps/v1kind: Deploymentmetadata:name: tke-auto-deploymentspec:replicas: 2selector:matchLabels:app: tke-auto-deploymenttemplate:metadata:labels:app: tke-auto-deploymentspec:containers:- name: tke-containerimage: nginxresources:requests:cpu: 100mmemory: 100Milimits:cpu: 200mmemory: 200MiEOF
kubectl get pod pod-name -o yaml
apiVersion: v1kind: Podmetadata:annotations:...vpaObservedContainers: tke-containervpaUpdates: Pod resources updated by tke-auto-vpa: container 0: memory request, cpu request...spec:containers:...resources:limits: # 新的 Request 和 Limits 会维持初始设置的比例cpu: 50mmemory: 500Mirequests:cpu: 25mmemory: 262144k...
kubectl get vpa tke-auto-vpa -o yaml
...recommendation:containerRecommendations:- containerName: tke-containerLower Bound:Cpu: 25mMemory: 262144kTarget:Cpu: 25mMemory: 262144kUncapped Target:Cpu: 25mMemory: 262144kUpper Bound:Cpu: 101mMemory: 262144k
target
表示容器请求 25m CPU 和 262144k 的内存时将以最佳状态运行。lowerBound
和 upperBound
推荐值来决定是否驱逐 Pod 并将其替换为新 Pod。如果 Pod 的请求小于下限或大于上限,则 VPA 将删除 Pod 并将其替换为具有目标推荐值的 Pod。vpa-up.sh
脚本时报错ERROR: Failed to create CA certificate for self-signing. If the error is "unknown option -addext", update your openssl version or deploy VPA from the vpa-release-0.8 branch.
openssl
版本是否大于 1.1.1。vpa-release-0.8
分支。
本页内容是否解决了您的问题?